使用Cassandra进行用户注册

时间:2016-04-04 20:48:26

标签: node.js mongodb cassandra

我正在使用Cassandra作为我正在开发的社交应用。我真的很喜欢Cassandra所提供的一切。我想知道在Cassandra本身存储用户名和密码是否可以,或者我应该使用第二个数据库(mongodb)来存储用户名和密码。当用户重置密码或更改电子邮件时,最终的一致性是否会导致问题。我使用电子邮件作为主键来查找用户数据。我在node.js中用JavaScript编写后端。

让我解释一下我想做什么。我想在输入5个密码错误后添加密码重置和锁定功能。问题是如果用户尝试在第三个服务器更新之前登录,如果将密码与第三个服务器上的过期数据进行比较会发生什么?用户不会被锁定。将用户名和密码存储在单独的数据库(如mongodb)中是最佳方法吗?或者是他们解决这个问题的另一种方式。

1 个答案:

答案 0 :(得分:0)

你可以在Cassandra中存储用户名/密码 - 他们的基本数据建模页面有一个相关的例子可以帮助你思考:http://www.datastax.com/dev/blog/basic-rules-of-cassandra-data-modeling

如果您不注意如何读取和写入数据(并且您的读/写发生在彼此附近),最终的一致性可能会成为一个问题。可以将群集调整为正常的'存储(例如,一旦我写入数据,后续读取将获得最后写入的值);然而,下面的配置减少了Cassandra带来的一些伟大的事情。

数据一致性

您可以为写入配置data consistency ALL - 这意味着您可以确保在写入完成之前所有节点都是最新的。写入没有最终的一致性问题。

  

必须将写入写入提交日志,并且可以在群集中的所有副本节点上为该分区键记忆。

但是,这种写入需要更长时间,并且需要足够的节点启动并且可用于获得您要求的保证。

您还可以指定ALL读取一致性,这意味着:

  

在所有副本都已响应后返回记录。如果副本没有响应,则读取操作将失败。

在这种情况下,如果您要将数据写入三个节点,而其中一个节点无法响应,则您的读取将失败,因为Cassandra无法提供所要求的一致性保证。

我应该指出,这些是您可以使用的最严格的配置,还有其他可能适用于您的情况。我要说的一点是:当你要求Cassandra表现得像一个更传统的商店时,你需要权衡集群中一些非常有吸引力的方面。

在做出此决定时,您需要考虑系统的预期特征(读取量,写入量,这两者的重要性等)。 IMOP虽然你可能可以使用Cassandra来处理这类数据,除非你正在处理大量用户,否则它不会是我的首选。