Cassandra 是卡桑德拉';多个表中相同值的哈希?

Cassandra 是卡桑德拉';多个表中相同值的哈希?,cassandra,cassandra-2.0,Cassandra,Cassandra 2.0,我有一个多租户应用程序,其中tenantId将是每个查询的一部分,因此我将它放入所有表的分区键中 示例: CREATE TABLE users { tenantId text, user text, active boolean, PRIMARY_KEY (tenantId, user) } CREATE TABLE roles { tenantId text, rolename text, PRIMARY_KEY (tenantId, rolename) } 现在,想象100张这样的桌子…

我有一个多租户应用程序,其中tenantId将是每个查询的一部分,因此我将它放入所有表的分区键中

示例:

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

CREATE TABLE roles {
tenantId text,
rolename text,
PRIMARY_KEY (tenantId, rolename)
}
现在,想象100张这样的桌子……

我的问题是:


Cassandra会对tenantId“foo”进行散列以将所有表中的所有数据指向同一个节点并使其成为uber热点,还是会将每个表和租户数据均匀地分布在集群中?

简单回答,令牌值(分区键的散列)是相同的,它不依赖于表名或其他内容。原因是我们在整个集群中使用相同的分区(3


因此,在您的情况下,是的,如果您的分区密钥是tenantId,那么来自一个客户的所有数据都将被分发到相同的副本,这适用于所有具有此分区密钥的表,因此,我必须为每个表创建一个虚拟分区密钥桶,如下所示,将它们分散开来:“用户”的分区密钥主密钥((tenantId,tablename),user),其中tablename始终是“用户”,对于“角色”主键((tenantId,tablename),rolename),其中tablename始终是“角色”。你认为呢?这并不能解决租户分布不好的根本问题。即使你添加表名作为额外的分区键组件,1个租户使用的分区总数=表的数量。我怀疑你有1000个表,因此最终,1个租户的数据将只分布到几个分区,如下所示许多分区都有不同的表。您能否提供一个示例,说明阿基里斯生成的表在多租户设计中是什么样子的?我查看了多租户文档页面,但找不到,但我知道您在某些时候支持多租户。阿基里斯中的多租户依赖于运行时的动态表查找。在运行时,您可以这样做a
select().xxx().fromTable(schemaProvider).where().tenatid_Eq(…)
。所有的表查找都是由schemaProvider完成的。在这种情况下,多租户是通过为不同的客户/客户组提供不同的表/键空间来实现的。令牌是主键的散列,因此将tenantId放入每个分区键中不会有任何帮助。我想知道您将生成多少个唯一的tenantId?在某些情况下,它的值较低基数,二级索引可能有意义。Richard Low比我好得多。