Couchbase 视图一致性
Couchbase View Consistency
以下代码保证任何给定的文档都将以持久的方式保存到 Couchbase 集群中的活动节点,并复制到 1 个附加节点:
cas, err := myBucket.UpsertDura(docToStore, valueToStore, 1, 1)
鉴于 Couchbase 视图最终是一致的,在编写文档后调用视图(确保文档出现在视图中)时保证一致性方面,我似乎有 2 个选项:
选项 1
将上述代码中的replicateTo
值更改为等于集群中附加节点的总数(减去活动节点),确保每个节点都包含文档的副本:
cas, err := myBucket.UpsertDura(docToStore, valueToStore, 3, 4)
选项 2
使用标准 Upsert
函数保存文档,但调用 stale-mode
设置为 after-update
的视图
_, err := bucket.Upsert(myID, &myDoc, 0)
vq := gocb.NewViewQuery("doc", "view").Stale(gocb.StaleMode(1))
err = bucket.ExecuteViewQuery(vq)
有没有其他方法可以以最高效的方式实现这一点?本质上,我希望文档在保存后立即出现在所有相关视图中。
您需要将过时模式设置为 false。如果设置了 stale=ok,Couchbase 将不会刷新视图,即使它是陈旧的。这样做的好处是改进了查询延迟。如果设置了 stale=update_after,Couchbase 将在 returned 过时结果后更新视图。如果设置了 stale=false,Couchbase 将刷新视图并 return 您最新的结果。
以下代码保证任何给定的文档都将以持久的方式保存到 Couchbase 集群中的活动节点,并复制到 1 个附加节点:
cas, err := myBucket.UpsertDura(docToStore, valueToStore, 1, 1)
鉴于 Couchbase 视图最终是一致的,在编写文档后调用视图(确保文档出现在视图中)时保证一致性方面,我似乎有 2 个选项:
选项 1
将上述代码中的replicateTo
值更改为等于集群中附加节点的总数(减去活动节点),确保每个节点都包含文档的副本:
cas, err := myBucket.UpsertDura(docToStore, valueToStore, 3, 4)
选项 2
使用标准 Upsert
函数保存文档,但调用 stale-mode
设置为 after-update
_, err := bucket.Upsert(myID, &myDoc, 0)
vq := gocb.NewViewQuery("doc", "view").Stale(gocb.StaleMode(1))
err = bucket.ExecuteViewQuery(vq)
有没有其他方法可以以最高效的方式实现这一点?本质上,我希望文档在保存后立即出现在所有相关视图中。
您需要将过时模式设置为 false。如果设置了 stale=ok,Couchbase 将不会刷新视图,即使它是陈旧的。这样做的好处是改进了查询延迟。如果设置了 stale=update_after,Couchbase 将在 returned 过时结果后更新视图。如果设置了 stale=false,Couchbase 将刷新视图并 return 您最新的结果。