2

かなり大きなバイナリファイルがいくつかあります (固定長のレコードで、そのレイアウトは別のテキスト ファイルに記述されています)。データ ファイルのサイズは 6 GB にもなります。レイアウト ファイル (COBOL コピーブック) はサイズが小さく、通常は 5 KB 未満です。

すべてのデータ ファイルは GNU/Linux サーバーに集中しています (ただし、メインフレームで生成されています)。

これらのバイナリ ファイルを編集する手段をテスターに​​提供する必要があります。RecordEdit ( http://record-editor.sourceforge.net/ )という無料の製品がありますが、2 つの重大な欠点があります。

  1. テスターは SFTP 経由で巨大なファイルをダウンロードする必要があり、わずかな変更が加えられるたびにもう一度アップロードするだけです。非常に 非効率的です。

  2. ファイル全体を作業メモリにロードし、比較的小さなデータ ファイルを除いてすべてのファイルを役に立たなくします。

私が考えているのは、Java ベースのクライアント/サーバー アーキテクチャです。

  • サーバーは永続的なプロセスを実行し、クライアントからのエディション指向のリクエストをリッスンします。そのようなリクエストには次のようなものが含まれます

    • 利用可能なファイルのリストを返す

    • 編集のために特定のファイルをロックする

    • そのレコードのこのデータを変更する

    • レコードの n ページ目を返す

    など…</p>

  • クライアントは、サーバーにリクエストを送信できる限り、任意の形式 (私の最初の候補であるデスクトップの RCP ベース、同じサーバーのncurses 、中間 Web アプリケーションなど) を取ることができます。

このスキームを実装するために、NIO (バッファがあるため) と MINA (プロトコルの透過性があるため) を調査してきました。ただし、この取り組みをさらに進める前に、専門家の意見を収集したいと思います。

私の問題を組み立てる合理的な方法はありますか?

私が考えている言語とフレームワークを使用してそれを行うことは可能ですか? 便利ですか?

私がやろうとしていることに似ている、または関係しているパターン、青写真、成功例、または進行中のプロジェクトを知っていますか?

4

3 に答える 3

2

私が見ているように、ここで注意が必要なのは、サーバー上のファイルをデコードすることです。それを書いたら、それはかなり簡単なはずです。

クライアント側で使用するものが何であれ、基本的にはその人の変更の「差分」をアップロードすることをお勧めします。

このデータに対して、データベースのように機能するものを作成する (または既存のデータベースを使用する) ことは理にかなっているでしょうか? それとも量が多すぎますか?

これを行う必要がある人の数にもよりますが、手っ取り早い解決策は、X 転送を介してプログラムを実行することです。これにより、多くの問題が解消されます.. サーバーに十分な RAM の空き容量がある限り.

于 2010-06-28T22:21:21.360 に答える
1

私の問題を組み立てる合理的な方法はありますか?

IMO はい。

私が考えている言語とフレームワークを使用してそれを行うことは可能ですか?

そう思います。しかし、他の選択肢があります。例えば:

  • レコードをデータベースに入れ、ファイル名 + レコード番号からなるキーでアクセスします。完全な RDBMS またはより軽量なソリューションである可能性があります。

  • HTML + JavaScript で実装された UI を備えた RESTful Web サービスとして実装します。

  • スケーラブルな分散ファイル システムを使用して実装します。

また、あなたの説明から、高度にスケーラブルな/トランスポートに依存しないレイヤーを使用する差し迫った必要性はないようです...数百人の同時ユーザーをサポートする必要がある場合を除きます。

便利ですか?

誰にとって便利?開発者について話している場合は、それらのフレームワークに既に精通しているかどうかによって異なります。

于 2010-06-29T06:12:43.397 に答える
1

OpenAFSのような分散ファイル システムの使用を検討したことがありますか? それは非常に大きなファイルを処理できるはずです。次に、あたかもローカルにあるかのようにファイルを編集するためのクライアント側アプリを作成できます。

于 2010-06-29T06:10:27.310 に答える