时间空间序列的复合分区键 (Cassandra) 与交错索引 (Accumulo, BigTable)
Posted
技术标签:
【中文标题】时间空间序列的复合分区键 (Cassandra) 与交错索引 (Accumulo, BigTable)【英文标题】:Composite partition key (Cassandra) vs. interleaved indexes (Accumulo, BigTable) for time-spatial series 【发布时间】:2016-02-06 07:59:10 【问题描述】:我正在做一个项目,我们每天导入 50k - 100k 个数据点,位于时间 (YYYYMMDDHHmm) 和空间 (lon, lat),然后我们根据我们设置的查询参数动态呈现到地图上用户。我们确实使用低于给定缩放级别的预计算集群。
在这种情况下,鉴于我们正在为存储层选择数据库引擎这一事实,我目前正在评估 Cassandra 和 BigTable 的变体。
具体来说,我试图了解在 Cassandra 中使用复合分区键与在 BigTable 中使用交错索引键之间的区别,例如 GeoMesa 使用的那个。
据我了解,这两种方法都可以利用 COTS 硬件,并且可以进行调整以减少热点并最大限度地填充空间。
为了区分两者,我应该遵循哪些合乎逻辑的步骤?尽管我计划在不久的将来测试这两种方法,但我希望听到更合理和更有教育意义的方法。
【问题讨论】:
【参考方案1】:GeoMesa 实际上支持 Accumulo 和 Cassandra 等 BigTable 克隆。在撰写本文时,Cassandra 支持目前处于早期阶段。 README 有索引方案的描述。
两种实现都使用 Z2 或 Z3(取决于索引是空间还是时空)交错索引。 BigTable 克隆索引将全分辨率 Z3 放入主键中。查询只是对排序键的范围扫描。 Cassandra 要求明确枚举分区键(除非您正在执行全表扫描)。正因为如此,GeoMesa 的 Cassandra 索引使用复合键在分区键和范围键之间传播信息。分区键是一个粗略的时空键,它将世界存储到 NxN 个单元中。然后,范围键是全分辨率 Z3 交错索引。查询被分解为重叠桶(分区键)和每个桶内的 Z3 范围(范围键)的枚举。为了满足查询,必须枚举分区键可能会导致大量网络混乱。设置存储桶分辨率是减少这种喋喋不休的关键。
【讨论】:
以上是关于时间空间序列的复合分区键 (Cassandra) 与交错索引 (Accumulo, BigTable)的主要内容,如果未能解决你的问题,请参考以下文章
Spring Data Cassandra:如何使用复合键查询表?