是否有一个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?