是否存在类似于其他couchbase SDK中的计数器的golang API,它将帮助我们以原子方式递增json文档中的某些字段?
例如,我有一个下面的结构,其中包含两个与文档D1
相关联的字段type Counter struct {
c1 string `json:"c1"`
c2 string `json:"c2"`
}
对于每个进入的http请求,我想做一个c1和c2的原子增量。因为它在json文档中,我无法使用GET并且不确定如何使用golang使用计数器方法。
答案 0 :(得分:0)
在文档中不可能有原子计数器,您有两种方法可以解决这个问题:
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?