2012-11-08 25 views
4

是否有可能在服務器上使用Android上的SQLite和NoSQL數據庫(如MongoDB),並在兩者之間進行雙向數據複製/同步?或者最好是兩端都使用SQL,或者兩端都使用SQL,但不能混合使用?Android和MongoDB上的SQLite同步

+2

不同數據庫(例如SQLite和MongoDB)之間的雙向數據複製/同步可能是您必須自行開發的解決方案。數據同步的實際用例是什麼?如果Android和服務器上的相同數據發生更改,則完全雙向複製需要某種形式的衝突解決方案。也許您正在考慮一種緩存策略,用戶可以在脫機狀態下在其Android設備上進行更改/查詢,然後在聯機時與服務器同步數據? – Stennie

+0

是的,最初它將是單一設備和服務器之間的緩存策略,只能在設備上修改數據,而不能在服務器上修改數據。所以,本質上,服務器將是一個備份。最終,我會想同步多個設備,這些設備都可以訪問和修改共享數據。這很可能在衝突解決將變得至關重要時。考慮Martin Fowler的事件採購模式。從來沒有嘗試過這種事情,我擔心由於SQL - > NoSQL不匹配而導致的潛在問題。 –

回答

3

有幾種不同的方法來考慮:

1)使用在Android +服務器都實現了多主或MVCC(多版本併發控制)運行一個數據庫產品。 MVCC wikipedia page上有一些例子,CouchDB是一個常用的解決方案。有一個TouchDB-Android端口,它已經過優化,可在Android上運行並支持複製到CouchDB。

2)您的要求可能很簡單(或獨特),足以保證您自己的解決方案。常見的解決方案是在Android上使用SQLite,並通過(可能是RESTful)API將信息同步到遠程服務器。

在移動設備和服務器上使用相同的數據庫解決方案並不重要,但使用類似的模式和查詢語言可能會讓您更加安心。

+0

也值得關注[PouchDB](http://pouchdb.com/),它是一個實現CouchDB API的JavaScript庫。 PouchDB旨在保存更改,而Internet訪問處於脫機狀態,然後在線時與CouchDB服務器同步。目前(2013年5月),這仍處於「預覽版」發佈階段,但一般方法非常有前途。 – Stennie

2

你可能想看看SymmetricDS,我沒有用過它,但我正在考慮它。

它目前允許Android上的SQLite數據庫同步到mongoDB後端,但目前不在其他方向。顯然,您可以將必要的同步數據創建到中間同步數據庫中,以便它可以返回到SQLite數據庫。

這裏還有一個iOS版本。

它有一個GPL許可證,所以如果你在商業上使用它,你需要支付(除非你的應用程序是開源的)。