在 couchbase 中迁移文档的正确方法 (API 1.4.x -> 2.0.x)
Proper way to migrate documents in couchbase (API 1.4.x -> 2.0.x)
我想将通过 API 1.4.10 保存在 couchbase 中的文档迁移到 API 2.0.5 提供的新文档,例如 JsonDocument。我发现可以向 Bucket 添加自定义转码器,因此在解码文档时我可以检查标志并决定我应该使用哪个转码器。但在我看来,这不是很好的解决方案。还有其他方法可以正确地做到这一点吗?谢谢
迁移只能在运行时应用户请求完成,因为文档太多,我们无法在后台一次迁移它们。
您不需要使用自定义代码转换器来读取使用 1.x SDK 创建的文档。相反,使用 LegacyDocument
类型来读取(和写入)旧格式的文档。
更重要的是,您不应该 运行 在数据库中长期混合使用旧文档和新文档。提供 LegacyDocument
类型是为了方便从旧格式迁移到新 SDK。在这种情况下,最佳做法是部署应用程序的中间版本,该版本尝试读取一种格式的文档,然后再尝试以另一种格式读取它们。 Legacy to new or vice versa,取决于哪种类型的文档首先被更频繁地访问。部署中间版本后,您应该 运行 一个后台任务,该任务将读取所有文档并将其从旧格式转换为新格式。这非常简单:您只需尝试将文档读取为 LegacyDocument
,如果成功,您可以使用之前获得的 CAS 值将文档存储为 JsonDocument
。如果您无法将文档视为遗留文档,那么它已经采用了新格式。该任务应该受到足够的限制,以免导致数据库负载大幅增加。任务完成后,从应用程序中删除回退代码,然后将所有内容读写为 JsonDocument
。
您提到文件太多 - 那是多少?我们已经通过这种方式成功迁移了包含数十亿文档的数据集。诚然,这花了几天时间 运行。如果您的数据库大于此,或者驻留率非常低,则尝试转换所有文档可能不切实际。
我想将通过 API 1.4.10 保存在 couchbase 中的文档迁移到 API 2.0.5 提供的新文档,例如 JsonDocument。我发现可以向 Bucket 添加自定义转码器,因此在解码文档时我可以检查标志并决定我应该使用哪个转码器。但在我看来,这不是很好的解决方案。还有其他方法可以正确地做到这一点吗?谢谢
迁移只能在运行时应用户请求完成,因为文档太多,我们无法在后台一次迁移它们。
您不需要使用自定义代码转换器来读取使用 1.x SDK 创建的文档。相反,使用 LegacyDocument
类型来读取(和写入)旧格式的文档。
更重要的是,您不应该 运行 在数据库中长期混合使用旧文档和新文档。提供 LegacyDocument
类型是为了方便从旧格式迁移到新 SDK。在这种情况下,最佳做法是部署应用程序的中间版本,该版本尝试读取一种格式的文档,然后再尝试以另一种格式读取它们。 Legacy to new or vice versa,取决于哪种类型的文档首先被更频繁地访问。部署中间版本后,您应该 运行 一个后台任务,该任务将读取所有文档并将其从旧格式转换为新格式。这非常简单:您只需尝试将文档读取为 LegacyDocument
,如果成功,您可以使用之前获得的 CAS 值将文档存储为 JsonDocument
。如果您无法将文档视为遗留文档,那么它已经采用了新格式。该任务应该受到足够的限制,以免导致数据库负载大幅增加。任务完成后,从应用程序中删除回退代码,然后将所有内容读写为 JsonDocument
。
您提到文件太多 - 那是多少?我们已经通过这种方式成功迁移了包含数十亿文档的数据集。诚然,这花了几天时间 运行。如果您的数据库大于此,或者驻留率非常低,则尝试转换所有文档可能不切实际。