Skip to content

Latest commit

 

History

History
118 lines (90 loc) · 3.21 KB

File metadata and controls

118 lines (90 loc) · 3.21 KB

Durability Levels

Platform-agnostic reference shared by all server-connection-* and sdk-patterns-* skills.

Durability controls how many nodes must acknowledge a write before it is considered successful. Higher durability = stronger guarantees, higher latency.

Level Guarantee Latency
None Acknowledged by active node memory Lowest
Majority Acknowledged by majority of replicas in memory Low
MajorityAndPersistActive Majority in memory + persisted on active node Medium
PersistToMajority Persisted on majority of nodes Highest

Python

from couchbase.durability import DurabilityLevel
from couchbase.options import UpsertOptions

# Majority durability (recommended for most production writes)
collection.upsert(
    "order_1001",
    {"status": "confirmed"},
    UpsertOptions(durability=DurabilityLevel.MAJORITY)
)

# Persist to majority (financial transactions, critical data)
collection.upsert(
    "payment_abc",
    {"amount": 99.99, "status": "settled"},
    UpsertOptions(durability=DurabilityLevel.PERSIST_TO_MAJORITY))
)

Java

collection.upsert(
    "order_1001",
    JsonObject.create().put("status", "confirmed"),
    UpsertOptions.upsertOptions()
        .durability(DurabilityLevel.MAJORITY)
);

Node.js

await collection.upsert("order_1001", { status: "confirmed" }, {
  durability: couchbase.DurabilityLevel.Majority
});

Go

_, err = collection.Upsert("order_1001", map[string]interface{}{"status": "confirmed"},
    &gocb.UpsertOptions{
        DurabilityLevel: gocb.DurabilityLevelMajority,
    })

.NET

await collection.UpsertAsync("order_1001", new { status = "confirmed" },
    new UpsertOptions().Durability(DurabilityLevel.Majority));

Rust

use couchbase::options::kv_options::UpsertOptions;
use couchbase::DurabilityLevel;

collection.upsert(
    "order_1001",
    serde_json::json!({"status": "confirmed"}),
    Some(UpsertOptions::new().durability(DurabilityLevel::Majority)),
).await?;

Scala

collection.upsert(
  "order_1001",
  JsonObject.create.put("status", "confirmed"),
  UpsertOptions().durability(DurabilityLevel.Majority)
).get

PHP

$options = new \Couchbase\UpsertOptions();
$options->durabilityLevel(\Couchbase\DurabilityLevel::MAJORITY);
$collection->upsert("order_1001", ["status" => "confirmed"], $options);

Ruby

options = Couchbase::Options::Upsert.new
options.durability_level = :majority
collection.upsert("order_1001", { status: "confirmed" }, options)

When to use each level

  • None — caches, sessions, ephemeral data where loss is acceptable
  • Majority — standard application writes; survives node failure
  • MajorityAndPersistActive — important data where active node disk failure is a concern
  • PersistToMajority — financial transactions, audit logs, data that must survive multi-node failure

Durability and transactions: SDK transactions use Majority durability by default. Override via TransactionConfig.

Three replicas disables durability: setting 3 replicas on a bucket disables sync writes (durable writes). Keep replicas at 1 or 2 for production workloads that require durability.