在 AWS DocumentDB 中,write concern
是用於指定寫操作的確認級別,即確定寫操作在資料庫中持久化的程度。預設情況下,AWS DocumentDB 使用 "w": 1
作為其寫關注級別,這意味著寫操作在主節點上成功執行後,客戶端會收到確認。
AWS DocumentDB 不支援直接修改 MongoDB 的 write concern
設定,因為 AWS DocumentDB 是託管服務,許多配置細節是由 AWS 管理的。然而,我們可以在客戶端程式碼中指定特定的 write concern
設定以覆蓋預設值。
設定 Write Concern 在客戶端程式碼中
你可以在 Java 中使用 MongoDB 驅動程式來設定 write concern
。以下是一個示例:
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.WriteConcern;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoDatabase;
import com.mongodb.connection.ClusterSettings;
import java.util.Collections;
public class DocumentDBExample {
public static void main(String[] args) {
// Create a custom WriteConcern
WriteConcern writeConcern = WriteConcern.MAJORITY.withWTimeout(1000);
// Configure the MongoClient with custom settings
ClusterSettings clusterSettings = ClusterSettings.builder()
.hosts(Collections.singletonList(new ServerAddress("your-documentdb-endpoint", 27017)))
.build();
MongoClientSettings settings = MongoClientSettings.builder()
.applyToClusterSettings(builder -> builder.applySettings(clusterSettings))
.writeConcern(writeConcern)
.build();
// Create a MongoClient with the custom settings
MongoClient mongoClient = MongoClients.create(settings);
// Access your database
MongoDatabase database = mongoClient.getDatabase("your-database-name");
// Perform operations on the database
// Example: Insert a document
database.getCollection("your-collection-name").insertOne(new Document("key", "value"));
// Close the client
mongoClient.close();
}
}
在這個示例中,我們建立了一個自定義的 WriteConcern
,並將其配置為 WriteConcern.MAJORITY
,這意味著寫操作需要在大多數副本整合員上確認。然後,我們將此 WriteConcern
應用於 MongoClientSettings
,並建立一個 MongoClient
例項。
其他 Write Concern 級別
MongoDB 提供了多個 Write Concern
級別,每個級別都有不同的確認要求:
WriteConcern.ACKNOWLEDGED
: 預設級別,寫操作在主節點上成功執行後,客戶端會收到確認。WriteConcern.UNACKNOWLEDGED
: 寫操作不需要確認,客戶端不會等待伺服器的響應。WriteConcern.W1
: 寫操作在一個節點上確認後,客戶端會收到確認。WriteConcern.W2
: 寫操作在兩個節點上確認後,客戶端會收到確認。WriteConcern.MAJORITY
: 寫操作在大多數副本整合員上確認後,客戶端會收到確認。
你可以根據需求選擇合適的 Write Concern
級別,並在客戶端程式碼中進行設定。
在 Spring Data MongoDB 中設定 Write Concern
如果你使用 Spring Data MongoDB,可以在配置中設定 Write Concern
。例如:
import com.mongodb.WriteConcern;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
@Configuration
public class MongoConfig {
@Bean
public MongoTemplate mongoTemplate() {
String connectionString = "mongodb://your-documentdb-endpoint:27017/your-database-name";
SimpleMongoClientDatabaseFactory factory = new SimpleMongoClientDatabaseFactory(connectionString);
MongoTemplate mongoTemplate = new MongoTemplate(factory);
mongoTemplate.setWriteConcern(WriteConcern.MAJORITY);
return mongoTemplate;
}
}
這樣,Spring Data MongoDB 將使用指定的 Write Concern
設定進行所有寫操作。
透過在客戶端程式碼中配置 Write Concern
,你可以根據特定需求調整 AWS DocumentDB 的寫操作確認級別。