我不知道這個問題的地步,但在這裏有雲:
其實塞式的primary index是red-black trees分佈式哈希,1和4096 sprigs每個分區之間(見partition-tree-sprigs
配置PARAM)。
跨羣集節點有4096個邏輯分區,它們是evenly distributed。標識任何record的密鑰是通過將(namespace, set, PK)
三元組通過RIPEMD-160(客戶機自動爲您執行)生成的20字節摘要。該記錄是一致散列到特定分區,因爲此摘要中的位用於計算分區ID。
與Redis相比,Redis被設計成單核心,單線程應用程序,運行在單個節點上,Aerospike被構建爲分佈式數據庫。確實,用戶可以使用應用程序端解決方案或中間件來實現特定羣集Redis。在Aerospike集羣中的所有節點的情況下,所有客戶端共享一個partition map。
由於客戶端知道集羣的分區映射,因此它總是與持有主分區的節點(或持有複製分區的節點 - 由replica read policy控制)相隔一跳。所以,它是O(1)到集羣中正確的節點。在該節點中,查找分區的rbTree是O(1),然後所有操作都是O(log n)。
當hash table中沒有太多數據時(假設你對Redis使用的數據結構是正確的),找到一條記錄應該是O(1)。但是,一旦有更多元素比散列表中的插槽切換到鏈接列表,它是O(n)。對於rbTree,平均值和最壞情況都是O(log n)。 Aerospike旨在處理具有可預測的低延遲的大數據集,因此rbTree更合適。無論集羣中的數據量如何,獲取記錄的成本都是相同的。
基本上,你已經混淆了[secondary-indexes](http://www.aerospike.com/docs/architecture/secondary-index.html)(哈希表和B-Tree的混合)與主要指標的方式。 –