我有一些字符串,我將隨時間連接到一個基於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