我有一些字符串,我将随时间连接到一个基于couchbase的文档。 我这样做与clojure,代码是非常简单的以json格式在couchbase中存储csv
;create document when new
(cbc/add client key value)
;append when document exists
(c/async-prepend client key (str "," value) (c/get-cas-id client key)
而这一切工作正常。我可以大致勾勒出我要讨论的问题的步骤如下
- 添加值:“1”
- 获取价值:
1
- 追加值”,2"
- 获取价值:
1,2
这工作正常,而且一切都是华丽。但是这个问题并不是真正的预先考虑,而是以一种仍然是有效的json的方式预先考虑了couchbase。因为1,2
不是有效的json,所以couchbase UI会显示base64编码值,或者它有时会显示无效的json(即使从memcache和api返回正确的值)。
From the couchbase forum我了解到这是预期的行为。我真的很想避免这种情况,并以有效的json格式存储值(并追加它们)。
我可以做类似
{ "vals" : [1,2] }
,每次追加到vals
,但现在,如果我追加3
,它会变成是[1,2], 3
这又是不是一个有效的JSON。
我不想获取值,删除结尾括号,添加新值,结束括号并再次保存,因为(1)破坏了追加的目的和(2)文档变得越来越大并且每次读取所有值以添加新值都是无效的。
最后,我的问题在这里归结为两点:
1)它是好离开这个数据是 - 我是从API的获得正确的数据,无论如何,用户界面不能告诉我数据或显示base64编码的数据,所以我不能编辑它..这是唯一的缺点(为什么我要从UI编辑数据?)
2)如果有一种解决方法,是有一种方法可以存储数据,这样每次都可以使json有效,所以它显示在UI和API中。 - 现在这个缺点是文件是更大的,有更多的处理需要获得所需的数据({ "value": [1, 2]}
而不是1,2
)
更不用说我还不知道如何添加更多的值来它!
请指教!
每次写入文档时,都会创建文档的新版本。它不是在磁盘上“追加”,所以对于你的代码来说,每次都不会产生有效的JSON(如果这是你的最终目标)真的没有任何好处。 – WiredPrairie
@WiredPrairie - 你可以扩展吗?即使它正在用新数据重新创建一个新文档,我仍然没有在添加之前获取整个内容,因此事先为我节省了大量计算空间。 – LocustHorde
这不是CouchDB/Base的工作原理。您需要获取整个文档并保存整个文档。我不确定你的意思是“计算”。您可以在重新保存前以任何方式操纵“JSON”字符串(删除几个字符,然后添加新的字符以使其有效)。 – WiredPrairie