Cassandra 边界框搜索
Posted
技术标签:
【中文标题】Cassandra 边界框搜索【英文标题】:Cassandra bounding box search 【发布时间】:2015-06-06 04:16:41 【问题描述】:我希望将 Cassandra 用于附近的搜索类型查询。根据我的 lon/lat 坐标,我想检索最近的点。我不需要 100% 的准确度,所以我很乐意使用边界框而不是圆形(性能也更好),但我找不到具体的说明(希望有一个例子)如何实现边界框。
【问题讨论】:
你已经设计过数据模型了吗? 不,我还没有模型。 【参考方案1】:根据我的经验,在 Cassandra 之上进行通用地理空间索引搜索并不容易。我相信你只有两个选择:
Geohashing,将数据集拆分为正方形/矩形元素:例如,使用 lat/lon 的整数部分作为网格中的索引。在进行搜索时,您可以加载封闭网格元素中的所有元素并在您的应用程序内执行完整的邻居扫描。
如果您有一个均匀分布的数据集,例如我所拥有的 NWP 中的网格点,则效果很好。 在像“美国餐馆”这样的数据集上工作得非常糟糕,其中大部分点都在大城市周围聚集。您将在纽约地区等不同的网格元素上获得不平衡的高负载,并且在大西洋某处获得绝对空的索引桶。ElasticSearch/Solr/Sphinx/等外部索引。
它们都具有开箱即用的地理空间索引支持,无需在您的应用程序层中自行开发。 您必须设置单独的索引服务并保持 cassandra/索引数据同步。有一些 cassandra/搜索集成,例如 DSE(商业)、stargate-core(我从未听说有人在生产中使用它),或者您可以自行开发,但所有这些都需要时间和精力。【讨论】:
【参考方案2】:这个问题在 2014 年的 Euro Cassandra 峰会上被提及。
RedHat: Scalable Geospatial Indexing with Cassandra
演示者解释了他如何使用用户定义类型创建空间索引,该索引非常适合使用基于区域或边界框的查找来查询地理空间数据。
总体思路是将数据分解为由边界框定义的区域。然后每个区域代表一个行键,然后您可以使用它来访问与该区域关联的任何数据。如果您有一个感兴趣的位置,您可以查询该区域内的区域上的键空间。
【讨论】:
以上是关于Cassandra 边界框搜索的主要内容,如果未能解决你的问题,请参考以下文章
DSE (Cassandra) - int 数据类型的范围搜索
Cassandra&Spark:我可以将项目添加到行以从行列表创建数据框