【问题标题】:MongoDB - taking more time for the First fetch than SQLMongoDB - 第一次获取比 SQL 花费更多时间
【发布时间】:2013-06-03 11:51:53
【问题描述】:

我在我的项目中使用 mongodb 来减少时间,在比较从 SQL 和 NoSQL 获取数据所需的时间时,SQL 需要 50 毫秒来获取每个表单数据库,但 NoSQL 第一次需要大约 180 毫秒,其他获取需要 15 毫秒,如何减少NoSQL中第一次获取的时间。

【问题讨论】:

  • 您能告诉我们更多关于数据量、文档数量和查询(您如何获取文档)的信息吗?
  • 如果您希望我们告诉您如何加快查询速度,您需要告诉我们您正在运行哪些查询...
  • @amit_saxena 我的收藏有 108 条记录。我使用以下查询来获取记录。 IMongoQuery query = new QueryDocument(); query = Query.And(query, Query.EQ("Field1", 1)); MongoCollection<BsonDocument> collectionAC = MongoDBs.GetCollection<BsonDocument>("CollectionName"); var Log = collectionAC.FindAs<BsonDocument>(query).SetFields(Fields.Exclude(dyFields)).ToList();
  • @Sammaye 这是我的文档结构。 { "AC" : { "A_C_N" : "work","Ast_File_Name" : "untitled.bmp", "A_Sts" : 0, "A_Active" : "True", "M_Size" : -1, "S_Descr" : "description" }, "AC_Sk" : 20, "Asts" : [{ "Ast_Name" : "Testing" }], "_id" : ObjectId("51aa93ee6f1f9a0bbcab0886") }

标签: c# asp.net mongodb


【解决方案1】:

尝试为您的集合创建索引以使查询运行得更快
http://docs.mongodb.org/manual/core/indexes/

【讨论】:

  • @Gavruk 我已经用 unique: ture 给出了索引。我的查询仅在第一次获取时花费了那个时间。
  • 可能你的数据没有加载到内存中。在第一次查询之后,MongoDB 会将您的数据加载到内存中,接下来的查询会变得更快
【解决方案2】:

第一个查询可能需要更多时间,因为它将工作集加载到您的 RAM 中。有关工作集的详细信息可以在这里找到:

http://docs.mongodb.org/manual/faq/storage/#what-is-the-working-set

为避免此问题,您可能需要在任何实际用户访问数据库之前预加载它。我能想到的一种方法是每小时(或您认为合适的任何频率)cron 每小时执行一次此查询以将工作集加载到内存中,以便更快地进行后续查询。

【讨论】:

  • 嗨@amit,我需要在我的配置文件中添加任何配置设置吗,dbpath,logpath and logappend 这是我现在在配置中给出的设置。我必须做些什么才能让我的数据库将其工作集加载到 RAM 中。
  • 正如我所说,您可以有一个周期性的 cronjob 来触发类似的查询并将工作集加载到 RAM 中。
  • 嗨@amit,正如你所说,我在另一个页面加载中进行了相同的查询(即,在 page_1.aspx 中给出了相同的查询),即使我的页面的选择(即 current_page .aspx)第一次需要更多时间,因为它在 page_1.aspx 中完成。可能是什么问题,请指导我继续时间是我的标准。
  • 嗨@amit,也供您参考,我在下面给出了我使用的代码。请做一些必要的事情以减少提取时间。
  • 下面是代码public string GAST(){string json = "";var Logs = new List<BsonDocument>();IMongoQuery query = new QueryDocument();string[] dyFlds = new string[] { "_id", "Asts.UId"};query = Query.And(query, Query.EQ("AC", AC));MongoDBs.RequestStart();MongoCollection<BsonDocument> collectionAC = MongoDBs. GetCollection <BsonDocument>("AstC");Logs = collectionAC.FindAs<BsonDocument>query).SetFields(Fields.Exclude(dyFlds)). ToList();if (Logs.Count != 0){ BsonDocument doc= Logs[0];json = docAsset[0].ToString();}MongoDBs.RequestDone();return json;}
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 2022-09-30
  • 1970-01-01
  • 1970-01-01
  • 2019-02-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多