【问题标题】:MongoDB C# low performance issueMongoDB C# 低性能问题
【发布时间】:2011-06-30 04:08:12
【问题描述】:

我正在 win64 机器上测试 MongoDB 1.6.5 的速度和 C#。我使用Yahoo.geoplanet 作为加载州、县、城镇的来源,但我的表现不是很好。我目前有更多 5 秒的时间从这些源加载美国各州,并将列表传递到 localhost 中的网页。 仅使用 id 作为索引。有人可以建议执行方式。谢谢

class BsonPlaces  
{  
   [BsonId]  
   public String Id { get; set; }  
   public String Iso { get; set; }  
   public String Name { get; set; }  
   public String Language { get; set; }  
   public String Place_Type { get; set; }  
   public String Parent_Id { get; set; }    
}  

public List<BsonPlaces> Get_States(string UseCountry)
{
   using (var helper = BsonHelper.Create())
   {
     var query = Query.EQ("Place_Type", "State");
     if (!String.IsNullOrEmpty(UseCountry))
       query = Query.And(query, Query.EQ("Iso", UseCountry));
     var cursor = helper.GeoPlanet.PlacesRepository.Db.Places
                  .FindAs<BsonPlaces>(query);
     if (!String.IsNullOrEmpty(UseCountry))
         cursor.SetSortOrder(SortBy.Ascending("Name"));
     return cursor.ToList();
   }
}

【问题讨论】:

  • 查询返回多少“BsonPlaces”?

标签: performance mongodb mongodb-.net-driver


【解决方案1】:

我想问题不在 mongodb 中,加载速度慢有两个原因:

  1. 您试图加载大量“BsonPlaces”(例如 20000 甚至更多)。
  2. 页面上的一些其他代码需要很长时间。

为了提高速度,您可以:

1.设置查询返回的项目限制:

 cursor.SetLimit(100); 

2.为“Name”、“Iso”、“Place_Type”创建索引:

helper.GeoPlanet.PlacesRepository.Db.Places.EnsureIndex("Name");

【讨论】:

    【解决方案2】:

    我从 Yahoo 下载了 GeoPlanet Data,发现 geoplanet_places_7.6.0.tsv 文件有 5,653,969 行数据。

    这意味着在没有索引的情况下,您正在对超过 500 万个条目进行“全表扫描”以检索美国 50 个州。

    在查询一个国家/地区的州时,以下索引可能最有帮助:

    ...EnsureIndex("Iso", "Place_Type");

    不确定为什么要在不指定国家/地区的情况下搜索所有“州”,但您需要另一个索引。

    有时当涉及到排序时,索引匹配排序顺序可能是有利的。例如,由于您按“名称”排序,因此索引可能是:

    ...EnsureIndex("Iso", "Place_Type", "Name");

    但是,只有 50 个状态,排序可能会非常快。

    我怀疑您的任何性能下降都归因于 C# 驱动程序,但如果在添加索引后仍然存在性能问题,请告诉我们。

    【讨论】:

    • 感谢 robert 时间现在约为 230 毫秒。
    【解决方案3】:

    c# 驱动程序可能有很大的性能问题。在 shell 上进行 100k 次的简单查询需要 3 秒,相同的查询(用官方 c# 驱动程序 1.5 的 c# linq 编写)需要 30 秒。 Profiler 告诉来自 c# 客户端的每个查询不到 1 毫秒。所以我假设 c# 驱动程序正在做很多不必要的事情,这使得查询变得如此缓慢。

    mongodb 2.0.7下,操作系统:windows 7,内存:16G。

    【讨论】:

    • 你找到这个问题的原因/解决方案了吗?我似乎遇到了同样的问题。
    • 不,我没有跟进,恢复到关系。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-07
    • 2019-10-16
    • 2012-08-18
    • 2019-11-15
    • 2013-09-09
    • 2011-04-01
    • 2021-07-06
    相关资源
    最近更新 更多