私のデバイス(デスクトップ、ノート、スマートフォン)間で自動的にファイルを同期できるJavaでアプリケーションを書くことについては疑問に思っています。 Dropboxと似ていますが、サードパーティ製のサーバがない場合は、自分で所有しているためです。ファイル/ディレクトリ同期アルゴリズム
ネットで検索すると、そのようなプログラムで使用されている同期アルゴリズムについての有益なトピックは見つかりませんでした。私は、この問題はリビジョン管理に似ているという事実を考慮すると、簡単な問題ではないと思います。そのため、私はそれをリラックスさせることを考えています。例えば。私は(まだ)ファイル内の変更のためのデータ転送で最適化を実装したくないので、変更されたファイル全体を転送することは大丈夫です。また、システムが異なるファイルバージョン間で手動で競合を解決するかどうか尋ねる場合は、私にとっては問題ありません。
私の最大の問題は、ネットワーク通信です。どのようにスレーブクライアントはファイルの変更について私の中央ストレージサーバに問い合わせるべきですか?私は定期的にメタデータを持つファイルリスト全体をサーバーに転送するのは良い考えではないと思います。限り、Dropboxが起動時に共有フォルダ全体をチェックすると、どういうわけかローカルファイルシステムの変更が通知されます(たとえば、Java7にはファイルシステムの変更イベントを聴く方法があります。たとえば、Java7にはWatchService
クラスがあります)。ネットワーク同期イベントを待ち受けます。私はそれをやっているバージョン管理システムのようなファイルのリビジョンを維持すべきか、それとも他の解決策がありますか?
この件に関する書籍やオンライン資料はありますか?
SVN _stores_デルタを考えると、私はそれも同様に転送すると思います。 –
私はSVNを多用していますので多分それが最良の選択でしょう。しかし、私はSVNの内部の仕組みを理解するのはちょっと残念です。私はそれを試してみましょう。私はSVNKitがSVNの純粋なJavaの実装であることを知らなかった、私はそれが単なるネイティブバイナリのラッパーだと思った。 たとえば、rsyncはオプションではありません。アンドロイド。また、それはCで書かれていて、私はCでうまくいきません。 – NagyI
@ X-Zero、そうです。それは、SVNブックに従ってデルタを転送します。Git:-Pよりもはるかに遅いので、わからなかった。 –