首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我的mongo查询读取运行超过5000毫秒

我的mongo查询读取运行超过5000毫秒
EN

Stack Overflow用户
提问于 2014-07-15 11:59:58
回答 1查看 729关注 0票数 0

我有一个mysql作为主数据库,mongodb作为辅助数据库。我在生产上运行了一个查询,它运行了超过5秒。

下面是我使用explain运行时的查询

代码语言:javascript
复制
{
"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"
}

我增加了一个索引

代码语言:javascript
复制
[
{
    "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"
}
]

但我还是不知道为什么在运行查询时速度这么慢

代码语言:javascript
复制
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统计是:

  • 指挥: 19.11
  • 查询: 13.79
  • 最新情况: 0.03
  • 删除: 0.00001
  • getmore: 0
  • 插入: 0.03

我的最高成绩是0.02

我能做什么来优化我的mongodb到小于1秒?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-15 14:55:05

我将介绍一些应该有帮助的东西,尽管我想先澄清一下,大小写不敏感的regex搜索(“host:/shannisideup up /i”)不能使用索引,所以对这个数据模型和搜索所能做的事情是有限制的。您可以看到,它正在扫描大量对象(“n扫描”:313566),只是为了返回1份文档。

要做的事情:

  • 用更快的cpu升级您的实例--在这种情况下,100%的cpu负载不敏感搜索是一个明确的指示,有时您的数据库是cpu绑定的。一个更快的cpu会有帮助。更多的内存(通常是在移动到更快的cpu时附带的Amazon实例)也不会对您造成伤害。更快的磁盘(SSD)也是如此。
  • 在将主机字段存储在MongoDB中之前,将其小写--如果您以小写存储所有主机,然后在搜索之前将搜索字符串小写,则可以消除正则表达式的大小写不敏感标志。如果您可以将其与正则表达式中的前缀运算符结合起来,您将能够使用索引,这将有所帮助。
  • 考虑使用专用文本搜索产品(如Solr或Elasticsearch)进行主机查询。MongoDB的文本搜索能力有限,特别是在外卡搜索方面。您可能会发现,像Elasticsearch或Solr这样的东西可以提供更好的性能。

您可能会发现一些有用的链接:

http://docs.mongodb.org/manual/reference/operator/query/regex/

http://selectnull.leongkui.me/2014/02/02/mongodb-elasticsearch-perfect-nosql-duo/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24757691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档