2dsphere vs 2d指数表现

时间:2014-01-20 22:28:01

标签: mongodb gps database-performance

我需要快速查询以查找某个点的某个GPS半径内的所有文档。半径很小,精度不是那么关键,所以我不需要考虑球面几何形状。会有很多写作。使用2d索引而不是2dsphere会获得更好的性能吗?

2 个答案:

答案 0 :(得分:11)

如果您确实不需要球形几何体或复合地理索引中的多个字段(请参阅MongoDB手册中Geospatial Indexes上的注释),则2d索引更合适。将坐标保存为传统对(经度,纬度)而不是GeoJSON点也会有轻微的存储优势。这可能不足以显着影响您的写入性能,但这取决于“大量写入”的含义以及这些是否会推动您的I / O限制。

我不确定查询对不同地理索引类型的相对性能,但您可以在自己的开发/暂存环境中轻松设置代表性测试用例进行比较。确保在多次迭代中平均测量值,以便将文档加载到内存中并进行公平比较。

您可能还需要考虑一个haystack index,它可以在一个小区域内返回2d查询的结果,并结合其他字段条件(例如,“查找餐馆靠近经度,纬度“)。如果你没有对准确性或按距离排序(并有一个额外的搜索字段)感到困惑,这种索引类型可能适用于你的用例。

答案 1 :(得分:1)

2dsphere is now version 3 after MongoDB 3.2

2dsphere更好

来自https://jira.mongodb.org/browse/SERVER-18056

的数据

更多详情:https://www.mongodb.com/blog/post/geospatial-performance-improvements-in-mongodb-3-2

3.1.6 - 2dsphere V2

“executionTimeMillis”:1875,

“totalKeysExamined”:24335,

“totalDocsExamined”:41848,

重新索引后

3.1.6 - 2dsphere V3

“executionTimeMillis”:94,

“totalKeysExamined”:21676,

“totalDocsExamined”:38176,

与2d相比

3.1.6 - 2d

“executionTimeMillis”:359,

“totalKeysExamined”:95671,

“totalDocsExamined”:112968,