请教检索mongodb效率很慢

vvv1211 2012-02-02 09:11:45
我用的samus驱动,检索420000条的数据,感觉很慢,点击按钮后要4秒往上左右页面才出结果。查资料有人说建立连接池,却不知道怎么做。
由于刚接触.net和mongodb不久,请详细指导一下,能有个实例万分感谢。
下面是我写的部分代码。

///检索语句 查询"code"字段是否包含字符串"关键字"
coll.MetaData.CreateIndex(new Document() { { "code", 1 } }, false);
coll.FindAll().Sort(new Document() { { "code", 1 } });
var redata = (from item in coll.Linq().ToList()
where ((string)item["code"]).Contains("关键字")
orderby item["code"] ascending
select item);
return redata;

///页面中的
@foreach (var item in ViewBag.red)
{
<tr><td>@Html.ActionLink((string)item["code"], "", new { b=item["code"]})</td></tr>
}
...全文
1558 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
norsd 2013-10-07
  • 打赏
  • 举报
回复
在搜索 MongoDb 效率的时候进来了。 说下我发现的LZ的代码问题 LZ的代码是把 数据都拖到内存之后再进行逐一判断。 LZ的代码: var redata = (from item in coll.Linq().ToList() where ((string)item["code"]).Contains("关键字") orderby item["code"] ascending select item); 我认为: from item in coll.Linq().ToList() 到这里应该已经把数据全部拖到内存里去了,所以很慢。 我不记得samus支持linq LZ应该使用 samus中 mongoCollection 中Find函数,详细请参阅Samus的技术文档。 希望有帮助。
jiejiep 2013-03-06
  • 打赏
  • 举报
回复
第一,关键字模糊查询肯定慢,无论 code 上是不是有索引,都是全表扫描,不走索引。
strike2368168 2012-12-21
  • 打赏
  • 举报
回复
不会.net,但是看了你的代码感觉有问题 你是获取所有数据后,自己在判断code每条数据是否包含“关键字”? mongodb是有模糊查询的,你这样做肯定慢,并且你还排序了 还要看返回的结果集有多大,太大IO传输和前端展示也是要耗费时间的
destruction666 2012-12-10
  • 打赏
  • 举报
回复
http://www.cnblogs.com/lovecindywang/archive/2011/03/02/1969324.html
boYwell 2012-10-13
  • 打赏
  • 举报
回复
你这个和连接池木有关系呀,一次查询就卡成这样
1,建立索引
2,MongoDB的查询高性能是建立在大内存基础上
超级梅南人 2012-09-27
  • 打赏
  • 举报
回复
不仅是查询条件的索引问题,而且你还要在建立索引同时建立索引排序,不要在查询的时候去排序!!!!不知.net可不可以这样建索引:coll.MetaData.CreateIndex(new Document() { { "code ", 1 } }, false).Ascending();
不过,不管是什么语言,你都可以直接在mongodb下输入命令行来测试,以下的mongodb命令行下的测试:
> db.test.find({h:/code/}).explain()
{
"cursor" : "BtreeCursor h_-1 multi",
"isMultiKey" : false,
"n" : 938,
"nscannedObjects" : 938,
"nscanned" : 136348,
"nscannedObjectsAllPlans" : 938,
"nscannedAllPlans" : 136348,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 0,
"nChunkSkips" : 0,
"millis" : 244,
"indexBounds" : {
"h" : [
[
/code/,
/code/
],
[
{

},
""
]
]
},
"server" : "test:27017"
}

说明:集合test有136348条数据,使用正则查h字段,查到有匹配938条数据,"millis" : 244,表示所花时间为244毫秒,“indexBounds”表示所用索引为"/code/","scanAndOrder" : false,表示没有进行排序,是因为我在写索引的时候已经排序好了,如果它为true,那么所花时间将更多。由于我使用的是正则查询,要遍历集合一遍,所花时间肯定比较长,但如果你只是在100万条数据里查一个匹配:db.test.find({'h':'code'}).explain(),所花时间为0.
ro_nice 2012-09-24
  • 打赏
  • 举报
回复
正常情况下,mongodb在查询100W条的数据速度应该是0.2左右,然后数据越多,查询到最后就越慢。。CPU,内存等占据越高,到最后基本上内存和CPU都占满之后会比较的满,大概是1秒钟5千到2万条左右
VF 2012-09-14
  • 打赏
  • 举报
回复
索引的问题,我测试过100万条数据,不建立索引或索引有问题,查询需要3-5秒,索引正常0.1秒就能有结果
zoujian911 2012-09-13
  • 打赏
  • 举报
回复
应该不是mongodb的问题,是不是你的索引的问题,或者你的程序机制问题。反正我这边查询上千万的数据也仅仅就几秒而已。
wokagoka 2012-09-13
  • 打赏
  • 举报
回复
给条件建立索引
ycproc 2012-02-02
  • 打赏
  • 举报
回复
我估计现在会mongodb的不多
我也正在研究之中
你去问问一些 大牛们吧
vvv1211 2012-02-02
  • 打赏
  • 举报
回复
数据少的话就快了,70000条数据时点一下按钮就检索出来了,数据越多越慢,不知道为什么

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧