MongoDb:聚合方法耗时太长

问题描述 投票:0回答:1

我正在尝试使用 C# 驱动程序为 Mongo DB 执行简单的聚合管道。这是我的代码:

internal async Task<IEnumerable<BsonDocument>> GetDocumentsAsync(string collectionName, int? pageIndex, int? pageSize) {
    var collection = _database.GetCollection<BsonDocument>(collectionName);

    var aggregationPipeline = new BsonDocument[]
    {
        new BsonDocument("$skip", pageSize * (pageIndex ?? 0)),
        new BsonDocument("$limit", pageSize ?? 10)
    };

    var result = await collection.Aggregate(aggregationPipeline).ToListAsync();

    return result; }

但是聚合函数需要~7s。

我尝试过相同的代码(使用相同的管道),但在 Node.js 中只需要 0.7 秒(少了 10 倍)。

集合中的文档总数为 30K。为什么使用 C# 驱动程序需要这么长时间?有什么办法可以解决这个性能问题吗?

谢谢你

c# mongodb azure-cosmosdb mongodb-.net-driver
1个回答
0
投票

我尝试使用 Nodejs 使用驱动程序从 mongodb 检索数据。

      async function main() {
    await client.connect();
    console.log('Connected successfully to server');
    const collection = client.db('MyDatabase').collection('MyCollection');
    const results = await collection.aggregate([{$limit : 20}]).toArray();
    results.map((result, i ) => console.log(`${++i} ${JSON.stringify(result)}`));
  }
    main()
        .then()
        .catch(console.error)
        .finally(() => client.close());

这在大约 500 毫秒内为我提供了来自 Azure CosmosDb 服务器的 20 个文档的数据。 但我遇到了完全相同的问题,C# 在尝试通过聚合管道时显示出高延迟。 无法找出它来自哪里,但正在努力。

© www.soinside.com 2019 - 2024. All rights reserved.