是否有一个golang API,类似于在其他couchbase SDK中可用的计数器,这将有助于我们以原子方式递增json文档中的某些字段?

例如,我有一个下面的结构,其中有两个字段将与文档D1关联

type Counter struct {
        c1 string `json:"c1"`
        c2 string `json:"c2"`
}

对于每个传入的http请求,我想对c1和c2进行原子增量。由于它位于json文档中,因此无法使用GET且不确定如何使用golang使用计数器方法。

最佳答案

在文档中不可能有原子计数器,您有两个选择可解决此问题:

1)让您的文档引用单独的原子计数器,而不是持有计数器值,它们只会持有指向计数器的键。类似于下面的json,如果您检索了文档,则要使用计数器,可以使用“counter_key”中的值。

{
  "id": "customer::1343"
  "name": "John Smith",
  "counter_key": "counter::customer::1343"
}

2)您的第二个选择是将字段保留在要增加的Json文档中,为了能够自动更新该字段,您需要查看CAS,这是一种乐观锁定形式,可让您更新值在实际文档中而不是拥有一个单独的计数器,此方法的确增加了额外的编码开销,并且不会像单独的计数器那样具有高性能。您可以在此处了解有关CAS的更多信息:http://docs.couchbase.com/developer/dev-guide-3.0/retrieve-by-cas.html

在此处的Stack Overflow上,还有一个关于Couchbase CAS的简洁描述:What is CAS in nosql and how to use it?

07-24 09:38
查看更多