卡桑德拉边界框搜索

时间:2015-06-06 04:16:41

标签: cassandra cassandra-2.0

我希望使用Cassandra进行附近的搜索类型查询。基于我的lon / lat坐标,我想检索最近的点。我不需要100%的准确性,所以我很习惯使用边界框而不是圆形(性能也更好),但是我找不到具体的指令(希望有一个例子)如何实现边界框。

2 个答案:

答案 0 :(得分:4)

根据我的经验,在Cassandra之上进行通用地理空间索引搜索并不容易。我相信你只有两个选择:

  • Geohashing,将数据集拆分为方形/矩形元素:例如,使用lat / lon的整数部分作为网格中的索引。搜索后,您可以加载封闭网格元素中的所有元素,并在应用程序内执行完整的邻居扫描。

      如果你有一个均匀分布的数据集,
    • 效果很好,比如我NWP模拟中的网格点。
    • 在像美国"等餐馆这样的数据集上工作非常糟糕,其中大多数点都在大城市附近。您将在纽约地区等不同的网格元素上拥有不平衡的高负荷,并在大西洋的某处获得绝对空的索引桶。
  • ElasticSearch / Solr / Sphinx /等外部索引。

    • 所有这些都具有开箱即用的地理空间索引支持,无需在您的应用程序层中开发自己的索引。
    • 您必须设置单独的索引服务并保持cassandra / index数据同步。有一些cassandra /搜索集成,如DSE(商业),stargate-core(我从来没有听说过有人在制作中使用过这个),或者你可以推出自己的,但所有其中需要时间和精力。

答案 1 :(得分:1)

2014年欧洲卡桑德拉峰会上触及了这个问题。

RedHat: Scalable Geospatial Indexing with Cassandra

演示者解释了他如何使用用户定义类型创建空间索引,这非常适合使用基于区域或边界框的查找来查询地理空间数据。

一般的想法是将数据分解为由边界框定义的区域。然后,每个区域都代表一个rowkey,然后您可以使用该键来访问与该区域关联的任何数据。如果您有感兴趣的位置,则查询位于该区域内的区域的键空间。