首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过查询删除数百万个文档对ReplicaSet有什么影响?

通过查询删除数百万个文档对ReplicaSet有什么影响?
EN

Stack Overflow用户
提问于 2013-09-23 21:02:01
回答 2查看 439关注 0票数 2

我有一个有超过820万份文件的收藏。我需要通过查询删除其中的2-3百万(属性或两个属性被索引)。

我担心的是,我的第二次考试落后了,因为我的oplog变得比我的能力还大,然后需要我从备份中重新播种它们。

像这样的事..。

代码语言:javascript
复制
db.my_collection.remove({attribute_1:'xyz'},false);

代码语言:javascript
复制
db.my_collection.remove({attribute_1:'xyz',attribute_2:'abc'},false);

是一个不会对我的第二次访问产生负面影响的oplog条目(除了实际删除文档)吗?还是会被翻译成230万次复制操作?

我认为答案是,这将是一个操作,我将有一些碎片,我可能需要恢复,但不一定是一个oplog/次要同步问题。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-23 21:31:05

最后,您将在oplog中为每个在主文件上删除的文档提供一个单独的条目。

因此,如果在主服务器上删除了300万个文档,则最终将有300万条通过次要文件上的_id键进行删除的语句。

我会对它们进行批次处理,然后根据滞后情况对删除进行节流,然后再压缩或重新生成。

如果您有大量的文档移动,您可能需要考虑使用paddingFactor集。

票数 2
EN

Stack Overflow用户

发布于 2013-09-23 21:34:28

通过创建一个集合并向remove()添加一些匹配的文档,可以很容易地对其进行测试。

然后,您可以检查oplog以查看生成了哪些条目:

代码语言:javascript
复制
use local
db.oplog.rs.find({op:'d'})

为了确保在主文件和次要文件上删除相同的文档,每个删除的文档在oplog中生成一个条目。

例如,在匹配两个文档的op: 'd'( remove() )之后删除了oplog中的条目:

代码语言:javascript
复制
{
    "ts" : Timestamp(1379971718, 1),
    "h" : NumberLong("8227301495520897544"),
    "v" : 2,
    "op" : "d",
    "ns" : "test.foo",
    "b" : true,
    "o" : {
        "_id" : ObjectId("5240b21e2fa8b603e8aaaceb")
    }
}
{
    "ts" : Timestamp(1379971718, 2),
    "h" : NumberLong("-5339031341149346886"),
    "v" : 2,
    "op" : "d",
    "ns" : "test.foo",
    "b" : true,
    "o" : {
        "_id" : ObjectId("5240b2202fa8b603e8aaacec")
    }
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18968812

复制
相关文章

相似问题

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