2017-06-30 5 views
0

私は重複として私をマークする前に、私は非常に具体的な制約の下で働いています:私の2つのデータファイルは、同じシステムにありません(完全なファイルは遠隔です)、最終目標は絶対最小データを転送することです高価な!)。リモートマシンはrsyncをサポートし、ftpサーバーを実行します。不完全なデータファイルのみを転送して、完全なファイルから不完全なデータファイルを更新するにはどうすればよいですか?

GPS受信機は、位置データをリアルタイム(たとえば1Hz)で記録します。記録すると、データはリアルタイムでログファイルrealtime.logに転送されます。しかし、時にはシステムが壊れ、一部のデータがリアルタイムログファイルに転送されないことがあります。 1時間の終わりに、受信者は新しいログファイルhourly.logを作成し、その完全なファイルを転送します。問題は、hourly.logのデータの多くが冗長であり、バイトが転送に費用がかかることです。私はローカルのリアルタイムログファイルに(完全なデータで)リモートの時間別ログファイルを比較し、欠落しているデータのみを転送する方法が必要です。データがrealtime.logにある場合は、常にhourly.logにもなるとします。例えば

realtime.logが含まれているとします。私はポイント2、3のためにデータを転送することなくhourly.logと同等であるrealtime.logを更新したい

2 
3 
5 

hourly.log

1 
2 
3 
4 
5 
6 

が含まれており、 5.これは可能ですか?

EDIT:(各行が独自のファイルであるかのように、一種の)私は本当にラインで2つのファイルの行を比較するrsyncを強制する方法を探していているようですし、唯一の新しいある行を転送したり、かわった。

+0

データの順序は重要ですか? Realtime.logは更新後に '2 3 5 1 4 6'になることがありますか? –

+0

realtime.logから行ヘッダーを取り出し、必要な情報を解析するスクリプトまたは関数を持つことができますか?そのスクリプト/関数で返される別のファイルを作成できますか?そのようにして、2、3、5のうちのフィルタリングは、ネットワーク上ではなくリモートマシン上で行われます。 –

+0

@PriyanshAgrawal注文は関係ありません。数値が抽象的なタイムスタンプであり、後で並べ替えることができるとします。 – medley56

答えて

0

ローカルファイルでリモートファイルを差分し、diffの出力をローカルファイルにリダイレクトします。

+0

この解決策の問題は、diffの出力が実際にはかなり大きく、それを前後に送信することが目的を破ることです。 – medley56

+0

Oh ok @ medley56。あなたはそれがどのように解決できると思いますか? –

+0

私はいくつかのrsync実験を実行しました。rsyncが送信する "デルタ"ファイルがあれば、オーバーヘッドはほとんどありません。私が発見したのは、rsyncが特定のサイズ以下のファイルを常にコピーするようだということです。しかし、ファイルサイズがdelta xfer algoオーバーヘッドを追い越すとすぐに、diffを実行し、欠落したデータのみを転送します。 – medley56

関連する問題