0

私はwin64マシンでMongoDB1.6.5の速度とC#をテストしています。州、郡、町をロードするためのソースとしてYahoo.geoplanetを使用していますが、パフォーマンスはあまり高くありません。現在、これらのソースから米国の州をロードして、ローカルホストのWebページにリストを渡すのに5秒以上かかります。インデックスとして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();
   }
}
4

3 に答える 3

2

私はmongodbに問題がないと思います、2つの理由でロードが遅くなる可能性があります:

  1. 大量の「BsonPlaces」(たとえば、20000以上)をロードしようとしています。
  2. ページ上の別のコードには時間がかかります。

速度を向上させるには、次のことができます。

1.クエリによって返されるアイテムに制限を設定します。

 cursor.SetLimit(100); 

2.「Name」、「Iso」、「Place_Type」のインデックスを作成します。

helper.GeoPlanet.PlacesRepository.Db.Places.EnsureIndex("Name");
于 2011-02-18T23:31:19.987 に答える
2

c#ドライバーにはおそらく大きなパフォーマンスの問題があります。シェルでの100k回の単純なクエリには3秒かかり、同じクエリ(公式のc#ドライバー1.5のc#linqで記述)には30秒かかります。プロファイラーは、c#クライアントからの各クエリに1ミリ秒未満かかることを通知します。したがって、c#ドライバーは、クエリを非常に遅くする多くの不要な処理を実行していると思います。

mongodb 2.0.7では、OS:Windows 7、RAM:16G。

于 2012-08-12T12:16:23.373 に答える
1

YahooからGeoPlanetデータをダウンロードしたところ、geoplanet_places_7.6.0.tsvファイルに5,653,969行のデータが含まれていることがわかりました。

つまり、インデックスがない場合は、500万を超えるエントリの「全表スキャン」を実行して米国の50州を取得していることになります。

国内の州を照会する場合、次のインデックスがおそらく最も役立ちます。

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

国を指定せずにすべての「州」を検索する理由はわかりませんが、そのための別のインデックスが必要になります。

ソートが含まれる場合、インデックスがソート順と一致すると有利な場合があります。たとえば、「名前」で並べ替えているため、インデックスは次のようになります。

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

ただし、状態が50しかないため、ソートはおそらく非常に高速になります。

パフォーマンスの低下がC#ドライバーに起因するものではないかと思いますが、インデックスを追加した後もパフォーマンスの問題が発生する場合は、お知らせください。

于 2011-02-19T00:13:42.437 に答える