2010-10-24 208 views
17

我需要將我的Android SQLite數據庫與我的雲服務器數據庫同步,並在多用戶環境中以雙向方式進行。android sqlite雙向同步sqlite

我發現並介紹瞭解決方案here,但我想了解更好的解決方案/算法。

回答

1

我建議將db文件發送到您的服務器,並在服務器端進行合併。然後根據需要將合併的數據庫發送回客戶端。 您的解決方案將根據衝突解決算法和數據庫架構而有所不同。但這裏是最簡單的例子:

sqlite> attach 'client.db3' as ClientDBtoMerge;   
sqlite> insert into TableName select * from ClientDBtoMerge.TableName; 
sqlite> detach database ClientDBtoMerge; 

希望你能夠修改雙向合併的例子。

+0

可能是monouser環境中備份的解決方案。但對於多用戶不可以。不管怎麼說,還是要謝謝你。 – Juanin 2010-10-27 09:39:48

+1

爲什麼不呢?您可以在服務器上擁有主數據庫,並可以逐個請求或全部合併。或者你需要數據庫之間的實時同步?如果你正在談論複製,這是不可能的,因爲你需要所有客戶端電話的100%在線時間。 – cement 2010-10-27 09:50:37

6

您可以使用Oracle數據庫作爲您的服務器端數據庫嗎?

如果是這樣,您應該考慮Oracle數據庫精簡版,它包含一個與SQLite和Android兼容的完全同步解決方案,並且是爲多用戶環境設計的。

它支持自動同步,高級衝突解決方案和多個同步模型。它還支持從中央管理控制檯部署和管理應用程序,甚至支持設備管理。

你可以閱讀更多關於它在這裏: http://www.oracle.com/technetwork/database/database-lite/overview/index.html

此外,您還可以在下載選項卡上單擊嘗試一下自己。

埃裏克

+0

謝謝埃裏克,但我通過Ubuntu使用PostgreSQL。 Oracle對於這個項目來說太貴了。 – Juanin 2011-02-02 21:24:55

+0

好的。無論如何,祝你的項目順利! – 2011-02-07 18:28:24

0

另一種選擇是使用litesync

它是SQLite庫的修改來實現同步。

採用星型拓撲結構,我們打開使用修改的URI的服務器作爲主節點的數據庫,如:

"file:/path/to/app.db?node=primary&bind=tcp://0.0.0.0:port" 

而且在移動設備上,我們使用打開本地數據庫:

"file:/path/to/app.db?node=secondary&connect=tcp://server:port" 

第一次在設備(和在線)中打開應用程序時,它將下載數據庫的全新副本,從那時起,即使設備處於脫機狀態,我們也可以寫入本地數據庫。當設備再次聯機時,新的事務將會同步。