首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> DB2 資料庫 >> DB2 教學

Aerospike C 客戶端:事務級一致性保證與副本策略配置

     編輯:DB2 教學

分散式一致性背景

Aerospike 透過自動資料複寫提供高可用與容錯,預設每筆記錄維護兩份完整副本(複寫因子 = 2)。雖然複寫提升可靠度,但會引入延遲權衡:

  • 讀取延遲:叢集重組期間副本可能未同步最新資料
  • 寫入延遲:同步複寫至所有副本需叢集內部通訊

為平衡效能與一致性,Aerospike 提供事務級一致性策略,允許應用在每次操作層級自訂副本訪問行為。

三大核心策略

策略配置鍵預設值備選值影響範圍
讀取副本選擇 read.replica MASTER(主副本) ANY(任意副本,隨機) 僅限客戶端,無伺服器端覆蓋
讀取一致性層級 read.consistency_level ONE(讀一份) ALL(讀所有副本取最新) 客戶端設定可覆蓋伺服器端 namespace 設定
寫入提交層級 write.commit_level ALL(全副本確認) MASTER(僅主副本確認,異步複寫) 客戶端設定可覆蓋伺服器端 namespace 設定

預設行為:低延遲即時一致性

  • 讀:單一副本(主副本),即使重組期間
  • 寫:同步全副本後回覆成功
  • 此組合在大多數場景提供良好平衡

一致性降級的風險與取捨

使用較低一致性層級會開啟「短暫不一致視窗」:

  • 讀端:重組期間可能讀到舊值
  • 寫端:主副本已提交、備份未提交時可能發生「髒讀」

是否接受取決於應用業務語意(如快取層可容忍、金融帳務不可容忍)。

程式碼範例:連接層級全域策略設定

as_config config;
as_config_init(&config);
as_config_add_host(&config, "127.0.0.1", 3000);

aerospike as;
aerospike_init(&as, &config);
as_policies *p_policies = &as.config.policies;

/* 選擇讀取任意副本(分散熱鍵壓力) */
p_policies->read.replica = AS_POLICY_REPLICA_ANY;

/* 選擇最高讀一致性(重組期間也讀最新) */
p_policies->read.consistency_level = AS_POLICY_CONSISTENCY_LEVEL_ALL;

/* 選擇較低寫一致性(降低延遲,接受髒讀風險) */
p_policies->write.commit_level = AS_POLICY_COMMIT_LEVEL_MASTER;

程式碼範例:單一操作層級覆蓋策略

as_policy_write write_policy;
as_policy_write_init(&write_policy);
write_policy.commit_level = AS_POLICY_COMMIT_LEVEL_MASTER;

// 僅此次寫入使用 MASTER 提交層級
as_status status = aerospike_key_put(&as, &err, &write_policy, &key, &rec);

單一操作指定的非 NULL 策略會覆蓋連接層級設定;伺服器端 namespace 動態配置的覆蓋參數優先級最高。

伺服器端一致性覆蓋原則

客戶端事務級策略會覆蓋伺服器端 namespace 級可動態配置的相關參數(讀副本選擇策略僅存在客戶端)。詳細參數請參閱《配置參考手冊》一致性覆蓋章節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved