- - PR -
Javaによるサーバ間ファイル同期について
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2007-10-18 08:33
(以下、アルゴリズム的なことだけにふれ、ファイル同期自体についてはふれないこととします。) アルゴリズム的には、マージソートと同様のことをするのが、コストが少なくて良いと思います。 http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%BC%E3%82%B8%E3%82%BD%E3%83%BC%E3%83%88 すなわち、サーバAとサーバBのそれぞれのファイル名を一旦ソートしておいて、両者をマージするようなこと(マージする手前まで)をやろうとすれば、おのずと差分を抽出できます。 ただ、CPUのクロックがGHz単位で、メモリーがGB単位で、スクラッチプログラミングがほとんどの現在、あまり細かいことに拘らなくても単純にファイルひとつごとリニアサーチしても「遅い」と言われることはまずないでしょう。 いや、でも本当は拘るべきですけど。 -- unibon {B73D0144-CD2A-11DA-8E06-0050DA15BC86} | ||||
|
投稿日時: 2007-10-18 12:50
うーん、そこまで拘るのはやりすぎかと。 お手軽にやるなら、それぞれのファイル名をHashSetに入れてremoveAll()を呼べば一発ですよね。 | ||||
|
投稿日時: 2007-10-18 23:22
普通に考えれば1と3はネットワークの処理ですが、2はメモリ内の処理なので比べ物にならないぐらい高速です。2がボトルネックになるとは考えにくいです。 具体的に、ファイル数はどれぐらいなのでしょう? また、実際に試してみて「2が遅い」ことが問題になっているのでしょうか? | ||||
|
投稿日時: 2007-10-19 09:33
>具体的に、ファイル数はどれぐらいなのでしょう?
現在、一つのフォルダに2000程度で今後どんどん増えていきます。 しかも比較するフォルダは一つだけではなく、40個以上のフォルダ を比較していかなければいけません。 >また、実際に試してみて「2が遅い」ことが問題になっているのでしょうか? 2の処理が異常に遅いことは実証済みです。 しかし、HashMapを利用したアルゴリズムを適用したところ かなり改善されました。 たくさんのご返答どうも有難うございました。 皆様のご意見を参考にして検討させていただきます。 |