复制 CosmosDB 集合并按物理分区保留项目顺序的最有效方法是什么?

What is the most efficient way to copy a CosmosDB collection and retain the order of items by physical partition?

我使用 Azure 数据工厂尝试了许多不同的组合来创建 CosmosDB 集合的克隆,该集合维护写入分区的项目顺序,但除非我指定批量写入大小为 1,否则它不会保持命令。即使从映射数据流中源的更改提要触发也不会保留顺序。我们写了一个简单的工具,一次复制一条记录,但显然,那很慢。

我们将 Cosmos 用作事件存储,更改源处理器为我们的投影仪提供数据——一切都运行良好,但我们想将事件复制到不同的环境以测试更改。这需要保留原始写入顺序。

提前致谢。

更改源处理器确实按 _ts 顺序从每个物理分区读取。

当然,我已经能够使用它在几个小时内成功复制非常大的集合(> 1TB)。

为此,我使用了一个跨多个实例扩展的函数应用程序,确保租约集合有足够的最大 RU 配置,不会成为瓶颈,并且在配置目标时扩展 RU 足以创建所需数量的预先创建物理分区,而不是在导入期间拆分分区。

虽然我一直使用批量插入,但在更改源处理器交付的每个批次中,我猜 _ts 可能会变得混乱。这对我来说从来都不重要。

将集合复制到新集合并保留 _ts 顺序的最有效方法当然是恢复备份。

它的另一个好处是您无需编写任何代码和提供任何资源即可完成此操作。如果您还没有使用连续备份模型,您应该考虑切换到它,因为这允许恢复是自助服务并恢复到指定的时间点。

获得一个像 cerebrata 这样的工具,它会在你认为合适的时候在集合之间进行复制等,如果你正在做大量的 Azure 工作,特别是使用 CosmosDB,它是一个非常方便使用的工具,没有它我活不下去这些天.

免责声明:我不为 cerebrata 工作,也没有因为推荐他们的工具而获得任何好处,这完全是基于我自己的经验。