我想了解在 Cassandra (v1.2) 中获取大量顺序存储在磁盘中的行时所涉及的开销是什么。
使用以下架构:
- 时间戳
- 设备ID
- 设备名称
- 设备所有者
- 设备颜色
PKEY(时间戳,设备 ID)。
每条记录为 80 字节。
我正在尝试获取特定时间戳(partitionID)的所有行。
从 TimeStamp = '...' 的架构中选择 *
每个时间戳有 500K 这样的行。我发现进行分页会比尝试一次性获取所有内容提供更好的吞吐量。因此,要获取 500 K 行(40 MB),使用 1000 / 10000 的页面大小,大约需要 25-30 秒(我使用的是 Astyanax)。我有以下问题:
(A) 我查询的所有数据是否会按特定时间戳顺序存储在磁盘中(是的,我已经运行了 compact 命令)?
(B) 如果对第一个 qn 的回答是肯定的,那么为什么我不能获得等于磁盘的吞吐量(40 MB/s)?请注意,我能够在 25-30 秒内检索 40 MB 的数据,这相当于几乎 1.5 MB/s。
(C) 如果上述第一个问题的答案是肯定的,那么我可以进一步加快响应速度吗?
(D) 序列化/反序列化是吞吐量慢的罪魁祸首吗?如果是这样,可以做些什么来完全避免它吗?