【问题标题】:Versioning of Documents in CouchbaseCouchbase 中的文档版本控制
【发布时间】:2020-04-29 13:20:41
【问题描述】:

我们希望将元数据中的版本信息添加到 Couchbase 中的所有文档中。

为什么? 由于我们的 Entity 对象在不断发展,我们希望在不破坏数据服务的情况下实现以下目标:

  1. 获取所有 v1 版本的书籍
  2. 获取所有 v2 版本的书籍
  3. 将 v1 的所有书籍更新到 v2(通过脚本)

通过这种方式,我们可以为不同的消费者支持多个文档版本。

实现这一目标的最理想方法是什么?如何以可以根据版本查询 Couchbase 的方式存储文档?

【问题讨论】:

  • 这些版本(v1 和 v2)是同一本书吗?
  • @Hemant 是的。它们是相同的文档类型。但是,不同版本的字段略有不同。

标签: spring-boot couchbase versioning n1ql spring-data-couchbase


【解决方案1】:

我不是 Java 开发人员,所以我不了解您在 Spring 中使用的所有限制,但您是否考虑过向文档添加“版本”属性?

book::0001
{
   "title" : "Moby Dick",
   "version" : 1
}

然后

book::0002
{
   "title" : "Gone Whalin'",
   "isbn10" : "1492966851",
   "version" : 2
}

【讨论】:

  • 是的,我们有。但是,要检索它,我们可能必须配置二级索引来优化它。有什么方法可以将其保存在属性等元数据中并自动从 book-data-v1 和 book-data-v2 检索不同的版本?
  • 无论何时你想“获取所有”(例如“获取所有版本 v1 的书籍”),那么无论如何你都需要一个 n1ql 查询。但唯一可以使用 XATTRS (docs.couchbase.com/java-sdk/3.0/concept-docs/xattr.html) 的元数据,但不能使用 N1QL 访问那些元数据
  • 谢谢。你知道如何使用 Spring Data 修改 xattr 吗?我们正在使用 Spring Data Reactive Couchbase 库连接到 Couchbase。
【解决方案2】:

对于 couchbase 文档中的版本而言,乐观锁定Plesae have a look here. 还有一件更重要的事情是我们不能修改它自己处理的这个版本。

您可以轻松处理 spring data couchbase。如果您需要更多详细信息的示例,请告诉我。

【讨论】:

    猜你喜欢
    • 2015-01-11
    • 1970-01-01
    • 1970-01-01
    • 2021-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-12
    相关资源
    最近更新 更多