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多个位置。。。花的时间太长了。我如何使它更好

Mongodb C#GeoNEar速度较慢

知道"太长"的长度会很有用,因为这可能是高度相关的。它还可以帮助了解你运行的是什么版本,以及你运行的硬件类型

但考虑到以上信息,一个潜在的放缓是你的

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#驱动程序的任何低效。