2dsphere vs 2d index:哪个“更好”/更快?

Posted

技术标签:

【中文标题】2dsphere vs 2d index:哪个“更好”/更快?【英文标题】:2dsphere vs 2d index: which is "better"/faster? 【发布时间】:2014-01-30 00:39:08 【问题描述】:

我有一个数据库,我的文档只有Points。我考虑添加一个地理空间索引。所以我可以从2dsphere 和2d 中进行选择。

MongoDB.org 有:

2dsphere 索引支持:

 - Calculations on a sphere
 - Both GeoJSON objects and legacy coordinate pairs
 - A compound index with scalar index fields (i.e. ascending or
   descending) as a prefix or suffix of the 2dsphere index field

二维索引支持:

 - Calculations using flat geometry 
 - Legacy coordinate pairs (i.e.,    geospatial points on a flat
   coordinate system)  
 - A compound index with    only one additional    field, as a suffix of
   the 2d index field

但是,由于我的所有文档都是点,因此我可以在架构中使用以下选项之一,而没有太大区别。

对于 2dsphere:

location :  
      type : "Point" ,
      coordinates : [10,45] 

或者对于二维索引:

location : [10,45]

我的问题归结为哪个更快?我真的不知道如何测量它。

问题假设我只想查询一个正方形 box 的数据并且不关心复杂的多边形搜索:要么使用 $box,它仅受 2d 索引支持(如果我没看错的话)或使用两个索引都支持$geoWithin 的$polygon 方法。

【问题讨论】:

为什么不在开发/暂存环境中同时测试索引类型/查询和一些数据?您应该对多次迭代的性能进行平均,以确保数据加载到 RAM 中并且进行更公平的比较。我希望以后使用更新的2dsphere 索引会更好,但我还没有看到任何性能比较。 【参考方案1】:

除了您已经完成的研究之外,只是想补充一下我在这两个索引之间遇到的另一个差异。

默认情况下,旧坐标对上的二维索引使用 26 位精度,这大致相当于使用 -180 到 180 的默认范围时的 2 英尺或 60 厘米精度。精度是通过以位为单位的大小来衡量的用于存储位置数据的 geohash 值。您可以配置精度高达 32 位的地理空间索引。

db.<collection>.ensureIndex( <location field> : "<index type>" , bits : <bit precision> )

来源: MongoDB doc reference

【讨论】:

以上是关于2dsphere vs 2d index:哪个“更好”/更快?的主要内容,如果未能解决你的问题,请参考以下文章

MongoError:找不到任何特殊索引:2d(需要索引),2dsphere(需要索引)

boolean[] vs. BitSet:哪个更有效?

Parallel vs Await vs Result - 哪个更适合延迟执行

模块函数 vs 静态方法 vs 类方法 vs 无装饰器:哪个成语更 Pythonic?

JS 中的全局变量 vs 本地存储 vs DOM 中的值,哪个更高效? [关闭]

egret 和cocos2d-x-js哪个目前更稳定更好用? ?