2016-01-21 55 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

相关问题