[MongoDB]:当平衡器进行迁移时,传入写入操作保存在哪里?
请看 它有以下短语: 当MongoDB开始迁移块时,数据库开始将数据复制到新服务器并跟踪传入的写入操作[MongoDB]:当平衡器进行迁移时,传入写入操作保存在哪里?,mongodb,Mongodb,请看 它有以下短语: 当MongoDB开始迁移块时,数据库开始将数据复制到新服务器并跟踪传入的写入操作 我的问题是这些传入的写入操作保存在哪里?如果它在内存中,那么我需要如何调用getLastError并确保数据与磁盘同步。谢谢 首先,如果要保证写入,不管是否使用切分,都应该调用getLastError(或使用驱动程序的等效程序进行安全写入) 就迁移期间操作发生的情况而言。通过查看FAQ中这两个问题的答案,您可以找到飞行中写入数据的情况: 这两种机制描述了发生的情况,具体取决于操作的性质。用
我的问题是这些传入的写入操作保存在哪里?如果它在内存中,那么我需要如何调用getLastError并确保数据与磁盘同步。谢谢 首先,如果要保证写入,不管是否使用切分,都应该调用getLastError(或使用驱动程序的等效程序进行安全写入) 就迁移期间操作发生的情况而言。通过查看FAQ中这两个问题的答案,您可以找到飞行中写入数据的情况:
这两种机制描述了发生的情况,具体取决于操作的性质。用于迁移的原始分片可确保写入操作“发送”到目标分片,或者写回机制将写入操作发送回mongos进程(将在该进程中自动重试)。谢谢!事实上,我想知道MongoDB如何处理这些传入的写操作?当前区块正在迁移,如何保存这些受影响的数据?正如我所说,它将这些数据保存到正在迁移的区块的源碎片(假设写入在该区块中),然后它将在迁移结束之前将这些写入发送到目标碎片,以便它们最终位于正确的碎片上。任何正在进行的操作都会发送回mongos,并且在mongos刷新其区块视图并知道将操作发送到目标碎片后重试该操作。是的,我明白了,它会将它们保存到源碎片,但我想知道更多详细信息。哪一块?此区块正在迁移,是否可以更改?区块只是一组文档(元数据)的描述-它不是物理的。一个碎片根据该描述向另一个碎片发送文档。如果您正在写入该文档组(更新)或添加到该范围(新文档),那么这些更改/添加就是迁移区块时源碎片发送的内容。如果你没有写信给那一大块,那就一切照旧吧。这样做是为了让您的数据在碎片之间保持平衡——您为什么要改变它?