1

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

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

如果我在数据库中跟踪的主要内容是使用 EMAIL(到应用程序)登录的 USER 使用其他任何东西,但 EMAIL 作为主要内容,这对我来说似乎没有意义钥匙..

使用 EMAIL 作为行键是否有效?是否有理由为此使用 UUID?

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

这就引出了第二个问题。究竟什么是动态表?我没有看到这个高基数键在动态表中的使用位置。现在它是行键(为什么不让它作为开始的行键......)?

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

有没有人对此有任何见解?我真的很感激!

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

4

1 回答 1

3

您将主键与二级索引混合在一起。基数与效率的权衡适用于二级索引,但不适用于主键。主键值根据定义是唯一的,也是查找和访问单行的最有效方法。查看有关Cassandra 中索引的摘要。

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

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

于 2014-04-16T07:05:37.653 回答