couchbase golang json原子增量

时间:2015-06-01 21:45:18

标签: java python node.js go couchbase

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

例如,我有一个下面的结构,其中包含两个与文档D1

相关联的字段
type Counter struct {
        c1 string `json:"c1"`
        c2 string `json:"c2"`
}

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

1 个答案:

答案 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?