我有一个包含以下属性的MongoDB集合:
longitude, latitude, start_date, end_date, price
我有超过5亿份文件。
我的问题是如何尽可能有效地搜索纬度/经度,日期范围和价格? 我认为我的选择是:
我正在尝试选项1。)但是在我走得太远之前,我真的想听听你的想法吗?
搜索引擎如何拆分和管理他们的数据......这一定是类似的问题?
此外,我不必使用MongoDB,我对其他选项持开放态度?
非常感谢。
答案 0 :(得分:2)
索引和数据访问性能是一个深刻而复杂的主题。许多因素都会影响最有效的解决方案,包括数据集的大小,读写比,IO和后备存储的相对性能等。
虽然我无法给你一个具体的答案,但我可以建议使用morton数作为拉取多个类似数值的有效方法,比如lat longs。
答案 1 :(得分:1)
为什么你认为选项1会太慢?这是真实世界测试的结果还是仅仅是假设它最终可能无法解决?
MongoDB本身支持geohashing并将坐标转换为单个数字,然后可以通过BTree遍历进行搜索。这应该相当快。对我来说,弄乱多个收藏品似乎不是一个好主意。它所做的就是用一些你需要编写,测试和维护的代码替换数据库上的一个BTree遍历级别。
不要重新发明轮子,但首先尝试优化最明显的路径(1):
explain
确保您的查询实际使用索引geoNear
,并坚持更快(但不是完美的球形)near
查询