在 Cassandra 中存储数组

Storing arrays in Cassandra

我有很多 快速传入的数据,它们是这样组织的;

在我看来,问题主要是由数据可用于写入的方式引起的。如果它们都可以一起使用,我会同时将整个批次存储在一起并完成它。

对于较小的数据负载,我可以使用 postgres 数组数据类型。每个逻辑对象一行,带有一个键和一个数组列。这允许我通过每个数组一个编写器来扩展,以任何顺序编写元素而不会阻塞任何其他编写器。这受限于单个postgres节点的速率。

在 Cassandra/Scylla 中,我似乎可以选择:

  1. 将每个元素存储为它自己的行,这对于写入来说会非常快,读取会更麻烦但可行并且可能涉及很多非常宽的扫描,
  2. 或将数组转换为 json/string,读取单元格,调整值然后重写它,这会非常慢并导致大量压缩开销
  3. 或者让 writer 缓冲直到它接收到所有数组值,然后一次性写入数组,除非 writer 不知道数组应该有多长并且需要超时来写下它有什么到这个时候,这最终意味着如果出现延迟数据,我将需要在将来的某个时候更新它。

我还有哪些其他选择?

谢谢

选项 1,似乎很合适: 我假设每个逻辑对象都有一个唯一的 id(或更好的 uuid) 在这种情况下,您可以创建类似

CREATE TABLE tbl (id uuid, ord int, v text, PRIMARY KEY (id, ord));

其中 uuid 是分区键,ord 是聚类(排序)键,strong 每个“数组”作为一个分区,每个值作为一行。

这允许

  • 使用分页快速检索整个“数组”,即使是一个大数组
  • 快速检索数组中的索引