关于时间序列:Cassandra 中的预置写入容量

Provisioned write capacity in Cassandra

我需要在 Cassandra 中捕获时间序列传感器数据。在 DynamoDB 中处理时间序列数据的最佳实践如下:

  • 每个时间段创建一个表,配置的写入容量小于 1,000 个写入容量单位 (WCU)。
  • 在每个时间段结束前,为下一个时间段预建表。
  • 一旦不再写入表,就减少其预置的写入容量。随着时间的推移,还可以减少早期表的预置读取容量,并归档或删除那些很少或永远不需要其内容的表。
  • 现在我想知道如何在 Cassandra 中实现相同的概念!有没有办法在 Cassandra 中手动配置写入/读取容量?


    这实际上取决于您需要与开发等讨论的您自己的需求。

    在 Cassandra 中有几种处理时间序列数据的方法:

  • 一张桌子什么都可以。正如 Chris 所提到的,只需将时间组件包含在分区键中,例如一天,并存储每个传感器/天的数据。如果数据不会更新,并且你提前知道它们会保存多长时间,那么你可以给数据设置TTL,那么你可以使用TimeWindowCompactionStrategy。这种方法的优点是你只有一个表,不需要维护多个表——这使得开发和维护更容易。
  • 与您描述的方法相同 - 为一段时间(例如一个月)创建一个单独的表,并将数据写入其中。在这种情况下,您可以在数据"过期"时有效地删除整个表。使用这种方法,您可以在必要时更新数据,并且不需要对数据设置 TTL。但这需要开发和运营团队做更多的工作,因为您需要访问多个表。另外,考虑到集群中的表数量有一些限制 - 建议不要超过 200 个表,因为每个表都需要内存来保存元数据等。虽然,有些事情,比如,布隆过滤器,可以调整为很少读取的表占用更少的内存。

  • 对于 cassandra,只需创建一个表,但在分区键中包含一些时间段(因此分区不会无限增长并变得太大)。没有表维护和读/写容量实际上更依赖于工作负载和架构、集群大小等,但除了调整集群大小之外,真的不需要担心。