- PR -

Javaによるサーバ間ファイル同期について

投稿者投稿内容
Bob
会議室デビュー日: 2006/11/28
投稿数: 16
投稿日時: 2007-10-17 14:12
お世話になります。

現在、サーバAとサーバBの二つのサーバ間でファイル同期を
とろうと考えています。
両サーバともWindowsServer2003です。

今、サーバAとサーバBのディレクトリ間のファイルの差分を抽出
する方法で悩んでいます。(ファイルの中身まで比較する必要はな
く、ファイル名のみで比較して抽出すればよいです。)

具体的には以下の手順で行おうと考えています。
1.サーバAでサーバBをネットワークドライブに割り当てる。
2.JavaによりサーバAのディレクトリ内にあるファイルのファ
  イル名をサーバBのディレクトリのファイル名と1個1個比較
  して一致しないものを一覧として保持。
3.2.で保持したものをFTPで転送。

2の処理ではファイルが多くなると当然処理時間が長くなります。
2の処理でもっと効率的なアルゴリズムはないでしょうか?
できれば差分抽出はツールなどは使わずにプログラムで行いたい
と思っています。

以上、宜しくお願いいたします。

mio
ぬし
会議室デビュー日: 2005/08/25
投稿数: 734
お住まい・勤務地: 神奈川県
投稿日時: 2007-10-17 14:24
JNIでWin32APIを使ってフォルダを監視して、イベント起動にできませんかね。
Error401
常連さん
会議室デビュー日: 2007/03/12
投稿数: 39
投稿日時: 2007-10-17 14:45
両方のディレクトリに存在するファイル名でHashMapAとHashMapBを作って、
HashMapAの全ての要素についてそれがHashMapBに存在するかどうかチェックして、
あればHashMapAとHashMapBからその要素を削除する。
これでHashMapA,Bには、それぞれにしか存在しないファイルが残る。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-10-17 14:46
比較処理中に変更が行われる可能性は除外して考えていいんでしょうか?

OS側の更新日情報が信用できるなら前回の同期時間以後に
変更されたファイルだけ見ればいいようにも思いますけども。
Anthyhime
ぬし
会議室デビュー日: 2002/09/10
投稿数: 437
投稿日時: 2007-10-17 15:25
ファイルシステムのアーカイブビッドを利用すればよいかと。
deanna
大ベテラン
会議室デビュー日: 2004/08/23
投稿数: 118
投稿日時: 2007-10-17 15:49
Windows Serverの機能のファイル複製サービスではだめなのですか?
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-10-17 15:49
ファイルシステム内のエントリの列挙なんて、ファイル数が多くても、
転送時間に比べればコスト的に知れていると思うのですが。
Ray
ベテラン
会議室デビュー日: 2007/09/13
投稿数: 88
投稿日時: 2007-10-18 04:20
ファイル共有しなくてもFTP中で比較した方が簡単では。

検索したらjava版のrsyncがあるようなので、それを使えば終了かも。私はjava版を使ったことないですが。

サーバAとサーバBが遠隔地にあって、夜間バッチで同期する。
ファイルは蓄積型(編集されずに増えていくだけ)。
そういうイメージですかね。

スキルアップ/キャリアアップ(JOB@IT)