Database design Cassandra电子邮件作为主键?什么是动态柱族?

Database design Cassandra电子邮件作为主键?什么是动态柱族?,database-design,cassandra,database-performance,cassandra-2.0,nosql,Database Design,Cassandra,Database Performance,Cassandra 2.0,Nosql,在Cassandra中使用电子邮件作为主键会是一种不好的做法吗?这是否会导致复制出现问题(因为第一个主键用于复制-分区键) 根据文档,使用高基数“键”作为索引不是一个好主意。它说应该为针对高基数列的查询创建一个动态列族(表) 如果我在数据库中跟踪的主要对象是用户,他们使用电子邮件(到应用程序)登录,除了电子邮件作为主键之外,还可以使用其他任何东西,这对我来说似乎没有意义 使用电子邮件作为行键是否有效?有没有理由在这上面使用UUID 我(可能是无知地)预见到的问题是,使用UUID作为行键,然后将电

在Cassandra中使用电子邮件作为主键会是一种不好的做法吗?这是否会导致复制出现问题(因为第一个主键用于复制-分区键)

根据文档,使用高基数“键”作为索引不是一个好主意。它说应该为针对高基数列的查询创建一个动态列族(表)

如果我在数据库中跟踪的主要对象是用户,他们使用电子邮件(到应用程序)登录,除了电子邮件作为主键之外,还可以使用其他任何东西,这对我来说似乎没有意义

使用电子邮件作为行键是否有效?有没有理由在这上面使用UUID

我(可能是无知地)预见到的问题是,使用UUID作为行键,然后将电子邮件添加为另一个主键会丢失唯一性(即电子邮件地址的唯一性)。然后可以用同一封电子邮件创建多个帐户(无需额外检查以确保该电子邮件尚未被使用——这需要索引或动态表?)

这就引出了第二个问题。什么是动态表?我看不出这个高基数键在动态表中的何处使用。。它现在是行键了吗(为什么不以..开头作为行键)

对行键的搜索是否比创建的索引具有更高的性能

有人对此有什么见解吗?我会非常感激的


如果dynamic column family仅仅意味着列是“动态”添加的,那么我看不出这对索引方面的高基数列有什么帮助。

您将主键与辅助索引混为一谈。基数与效率的权衡适用于次要索引,但不适用于主键。主键值在定义上是唯一的,也是查找和访问单行的最有效方法。请看一下有关的摘要

使用用户的电子邮件地址作为用户表的主键绝对没有问题,如果这是唯一标识用户并将其与其详细信息关联的主键


动态列族是一个“表”,其列数(如果列不固定)。您不仅可以通过添加行来添加信息,还可以通过动态添加列来添加信息。例如,建立事件的时间序列。列族始终是动态的,尽管我认为CQL层掩盖了这一事实。是否将其视为一组固定的列取决于您。要找到一些理论背景,请查看该概念以及Cassandra如何实现它。

您知道为什么建议为高基数索引创建另一个“动态”表吗?这对我来说毫无意义,因为这有什么帮助。。我猜这次这个表的主键应该是高基数键?(只是没有说明,但我想这是隐含的?)如果电子邮件是主标识符,那么UUID是否有用处?@user2243357如果电子邮件地址是用户实体的唯一标识符,那么密钥中也不需要UUID。正如您自己所说,这将使电子邮件地址作为键的唯一性无效。@user2243357我认为动态CF的想法是您使用搜索值作为键,并通过添加带有结果值的列来维护结果集。例如,您不用在列“zip code”上创建二级索引,而是使用zip code作为行键,然后为具有特定zip code的用户添加列。好的,这也是我的想法(这是唯一对我有意义的方法)。谢谢,拉尔夫!不过,我担心数据的分发。由于电子邮件地址不是非常“独特”(如UUID),它们(在大多数情况下)会均匀地分布在节点上吗?