2016-10-02 105 views
1

我目前正在爲我的Go Actor實現EventSourcing。 我現在面臨的問題是,當一名演員重新啓動並需要從事件日誌中重播所有狀態時,該查詢可能會返回不一致的數據。 我知道我可以用MutationTokenConsISntent N1QL查詢Couchbase GOCB sdk

但是,如果我這樣做,我將被迫按順序編寫所有事件,即最後寫入最後一個事件。

這樣,最後一個事件的變異標記就足以獲得特定演員的所有數據。

然而,這是非常緩慢的,按順序寫約10 000個事件,我的設置大約需要5秒。

如果我改寫這些10 000異步,使用go例程,我可以在不到一秒內寫入所有數據。 但是,然後寫入是不確定的順序,我可以知道我可以信任哪個變化標記。 例如事件999可能會在事件843之前寫入,因爲要執行例行調度AFAIK。

我在這裏有什麼選擇?

回答

1

從技術上講,MutationToken和異步操作不是互斥的。它可以在不改變客戶端的情況下完成(我不確定),但這裏的關鍵是獲取所有的MutationToken響應,然後用每個vbucket的最高數量查詢所有這些響應。

這裏的關鍵是給定一個MutationToken,你可以添加其他人。我沒有直接看到這樣做的方式,但是由於內部它只是一張地圖,它應該是相對簡單的,我相信我們(Couchbase)會做出這樣的貢獻。在最底層,它只是一個vbucket序列的地圖,在查詢發佈時提供給查詢。