小编Ste*_*veK的帖子

MongoDB删除速度非常慢

我有一个三个mongod服务器的小副本集(每个16GB RAM,至少4个CPU核心和真正的硬盘驱动器)和一个专用仲裁器.复制的数据目前有大约100,000,000条记录.几乎所有这些数据都在一个集合中,其索引_id(自动生成的Mongo ID)和date本地Mongo日期字段.我会定期使用日期索引删除此集合中的旧记录,类似这样(来自mongo shell):

db.repo.remove({"date" : {"$lt" : new Date(1362096000000)}})
Run Code Online (Sandbox Code Playgroud)

这确实有效,但运行速度非常慢.我的一个节点的I/O比其他两个节点慢,只有一个SATA驱动器.当此节点为主节点时,删除以约5-10个文档/秒运行.通过使用rs.stepDown(),我降低了这个较慢的主要版本并强制选举以获得具有更好I/O的主要版本.在那台服务器上,我得到大约100个docs/sec.

我的主要问题是,我应该担心吗?在我介绍复制之前,我没有这些数字,但我知道删除速度要快得多.我想知道副本集同步是否导致I/O等待,或者是否还有其他原因.在删除语句完成之前暂时禁用同步和索引更新我会非常满意,但我目前还不知道有什么方法可以做到这一点.出于某种原因,当我禁用三个节点中的两个,只留下一个节点和仲裁器时,剩下的节点被降级并且写入是不可能的(不是仲裁者应该解决这个问题吗?).

为了给出一般性能的一些指示,如果我删除并重新创建日期索引,则扫描所有100M文档大约需要15分钟.

mongodb mongodb-query

6
推荐指数
1
解决办法
9840
查看次数

通过map reduce的MongoDB唯一值聚合

我在MongoDB中看到很多关于聚合的问题,但是,我还没有找到完整的解决方案.

这是我的数据示例:

{
    "fruits" : {
        "apple" : "red",
        "orange" : "orange",
        "plum" : "purple"
    }
}
{
    "fruits" : {
        "apple" : "green",
        "plum" : "purple"
    }
}
{
    "fruits" : {
        "apple" : "red",
        "orange" : "yellow",
        "plum" : "purple"
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,我的目标是确定每种水果的每种颜色的受欢迎程度,所以这样的东西就是输出集合:

{
    "_id" : "apple"
    "values" : {
        "red" : 2,
        "green" : 1
    }
}
{
    "_id" : "orange"
    "values" : {
        "orange" : 1,
        "yellow" : 1
    }
}
{
    "_id" : "plum"
    "values" …
Run Code Online (Sandbox Code Playgroud)

javascript mapreduce mongodb mongodb-query

4
推荐指数
1
解决办法
7084
查看次数

标签 统计

mongodb ×2

mongodb-query ×2

javascript ×1

mapreduce ×1