在 Cassandra 中经常更新 Table

Frequently Updated Table in Cassandra

我正在做一个基于物联网传感器的项目。在这种情况下,每个传感器每分钟都会向服务器发送数据。我预计未来最多有 10 万个传感器。

我正在记录历史记录中每个传感器发送的数据 table。但是我有一个实时信息 table,其中正在更新每个传感器的最新状态。

所以我想每分钟更新一次 Live Table 中每个传感器对应的行。

这有什么问题吗?我读到 cassandra 中频繁的更新操作是不好的。

有没有更好的方法?

我已经在我的项目中使用 Redis 来存储会话等。我应该将这个 LIVE table 移动到 Redis 吗?

在 C* 中,有读取的一致性级别和写入的一致性级别。如果只有一个节点,那么这不适用,零问题,但如果要使用多个 dc 或机架,则需要提高一致性级别以确保您检索的是更新行的最新版本,或者在写作层面使用高一致性级别。就我而言,我使用 ANY 进行写入,使用 QUORUM 进行读取。这使我可以让所有节点都期望一个向下写入,51% 向上的节点读取。这是 CAP 定理中的一个权衡。请看一看:

http://docs.datastax.com/en/cassandra/latest/cassandra/dml/dmlConfigConsistency.html

https://wiki.apache.org/cassandra/ArchitectureOverview

这就是您要查找的内容:https://docs.datastax.com/en/cassandra/2.1/cassandra/operations/ops_memtable_thruput_c.html

How you tune memtable thresholds depends on your data and write load. Increase memtable throughput under either of these conditions:

  • The write load includes a high volume of updates on a smaller set of data.

  • A steady stream of continuous writes occurs. This action leads to more efficient compaction.

因此增加 commitlog_total_space_in_mb 将使 Cassandra 将内存表刷新到磁盘的频率降低。这意味着您的大部分更新将仅发生在内存中,并且您将拥有更少的重复数据。