我需要將我的Android SQLite數據庫與我的雲服務器數據庫同步,並在多用戶環境中以雙向方式進行。android sqlite雙向同步sqlite
我發現並介紹瞭解決方案here,但我想了解更好的解決方案/算法。
我需要將我的Android SQLite數據庫與我的雲服務器數據庫同步,並在多用戶環境中以雙向方式進行。android sqlite雙向同步sqlite
我發現並介紹瞭解決方案here,但我想了解更好的解決方案/算法。
我建議將db文件發送到您的服務器,並在服務器端進行合併。然後根據需要將合併的數據庫發送回客戶端。 您的解決方案將根據衝突解決算法和數據庫架構而有所不同。但這裏是最簡單的例子:
sqlite> attach 'client.db3' as ClientDBtoMerge;
sqlite> insert into TableName select * from ClientDBtoMerge.TableName;
sqlite> detach database ClientDBtoMerge;
希望你能夠修改雙向合併的例子。
您可以使用Oracle數據庫作爲您的服務器端數據庫嗎?
如果是這樣,您應該考慮Oracle數據庫精簡版,它包含一個與SQLite和Android兼容的完全同步解決方案,並且是爲多用戶環境設計的。
它支持自動同步,高級衝突解決方案和多個同步模型。它還支持從中央管理控制檯部署和管理應用程序,甚至支持設備管理。
你可以閱讀更多關於它在這裏: http://www.oracle.com/technetwork/database/database-lite/overview/index.html
此外,您還可以在下載選項卡上單擊嘗試一下自己。
埃裏克
謝謝埃裏克,但我通過Ubuntu使用PostgreSQL。 Oracle對於這個項目來說太貴了。 – Juanin 2011-02-02 21:24:55
好的。無論如何,祝你的項目順利! – 2011-02-07 18:28:24
另一種選擇是使用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"
第一次在設備(和在線)中打開應用程序時,它將下載數據庫的全新副本,從那時起,即使設備處於脫機狀態,我們也可以寫入本地數據庫。當設備再次聯機時,新的事務將會同步。
可能是monouser環境中備份的解決方案。但對於多用戶不可以。不管怎麼說,還是要謝謝你。 – Juanin 2010-10-27 09:39:48
爲什麼不呢?您可以在服務器上擁有主數據庫,並可以逐個請求或全部合併。或者你需要數據庫之間的實時同步?如果你正在談論複製,這是不可能的,因爲你需要所有客戶端電話的100%在線時間。 – cement 2010-10-27 09:50:37