MongoDB:架构迁移,更新或插入

时间:2014-01-02 18:09:26

标签: php mongodb

虽然MongoDB不需要任何固定模式,但有时我们希望从一个结构迁移到另一个结构。

我最近正在处理一个小数据集(~200K),并决定循环现有数据,转换数据模型并插入新集合。事实证明我们的vps并不那么强大,使用php驱动程序我只能在确保跟随后达到约300插入/秒:

  • 插入前没有索引。
  • 尽可能使用批量插入。

我想知道我是否只选择了错误的迁移路径,或者在MongoDB中处理架构更改时是否有一些最佳实践?


在收到一些建议后,我在迁移过程中将写入问题更改为0,这就是我所观察到的:

  • 插入仍然没有预期的那么快,最大值为~500插入/秒
  • 插入完成后,索引会非常快速地进行,可能是因为ensureIndex w=0与{{1}}一起消失了?
  • 剩下的更新需要一段时间才能启动,可能是由于索引操作阻塞了?然后它似乎以不同的速度运行(之前它一直运行得更慢),再次可能正在进行索引。
  • CPU和IO很好。 cpu大部分都有大约90%的闲置,IO等待不到10%。

除了不使用我们的PHP ORM进行迁移之外,还有更多优化的可能性吗?

1 个答案:

答案 0 :(得分:1)

传输和序列化所有与PHP客户端之间的内容可能会增加很多开销。从shell运行迁移将是最快的。使用update撰写或使用带有forEach的光标进行迭代并拨打save

请参阅使用游标MongoDB update multiple records of array的示例(底部)。

了解游标的snapshot问题。如果集合没有分片,可能需要幂等更新或使用快照。