Mongodb C#GeoNEar速度较慢
本文关键字:速度 C#GeoNEar Mongodb | 更新日期: 2023-09-27 18:00:03
我用Mongodb C#添加了一个GeoNear函数,如下所示:
` var options = GeoNearOptions.SetMaxDistance(rangeInKm / earthRadius /* to radians */)
.SetSpherical(true).SetDistanceMultiplier(6378.137);
collection.EnsureIndex(IndexKeys.GeoSpatial("PlacePoint"));'
MongoDB.Driver.GeoNearResult<MongoPlace> Georesults = collection.GeoNear(Query.Null, coordinates[0], coordinates[1], TakeNum,options);
我在数据中有3000多个位置。。。花的时间太长了。我如何使它更好
知道"太长"的长度会很有用,因为这可能是高度相关的。它还可以帮助了解你运行的是什么版本,以及你运行的硬件类型
但考虑到以上信息,一个潜在的放缓是你的
collection.EnsureIndex(IndexKeys.GeoSpatial("PlacePoint"));
看起来您可能会在每次查询之前都运行它,这将是一个"否",因为您只应该在集合上创建一次索引,我想这可能会减慢您的速度。
你可以试着从mongo shell运行你的命令,就像这样(当然,用你的真实值代替我的占位符):
db.runCommand( { geoNear: "<collectionName>", near: [<lon>,<lat>], num: <num>, spherical:true } )
然后查看"统计数据"信息,看看是否有什么问题。我个人有一个234107个地方的集合,上面有地理空间索引,我运行了一个geoNear命令,其中的坐标故意远离我集合中的任何一个地方,以确保它能扫描到每一个地方。我得到了以下结果(在功能适中的硬件上运行2.2.3版本:Core i5、16 GB RAM、7200 RPM HDD-数据集由相当小的文档组成,这些文档由lat/lon点+少量额外数据组成):
"stats" : {
"time" : 261,
"btreelocs" : 0,
"nscanned" : 234107,
"objectsLoaded" : 133,
"avgDistance" : 1.380670166668938,
"maxDistance" : 1.3807179692447809
},
在一个更接近我收藏的地方的查询中,我得到了:
"stats" : {
"time" : 15,
"btreelocs" : 0,
"nscanned" : 6211,
"objectsLoaded" : 29,
"avgDistance" : 0.003811909711576418,
"maxDistance" : 0.003919781450489085
},
这里的"时间"是以毫秒为单位的,这对我来说似乎很合理。在C#中运行GeoNear函数对我来说总是立即返回,所以我不认为你的缓慢结果会是因为C#驱动程序的任何低效。