sql - NoSQL:如何根据纬度和经度检索 'house'?

标签 sql database rdbms nosql cassandra

我有一个用于存储房地产的 NoSQL 系统。

我在每个房子的键值存储中的一条信息是经度纬度

如果我想检索地理纬度/经度框中的所有房屋,如下面的 SQL:

SELECT * from houses 
WHERE latitude IS BETWEEN xxx AND yyy
AND longitude IS BETWEEN www AND zzz

问题:

  1. 我如何使用 NoSQL 进行这种类型的检索...仅使用键值存储系统?

  2. 即使我可以使用 NoSQL 做到这一点,它是否会更有效率,或者只是回到使用传统数据库更快地检索此类信息?

最佳答案

使用 SQL 或不使用 SQL 都不是问题——严格来说,问题在于您的键上有什么样的索引。 spatial indices ,这是您有效满足查询所需要的,与 Sql 无关,或者更普遍地与关系数据库无关——它们与关系与非关系问题完全正交。不幸的是,我不知道有任何公开可用的 Cassandra 或其他流行的非关系数据库的空间索引系统(事实上,我所熟知的唯一面向 GIS 的数据库引擎是 PostGIS,它恰好是作为强大的开源 PostGres... 关系型;-)。

如果您没有空间索引而只有一个普通索引(例如,一个按纬度排序,然后按经度排序),那么您将不得不扫描具有合适纬度的所有记录,以丢弃那些具有不合适经度的记录 - - 就像关系引擎在相同情况下必须为您做的一样(当您选择几个 BETWEEN 时,它所要做的只是两个字段的简单排序索引,因此约束)。与关系无关……与索引有关;-)。

关于sql - NoSQL:如何根据纬度和经度检索 'house'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796575/

相关文章:

sql - 如何从 SQL Server 的表中获取列名?

SQL 选择一系列中的第一个缺失值

php - 任何使用 DISTINCT 与此代码的想法

c# - C# 中的 SQL 连接字符串

mysql - 在数据库中存储数据的最佳和最佳方式

mysql - 为什么这个必须在指定时间范围内选择记录的 WHERE 条件没有按预期工作?

nosql - 传统 RDBMS 中的水平扩展

mysql - 使用引用原始表的子查询删除

MySQL varchar timestamp 列存储两种不同的方式

php - ORDER BY 子句中的子查询 MySQL