说我有“用户”。这是关键。我需要保持“用户数”。我计划记录关键的“用户”和值“0”到“9999+ ;-)”(尽可能多)。
如果我为此使用 Cassandra、HBase 或 MySQL,我会遇到什么问题?比如说,我对这个“用户”键有数千个新更新,我需要在其中增加值。我有麻烦了吗?锁定写入?还有其他方法吗?
为什么这样做——会有很多类似“用户”的键。其他情况不同。但想法是一样的。为什么要保持这种方式——因为我会有更多的读取,所以我总是可以非常快地获得“计数值”。
我只是将用户计数更新为每 N 分钟一次的批处理操作,而不是实时更新它。如果只有一个进程对其进行更新,则无需担心定义上的争用。
或者,cassandra 有一个 contrib/mutex 用于通过 ZooKeeper 添加锁支持。
MongoDB 具有就地更新和计数器的特殊 inc 运算符。http://blog.mongodb.org/post/171353301/using-mongodb-for-real-time-analytics
MongoDB 和 HBase 具有此内置功能(与大多数其他保证一致性的数据库一样)。
Cassandra 的一个相当简单的技巧是为 usercount 设置一个特定的行,然后在每次添加用户时插入一个具有空值的唯一 ID(例如随机 UUID)列名。定期计算列数并将它们放入总计数器中 - 删除您刚刚计算过的列。
因此,在任何时候,您的总用户数都是 [总计数器]+[您的用户数行上的列数]。你可以通过两次读取来获得这些,如果你启用了行缓存,它会很快。
HBase 具有用于快速、原子读/写操作的incrementColumnValue方法。