Aerospike設計爲分佈式數據庫。 Redis被設計爲在單個節點上運行,並且至少在本機上缺少諸如data distribution,clustering,複製,故障轉移等概念。我知道你可以使用各種應用程序端惡作劇來使它成爲一個ad-hoc羣集。
不要擔心Aerospike數據分佈的實施細節。這些在客戶端和集羣之間自動發生,並且不要求您在應用程序端執行任何操作。相反,請考慮您的訪問模式。
首先,您的Aerospike集羣將確保數據均勻分佈。由於工作與數據成正比,因此應確保節點是均質的。然後,您可以期望多節點操作在每個節點上的時間大致相同。
您可以在字段上創建secondary index,通常您會在querying之間以提高查詢的速度。版本3.12增加了predicate filtering,允許您在基於初始二級索引的過濾器之上創建更復雜的查詢謂詞(另請參閱Java客戶端的PredExp類)。
如果您不想使用二級索引(有幾個有效的原因),您可以使用外部記錄創建您自己的查找。在set調用country-school您可以爲每個國家(如'india','luxembourg'等密鑰)設置record,其值爲list,其中包含該國家學校的ID。您可以通過一次獲得獲得列表(如果是多個記錄,例如india-1,india-2,...,india-9999),則獲得該列表(然後使用結果編寫batch-get)學校。批量讀取返回結果的順序你問,所以你可以得到一個大批量,檢查最後一個元素是否爲空,如果沒有得到另一批。
('ns1', 'country-school', 'us-california') => [ 1, 2, 3, 5, 8, 11, .. ]
同樣,你可以創建排列如用較小的列表國家的國家城市,(例如,美國加州奧克蘭)。這會花費一些額外的空間,但可以更快速地(基於key-value)檢索,而無需在二級索引上消耗內存。
('ns1', 'country-school', 'us-california-oakland') => [ 1, 5, 42, .. ]
Aerospike在這一點上沒有這種功能。這個要求背後的用例是什麼? – Meher
可以說我有一個巨大的全球學校的桌子,其中的主要關鍵是學校編號是隨機的,但它具有像國家,學校名稱等列...我的所有查詢都至少在其中包含country字段以及其他一些可選字段。因此,如果我有一張分佈在10個分區中的表,並且數據隨機分佈,則對於任何查詢,如「select * from country where india and foo = bar」,我將需要激發10個查詢及其時間將由最慢的查詢決定。相反,如果我創建「國家」作爲親和關鍵字,數據將以鄉村分割。 – Tuco
添加上述評論,我將能夠在所有情況下僅使用一個查詢來獲取所有數據。 – Tuco