2010-03-26 42 views
4

说我有“用户”。这是关键。我需要保持“用户数”。 我打算记录关键“用户”和值“0”到“9999+ ;-)”(尽可能多的我)。Cassandra/HBase或只是MySQL:做下一件事的潜在问题

如果我使用Cassandra,HBase或MySQL,那么我将会遇到什么问题?说,我有这个“用户”键的新的更新,我需要增加值的数千。 我有麻烦了吗?锁定写入? 任何其他方式做到这一点?

为什么这样做 - 会有很多类似“用户”的按键。不同的其他情况。但这个想法是一样的。为什么保持这种方式 - 因为我会有更多的读取,所以我总是可以非常快地获得“计数值”。

回答

4

我只是将用户数作为批处理操作每N分钟更新一次,而不是实时更新。如果只有一个进程更新它,则不需要担心定义上的争用。

或者cassandra有一个通过ZooKeeper添加锁定支持的contrib/mutex。

+0

对,但是我需要每N分钟计算一次所有用户吗?听起来很贵。我的另一个想法是通过缓存完成,所有内容都将缓存在缓存中,并且每隔N分钟执行一次更新。但是,不确定是否还有更好的方法。 – alexeypro 2010-03-29 17:42:59

1

MongoDB和HBase具有这种内置的功能(正如大多数其他保证一致性的数据库一样)。

Cassandra的一个相当简单的诀窍是为usercount设置一个特定的行,然后在每次添加用户时为其插入一个具有空值的唯一ID(例如随机UUID)列名。定期计算列数并将其放入总计数器中 - 删除刚刚计算的列。

在任何时候,您的总用户数都是[总计数器] + [用户计数行中的列数]。你可以获得这些基本上两个读取,如果你有行缓存启用,它会很快。

+0

+1不错,干净。 – user359996 2010-10-01 23:18:31