我正在使用 Cassandra 1.2.1、复合键并尝试获取特定 partitionID 的所有记录。以下是我正在使用的架构:
- 时间戳
- 设备ID
- 数据传输
- 位置 ID
- 设备所有者
主键是一个复合键:(TimeStamp, Device ID)。因此时间戳是分区键。每条记录将是 70-80 字节。
有 1000 个不同的 TimeStamp,每个时间戳都有 500K 设备 ID。所以有 5 亿条记录,我想获取特定时间戳的所有记录。类似于:
从 TimeStamp = '..' 的架构中选择 *
我的理解是这个查询应该能够快速获取所有记录,因为相关行都存储在连续的磁盘位置,这意味着很少有磁盘搜索会给我们结果。过滤器在 TimeStamp 上,这意味着查询只会命中一个节点。此外,数据总量为 500K * 80 字节 ~ 40 MB,也不算多。但是,当我使用 CQL (3) 或 Astyanax 运行它时,我得到了 RPC 超时。
我对 partitionID 的所有记录都在连续磁盘位置的理解是否错误?批量获取此类数据的正确方法应该是什么?