【发布时间】:2021-12-05 13:21:56
【问题描述】:
我有大量如此组织的快速传入数据;
- 大量一维数组,每个逻辑对象一个,其中数组中每个元素的位置很重要,每个元素都是并行计算和生成的,因此不一定按顺序排列。
- 数据数组本身不一定按顺序写入。
- 数组的长度可能不同。
- 数据要么一次作为整个数组读取,因此将整个数据存储在一起是有意义的。
在我看来,问题主要是由数据可用于写入的方式引起的。如果它们都可以一起使用,我会同时将整个批次存储在一起并完成它。
对于较小的数据负载,我可以使用 postgres 数组数据类型。每个逻辑对象一行,带有一个键和一个数组列。这允许我通过每个数组有一个写入器来扩展,以任何顺序写入元素而不会阻塞任何其他写入器。这受限于单个 postgres 节点的速率。
在 Cassandra/Scylla 中,我似乎有以下两种选择:
- 将每个元素存储为自己的行,这样写入速度会非常快,读取会更麻烦但可行,并且可能涉及大量非常宽的扫描,
- 或将数组转换为 json/string、读取单元格、调整值然后重写它,这将非常缓慢并导致大量压缩开销
- 或者让写入器缓冲区直到它接收到所有数组值,然后一次性写入数组,除非写入器不知道数组应该有多长,并且需要超时来写下它所拥有的任何内容时间,这最终意味着如果出现迟到的数据,我将需要在将来的某个时间对其进行更新。
我还有什么其他选择?
谢谢
【问题讨论】: