2016-01-21 52 views
3

我有一個多租戶應用程序,其中tenantId將成爲每個查詢的一部分,因此我將它放入所有表的分區鍵中。Cassandra的哈希值是否在多個表中具有相同的值?

實例:

CREATE TABLE users { 
tenantId text, 
user text, 
active boolean, 
PRIMARY_KEY (tenantId, user) 
} 

CREATE TABLE roles { 
tenantId text, 
rolename text, 
PRIMARY_KEY (tenantId, rolename) 
} 

現在,想象一下這樣的表100S ...

我的問題是:

威爾卡桑德拉散列tenantId '富' 點從所有表到同一節點的所有數據,並使其成爲熱點或將它平均分配每個表&集羣周圍的租戶數據均勻分佈?

+0

令牌是主鍵的哈希值,因此將tenantId放入每個分區鍵都無濟於事。我想知道你會產生多少獨特的tenantIds?在一些基數較低的情況下,二級索引可能有意義。理查德洛[解釋它](http://www.wentnet.com/blog/?p=77)比我更好。 – LHWizard

回答

3

簡單的答案是,令牌值(分區鍵的散列)是相同的,它不依賴於表名或其他。原因是我們在整個集羣中使用相同的分區(Murmur3)。

你的情況

所以,是的,如果你的分區鍵是tenantId,從一個客戶的所有數據將被分配到相同的副本,這適用於所有表有這個分區鍵

+0

因此,我必須爲每個像這樣的創建一個虛擬分區密鑰桶,然後將它們分散開來:「用戶」的分區鍵PRIMARY_KEY((tenantId,tablename),用戶)其中tablename始終是「用戶」 「角色」PRIMARY_KEY((tenantId,tablename),rolename)其中tablename始終是「角色」。你怎麼看? – Jason

+0

它不會解決關於tenandID的分配不當的根本問題。即使將表名稱添加爲額外的分區密鑰組件,用於1個租戶的分區總數=表數量也是如此。我懷疑你有1000個表,因此最終,1個租戶的數據只會分配到幾個分區,因爲有很多分區,因爲有不同的表 – doanduyhai

+0

您能提供一個例子,說明Achilles生成的表在多租戶設計?我看了又找不到多租戶文檔頁面,但我知道你在某個時候支持多租戶。 – Jason

相關問題