使用电子邮件作为Cassandra中的主键,最佳做法?

时间:2014-05-04 09:28:32

标签: cassandra

我们正在开发一个Web应用程序,我们希望将该电子邮件用作主键,以便我们可以使用轻量级事务来避免人们使用相同的电子邮件进行注册。但是,我们遇到了为用户配置文件生成URL的问题。我们无法在网址中使用该电子邮件。

我们一直在考虑将电子邮件哈希(例如使用bcrypt)并将其用作主键,然后URL不会公开他的电子邮件。这是一个好习惯吗?

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

有什么建议吗?

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

1 个答案:

答案 0 :(得分:1)

这是Cassandra中的一个:有两种方法可以做到这一点。您可以将电子邮件用作Primary Key并在URI中对其进行编码,例如:使用BASE64。这样,eMail是不可变的,只能删除并重新插入以更改它。

另一种方法是使用人工主键,例如BCrypt,哈希值TIMEUUIDUUID,并将IndexClustering Column添加到电子邮件中列。

您选择的方式将决定您的应用程序的灵活性和高效性。如果你可以放松灵活性或希望在这个表中减少数据,你可以采用第一种方式编码URI;如果更改电子邮件很重要,您可以考虑采用人为的Primary Key。这两种解决方案都有其优点:完全取决于您最喜欢的方式。