MongoDB获取缓慢

时间:2016-02-20 17:30:10

标签: c# mongodb indexing database-performance bigdata

我需要运行以下查询并尽可能接近毫秒获取结果。以下查询返回200,000条记录(每列4列,值为5位)。

在RoboMongo上尝试了以下查询:

db.MarketData.find(
   {
     $or: [ { Symbol: "X" }, { Symbol: "Y" }, { Symbol: "Z" },{ Symbol: "A" }]
   }
).sort({ColumnB:-1});

在Robomongo上执行查询时间为0.001秒。看起来一次只能获得少量结果。但是当我在C#上运行查询时,它需要接近3秒。一切都在一台机器上运行,因此可能没有网络影响等。有什么办法可以让响应时间进一步降低吗?例如。任何缓冲设置等或你能想到的任何东西?

C#代码:

public static async void ProcessDataAsync()
{
    Console.WriteLine(DateTime.Now.TimeOfDay);

    var collection = _database.GetCollection<BsonDocument>("MarketData");
    var builder = Builders<BsonDocument>.Filter;
    var filter = builder.Eq("Symbol", "X") | builder.Eq("Symbol", "Y") | builder.Eq("Symbol", "Z") | builder.Eq("Symbol", "A");
    var sort = Builders<BsonDocument>.Sort.Descending("ColumnB");
    var task = collection.Find(filter).Sort(sort).ToListAsync();

    var x = await task;

    Console.WriteLine(DateTime.Now.TimeOfDay);
}

1 个答案:

答案 0 :(得分:0)

从您的查询中,我建议使用$ in over $或。

你可以在这里找到原因$orvs$in

最终查询将如下所示:

db.collection_name.find({Symbol:{$in:[X,Y,Z,A]}})

更喜欢使用skiplimit来获得更多优化。