0

我想将通过 API 1.4.10 保存在沙发库中的文档迁移到 API 2.0.5 提供的新文档,例如 JsonDocument。我发现可以将自定义转码器添加到 Bucket,因此在解码文档时我可以检查标志并决定我应该使用哪个转码器。但在我看来,这不是一个很好的解决方案。还有其他方法可以以适当的方式做到这一点吗?谢谢。

迁移只能在运行时根据用户请求进行,因为文档太多,我们无法在后台一次全部迁移。

4

1 回答 1

0

您无需使用自定义转码器即可读取使用 1.x SDK 创建的文档。相反,使用该LegacyDocument类型以旧格式读取(和写入)文档。

更重要的是,您不应该长时间在数据库中混合使用旧文档和新文档。提供该LegacyDocument类型是为了方便从旧格式迁移到新 SDK。在这种情况下,最佳实践是部署应用程序的中间版本,该版本尝试以一种格式读取文档,然后再尝试以另一种格式读取它们。旧版到新版,反之亦然,具体取决于最初更频繁地访问哪种类型的文档。部署中间版本后,您应该运行一个后台任务,该任务将读取所有文档并将其从旧格式转换为新格式。这非常简单:您只需尝试将文档读取为LegacyDocument,如果成功,您将文档直接存储为JsonDocument使用您之前获得的 CAS 值。如果您无法将文档作为旧版阅读,那么它已经采用新格式。该任务应该受到足够的限制,以免导致数据库负载大幅增加。任务完成后,从应用程序中删除后备代码,然后将所有内容读取和写入JsonDocument.

你提到有太多的文件 - 那是多少?我们已经通过这种方式成功迁移了包含数十亿个文档的数据集。诚然,这需要几天时间才能运行。如果您有一个比这更大的数据库,或者具有非常低的驻留率,那么尝试转换所有文档可能不切实际。

于 2016-04-06T17:53:56.850 回答