Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
[MongoDB]:当平衡器进行迁移时,传入写入操作保存在哪里?_Mongodb - Fatal编程技术网

[MongoDB]:当平衡器进行迁移时,传入写入操作保存在哪里?

[MongoDB]:当平衡器进行迁移时,传入写入操作保存在哪里?,mongodb,Mongodb,请看 它有以下短语: 当MongoDB开始迁移块时,数据库开始将数据复制到新服务器并跟踪传入的写入操作 我的问题是这些传入的写入操作保存在哪里?如果它在内存中,那么我需要如何调用getLastError并确保数据与磁盘同步。谢谢 首先,如果要保证写入,不管是否使用切分,都应该调用getLastError(或使用驱动程序的等效程序进行安全写入) 就迁移期间操作发生的情况而言。通过查看FAQ中这两个问题的答案,您可以找到飞行中写入数据的情况: 这两种机制描述了发生的情况,具体取决于操作的性质。用

请看

它有以下短语:

当MongoDB开始迁移块时,数据库开始将数据复制到新服务器并跟踪传入的写入操作


我的问题是这些传入的写入操作保存在哪里?如果它在内存中,那么我需要如何调用getLastError并确保数据与磁盘同步。谢谢

首先,如果要保证写入,不管是否使用切分,都应该调用getLastError(或使用驱动程序的等效程序进行安全写入)

就迁移期间操作发生的情况而言。通过查看FAQ中这两个问题的答案,您可以找到飞行中写入数据的情况:


这两种机制描述了发生的情况,具体取决于操作的性质。用于迁移的原始分片可确保写入操作“发送”到目标分片,或者写回机制将写入操作发送回mongos进程(将在该进程中自动重试)。

谢谢!事实上,我想知道MongoDB如何处理这些传入的写操作?当前区块正在迁移,如何保存这些受影响的数据?正如我所说,它将这些数据保存到正在迁移的区块的源碎片(假设写入在该区块中),然后它将在迁移结束之前将这些写入发送到目标碎片,以便它们最终位于正确的碎片上。任何正在进行的操作都会发送回mongos,并且在mongos刷新其区块视图并知道将操作发送到目标碎片后重试该操作。是的,我明白了,它会将它们保存到源碎片,但我想知道更多详细信息。哪一块?此区块正在迁移,是否可以更改?区块只是一组文档(元数据)的描述-它不是物理的。一个碎片根据该描述向另一个碎片发送文档。如果您正在写入该文档组(更新)或添加到该范围(新文档),那么这些更改/添加就是迁移区块时源碎片发送的内容。如果你没有写信给那一大块,那就一切照旧吧。这样做是为了让您的数据在碎片之间保持平衡——您为什么要改变它?