在Cassandra中使用电子邮件作为主键是不好的做法?这会导致复制问题(因为第一个主键用于复制 - 分区键)?
根据文档,使用高基数密钥'并不是一个好主意。作为指数。它说应该创建一个动态列族(表)来查询高基数列。
如果我在数据库中跟踪的主要内容是用户,使用他们的EMAIL(到应用程序)登录,使用其他任何东西,对我来说似乎没有意义。 ,但EMAIL作为主键..
使用EMAIL作为行键是否有效?是否有理由在此使用UUID?
我(或许是无知)预见到的问题是使用UUID作为行密钥然后将电子邮件添加为另一个主键是失去唯一性(这是电子邮件地址的唯一性)。然后可以使用相同的电子邮件创建多个帐户(无需额外检查以确保尚未使用该电子邮件 - 这需要索引或动态表?)
这导致了第二个问题。究竟什么是动态表?我不知道动态表中使用了这个高基数密钥的位置。现在是行密钥(为什么不把它作为行键开始......)?
搜索行键的性能是否高于创建的索引?
有没有人对此有任何见解?我真的很感激!
如果动态列族只是意味着列是动态的?添加,然后我不知道这对索引方面的高基数列有何帮助。
答案 0 :(得分:3)
您正在将主键与辅助索引混合在一起。基数与效率之间的权衡取舍适用于二级索引,但不适用于主键。根据定义,主键值是唯一的,也是查找和访问单行的最有效方法。请查看有关indexes in Cassandra的摘要。
使用用户的电子邮件地址作为用户表的主键绝对没有问题,如果这是唯一标识您的用户并将其与其详细信息相关联的话。
动态列族是"表"如果列不固定,则为其数。您不仅可以通过添加行添加信息,还可以通过动态添加列来添加信息。例如。建立一系列时间事件。列族总是动态的,尽管我认为CQL层掩盖了这一事实。无论您将其视为固定列还是固定列,都取决于您自己。找到一些理论背景,寻找BigTable概念以及Cassandra如何实现它。