2016-04-27 48 views
1

我一直在研究Couchbase作爲我們CMS系統的MySQL替代品。 讓我感到困惑的是缺少交易 我們已經在我們的組件上建立了版本 每次編輯器保存一個組件時,前一個保存爲新版本 此外,我們有審計日誌任何操作,所以更新記錄在另一個表中。總而言之,更新涉及將數據寫入至少3個表格 這不是MySQL的問題,因爲以上所有內容都包含在事務中。如果上述失敗之一,交易被中止,沒有任何東西寫入Couchbase作爲CMS持久層

據我所知,Couchbase提供了在單個文檔上完成的操作的原子性。 那麼這個用例如何被couchbase覆蓋?

問候

回答

0

我是很新的Couchbase,但是從我目前瞭解到:在一個單一的文件

  • 操作都是原子。
  • 您可以使用CAS進行樂觀併發。

那麼我想我會建議您:a)將數據建模爲JSON文檔,並b)使用CAS確保沒有其他人修改了文檔。

不知道用什麼語言/ SDK你使用,但這裏的使用.NET SDK CAS的一個例子:http://developer.couchbase.com/documentation/server/4.0/sdks/dotnet-2.2/check-and-swap.html

+1

嗨,對於遲到的回覆感到抱歉。這兩點都是有效的,並且已經考慮過了,但是它們似乎並沒有解決在1個「交易」中創建/更新多個文檔的問題。 – Thomas

+0

這是一個很好的問題。我對Couchbase仍然很陌生,所以我會試着找出更多。這裏有一些信息,但它似乎仍然可能有一個更簡單的方法:http://docs.couchbase.com/developer/dev-guide-3.0/transactional-logic.html –

1

你描述不一定需要事務邏輯的要求。只需將新版本作爲帶有新版本號或時間戳的文檔插入,即可在不接觸以前版本的情況下添加新版本的內容。當前文檔是具有最高版本號或時間戳的文檔,可以使用CB視圖輕鬆檢索。任何其他日誌記錄表都是多餘的,可以通過原始數據的適當視圖來替換。對於獨特的版本號,CB提供http://developer.couchbase.com/documentation/server/current/developer-guide/counters.html中描述的原子計數器的概念。

當然,可能還有其他要求使交易成爲必要。書http://www.apress.com/9781430266136在第124至133頁描述了一種實現交易的方法。我想知道爲什麼CB開發人員看起來有可能沒有將這種功能集成到他們的產品中。

所以本質是:

  • 嘗試,如果你有機會沒有交易的事情。

  • 如果您真的需要它們,請檢查引用的方法是否適合您。