使用电子邮件作为Cassandra的主键,最佳实践?

使用电子邮件作为Cassandra的主键,最佳实践?,cassandra,Cassandra,我们正在开发一个web应用程序,我们希望使用电子邮件作为主键,这样我们就可以使用轻量级事务来避免人们注册同一封电子邮件。但是,我们还有为用户配置文件生成URL的问题。我们无法在URL中使用电子邮件 我们一直在考虑对电子邮件进行哈希处理(例如使用bcrypt),并将其用作主键,这样URL就不会公开电子邮件。这是一种好的做法吗 其他解决方案涉及使用多个用户信息表,但这使得避免电子邮件重复的过程更加复杂 有什么建议吗 编辑:在给它一些建议之后,也许有一个解决方案。使用标准UUID作为主键,然后在电子邮

我们正在开发一个web应用程序,我们希望使用电子邮件作为主键,这样我们就可以使用轻量级事务来避免人们注册同一封电子邮件。但是,我们还有为用户配置文件生成URL的问题。我们无法在URL中使用电子邮件

我们一直在考虑对电子邮件进行哈希处理(例如使用bcrypt),并将其用作主键,这样URL就不会公开电子邮件。这是一种好的做法吗

其他解决方案涉及使用多个用户信息表,但这使得避免电子邮件重复的过程更加复杂

有什么建议吗


编辑:在给它一些建议之后,也许有一个解决方案。使用标准UUID作为主键,然后在电子邮件列上使用第二个表email_to_UUID和主键。当一个新用户注册时,我们生成一个UUID并执行一个轻量级事务,在email_to_UUID-able(如果不存在)中插入一个新值。之后,我们使用电子邮件读取表,如果UUID是我们刚刚生成的,那么我们获得了正确的用户注册,可以继续在主表中插入数据。这种方法听起来正确吗?

这是《卡桑德拉》中的一种方法:有两种方法。您可以将电子邮件用作主键,并在URI中对其进行编码,例如使用BASE64。这样,电子邮件是不可变的,只能通过删除和重新插入来更改它

另一种方法是使用人工主键,如BCrypt、哈希、
TIMEUUID
UUID
,并将
索引
聚类列
放入电子邮件列


您选择的方式将决定应用程序的灵活性和性能。如果您可以放松灵活性,或者希望表中的数据更少,您可以使用第一种方法对URI进行编码;如果电子邮件的更改是重要的,你可以考虑采取人工<代码>主键< /代码>。这两种解决方案都有各自的优点:你最喜欢什么完全取决于你自己。

我认为第二种方法不是很好,因为在电子邮件上使用索引(高基数)是一种非常重要的方法。你完全正确。最好将其用作分区键或某个标识符。由于集群列类似于索引,因此在查询您的帐户时,最好使用电子邮件或任何唯一标识符。谢谢你的评论:记住这一点很重要。你的编辑展示了一个可行的解决方案和一个很好的使用模式。