2012-10-29 112 views
8

我有興趣使用將長時間(多個小時)從網絡斷開連接的Meteor框架創建應用程序。我相信流星存儲在RAM中的本地數據是一個迷你mongodb js結構。如果用戶關閉瀏覽器或刷新頁面,則所有本地更改都將丟失。如果本地更改持續存在磁盤上(localStorageindexedDB?),那將會很好。 Meteor即將推出的任何機會?斷開的流星應用程序

相關問題...... Meteor如何處理文檔衝突?換句話說,如果2個用戶編輯相同的MongoDB JSON文檔,那麼這個衝突是如何解決的?樂觀鎖定?

回答

4

衝突解決方案是「最後作家獲勝」。

更具體地說,客戶端上的每個MongoDB插入/更新/刪除操作映射到RPC。來自給定客戶端的RPC總是按順序播放。來自不同客戶端的RPC在服務器上進行交織,沒有任何特定的順序保證。

如果客戶端嘗試在斷開連接時發出RPC,則這些RPC將排隊直到客戶端重新連接,然後按順序回放到服務器。當多個客戶端執行脫機RPC時,它們最終在服務器上運行的順序高度依賴於每個客戶端重新連接的時間。

對於一些像MongoDB的$inc$addToSet這樣的離線突變,這個模型運行得很好。但是很多常見的修飾符(如$set)在長時間斷開連接時表現不佳,因爲突變可能會與來自其他客戶端的干預更改相沖突。

因此構建「離線」應用程序不僅僅是堅持本地數據庫。您還需要定義實現某種類型的衝突解決方案的RPC。最終我們希望擁有實現各種解決方案的統包軟件包。

+0

如果meteor可以將OT添加爲一個包(例如sharejs),那麼可以通過更好的方式解決衝突。 – TiansHUo

+0

我很欣賞第二部分的答案..如何在沒有/無線無線的博覽會上使用平板電腦應用程序來收集名稱/電子郵件收藏的用例?在這種情況下,它只是插入一個集合?如何堅持本地存儲,或者甚至需要? –