2011-09-19 93 views
5

我正在尋找一種方法來複制一個小而簡單的關係數據庫(如SQLite)跨同級。這應該在網絡連接不穩定的環境中工作,因此每個對等體都需要擁有完整的數據庫副本。這應該允許對等方在網絡故障的情況下繼續脫機工作。SQLite數據庫的點對點複製

爲了簡單起見,複製應該只需要支持添加數據的複製,即只有INSERT,而不是DELETE或UPDATE。

有沒有人知道一個很好的 - 而且最理想的是跨平臺的 - 創建這樣一個系統的技術或方法?我目前正在研究JXTA和JXSE,但是在Oracle接管Sun之後,我的社區變得越來越複雜和缺乏生活。

謝謝! Frans

回答

0

如果您不喜歡JXTA,您可能想要爲通信層探索JGroups。對於複製,我認爲你將不得不實現你自己的代碼。

+0

謝謝!我會看看Jgroups。我知道我需要自己編寫複製代碼。使用JXTA可能是相同的。這似乎比有效的P2P通信要複雜得多。 – user952460

0

我正在做類似的工作(儘管代碼遠沒有準備好)。我會稍微介紹一下我的預期方法,但是否適合您,取決於您需要考慮的一些關鍵設計點。不幸的是,我不知道有任何現成的項目會這樣做。

  • 特別是,我們需要知道您希望使用哪種語言,或者您希望避免使用哪種語言。
  • 此外,請考慮您打算如何執行peer dicovery - 您可以手動設置節點對之間的信任關係,還是希望它們自動發現?
  • 大概所有同行可能會插入數據?

如果你能夠使用PHP,並且開心手動對等節點對,那麼我的方法可能是有趣的。設置一個ORM,如Doctrine,Propel或NotORM,並讓每個節點定期與網絡時間源同步。對於數據庫中的每個新行,抓取數據(在數組或ORM對象中),將其序列化,然後將其推送到與之建立信任關係的所有節點。如果推送失敗,請記下此事件並定期重試(在遠程節點未能應答大量重試之後可能放棄)。

推送可以由創建該行的應用程序啓動,也可以由每臺計算機上可用的任何調度程序調用。推送消息可以是XML,或者爲了簡單起見,可以僅僅是包含新行和任何元數據(例如,保存的時間戳,以便解析來自多個節點的INSERT命令)的POST消息。

如果您的節點沒有靜態IP地址,可以使用動態DNS尋址服務進行註冊,以便每個節點即使IP更改也能與對等方保持聯繫。您也可以考慮添加一個消息簽名系統,以確保節點之間的消息是真實的。

+0

感謝您的提示。至於語言 - 任何語言都可以。我從來沒有編寫PHP代碼,但最重要的是這項工作已經完成。我確實希望自動發現。複製過程不應該要求用戶交互。此外,我想要智能對等行爲,如: *使用所有可用的傳輸方式並在必要時進行切換 *高連接的同級應幫助低連接的同級 *消息的優先級 – user952460

+0

如果您不介意使用非結構化數據庫,你可以嘗試基於CouchDB的[Refuge](http://refuge.io)(我認爲它是用_Erlang_編寫的)。我通過IRC與開發人員聊天,他們的知識和方法可能會成爲你的一個很好的資源 - 我相信他們希望他們的系統也有自動發現功能。我認爲這對他們來說是早期的,但是 - 他們還沒有一個完整的工作原型。 – halfer

+0

順便說一下,我的項目[Meshing](http://blog.jondh.me.uk/meshing/)也處於早期階段,但您可能會發現我的一些寫作感興趣。但是請記住,我不打算實施同行發現 - 對於我想實現的目標,我不認爲我需要它。 – halfer