AWS DocumentDB 如何設定為預設 write concern

gongchengship發表於2024-07-05

在 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 的寫操作確認級別。

相關文章