时间-空间序列的复合分区键(Cassandra)与交错索引(Accumulo,BigTable)



我正在做一个项目,在这个项目中,我们每天导入5万-10万个数据点,这些数据点在时间上(YYYYMMDDHmm)和空间上(lon,lat)都有,然后我们根据用户设置的查询参数将其动态渲染到地图上。我们确实使用了低于给定缩放级别的预先计算的簇。

在此背景下,鉴于我们正在为存储层选择数据库引擎,我目前正在评估Cassandra和BigTable的变体。

具体来说,我试图理解在Cassandra中使用复合分区键与在BigTable中使用交错索引键(例如GeoMesa使用的索引键)之间的区别。

据我所知,这两种方法都可以利用COTS硬件,并且可以进行调整以减少热点并最大限度地增加空间填充。

为了区分两者,我应该遵循哪些合乎逻辑的步骤?尽管我计划在不久的将来测试这两种方法,但我希望听到一种更合理、更有教育意义的方法。

GeoMesa实际上同时支持BigTable克隆,如Accumulo和Cassandra。在撰写本文时,Cassandra的支持目前处于早期阶段。自述文件对索引方案进行了描述。

两种实现都使用Z2或Z3(取决于索引只是空间索引还是时空索引)交织索引。BigTable克隆索引将完全分辨率Z3放入主键中。查询只是对排序键的范围扫描。Cassandra要求显式枚举分区键(除非您正在进行全表扫描)。正因为如此,GeoMesa的Cassandra索引使用复合键将信息分布在分区键和范围键上。分区键是一个粗略的时空键,它将世界划分为NxN个单元。然后,范围关键字是全分辨率Z3交织索引。查询被分解为重叠桶的枚举(分区键)和每个桶内的Z3范围(范围键)。为了满足查询,必须枚举分区键可能会导致大量网络聊天。设置bucket分辨率是减少这种聊天的关键。

最新更新