Database/NoSQL—检索以下数据的最低延迟方式

Database/NoSQL—检索以下数据的最低延迟方式,database,performance,rdbms,nosql,cassandra,Database,Performance,Rdbms,Nosql,Cassandra,我有一份房地产申请,“房子”包含以下信息: house: - house_id - address - city - state - zip - price - sqft - bedrooms - bathrooms - geo_latitude - geo_longitude 我需要对地理坐标框中的所有家庭执行极快(低延迟)检索 类似下面的SQL(如果我使用数据库): 问题:我存储这些信息的最快方式是什么,这样我就可以根据纬度和经度执行最快的数据检索?(例如数据库、NoSQL、memca

我有一份房地产申请,“房子”包含以下信息:

house:
- house_id 
- address
- city 
- state
- zip
- price
- sqft
- bedrooms
- bathrooms
- geo_latitude
- geo_longitude
我需要对地理坐标框中的所有家庭执行极快(低延迟)检索

类似下面的SQL(如果我使用数据库):


问题:我存储这些信息的最快方式是什么,这样我就可以根据纬度和经度执行最快的数据检索?(例如数据库、NoSQL、memcache等)

MongoDB支持地理空间索引,但有一些方法可以减少此类内容的计算时间。根据数据的排列方式,您可以将房屋放置在可识别的“平铺”中,然后获取给定平铺的所有房屋,并根据与任何坐标之间的距离,从简化的数据集中进行排序


根据瓷砖的数量,您可以使用位掩码查找可能靠近或重叠多个瓷砖的房屋。

这是地理信息系统(GIS)应用程序的典型查询。其中许多问题是通过使用四叉树或类似的空间索引来解决的。提到的平铺是如何实现的


如果包含坐标的索引可以放入内存,并且DBMS有一个相当好的优化程序,那么表扫描可以以相当低的开销提供到任何关注点的笛卡尔距离。如果速度太慢,则可以通过在进行完整距离计算之前分别比较每个坐标轴来预过滤查询。

我假设您进行的读取比写入多得多,并且您不需要将数据库分布在数十台机器上。如果是这样,您应该选择像sqlite(我个人偏好)或mysql这样的读优化数据库,并完全使用您建议的SQL查询

对于这类查询,大多数(并非所有)NoSQL数据库最终都过于复杂,因为它们更擅长在索引中查找精确值,而不是在范围中查找


很好,您正在寻找一个边界框,而不是笛卡尔距离;后者对于SQL数据库来说更难优化(尽管您可以将其缩小为一个边界框,然后进行较慢的笛卡尔距离计算)。

这就像问我需要以最快的方式去最近的沃尔玛,而不提它有多远?你有什么车?你住的地方是否已经开发了道路?很难回答你的问题。i、 Memcached可能是最快的,但如何在它上运行查询呢。这类一般性问题除了讨论之外没有其他答案。在你的问题中添加更多信息这看起来像是重复的。
SELECT * from houses 
WHERE latitude IS BETWEEN xxx AND yyy
AND longitude IS BETWEEN www AND zzz