我有一个mysql作为主数据库,mongodb作为辅助数据库。我在生产上运行了一个查询,它运行了超过5秒。
下面是我使用explain运行时的查询
{
"cursor" : "BtreeCursor host_1_type_1 multi",
"isMultiKey" : false,
"n" : 1,
"nscannedObjects" : 1,
"nscanned" : 313566,
"nscannedObjectsAllPlans" : 313553,
"nscannedAllPlans" : 627118,
"scanAndOrder" : false,
"indexOnly" : false,
"nYields" : 14,
"nChunkSkips" : 0,
"millis" : 6555,
"indexBounds" : {
"host" : [
[
"",
{
}
],
[
/shannisideup/i,
/shannisideup/i
]
],
"type" : [
[
"ambassador-profile",
"ambassador-profile"
]
]
},
"server" : "mongoserver:27017"
}我增加了一个索引
[
{
"v" : 1,
"key" : {
"_id" : 1
},
"ns" : "db.visitor",
"name" : "_id_"
},
{
"v" : 1,
"key" : {
"host" : 1,
"type" : 1
},
"ns" : "db.visitor",
"name" : "host_1_type_1"
}
]但我还是不知道为什么在运行查询时速度这么慢
db.visitor.find({ host:/shannisideup/i, type:"ambassador-profile" }).limit(1)FYI,我在AWS云中为我的应用程序和mongodb服务器运行不同的服务器。对于运行EC2 m3.media的mongodb,我尝试按照mongodb网站的建议提高openfile。我的mongodb运行在通过/dev/sdf安装的单独100 is磁盘上。我运行mongodb版本2.4.5当我运行mongodb时,CPU负载几乎总是100%
我的竞争对手的MMS统计是:
我的最高成绩是0.02
我能做什么来优化我的mongodb到小于1秒?
发布于 2014-07-15 14:55:05
我将介绍一些应该有帮助的东西,尽管我想先澄清一下,大小写不敏感的regex搜索(“host:/shannisideup up /i”)不能使用索引,所以对这个数据模型和搜索所能做的事情是有限制的。您可以看到,它正在扫描大量对象(“n扫描”:313566),只是为了返回1份文档。
要做的事情:
您可能会发现一些有用的链接:
http://docs.mongodb.org/manual/reference/operator/query/regex/
http://selectnull.leongkui.me/2014/02/02/mongodb-elasticsearch-perfect-nosql-duo/
https://stackoverflow.com/questions/24757691
复制相似问题