3

私は、ユーザーが数千行の可能性がある複数のファイルを解析できるようにするJavaプロジェクトに取り組んでいます。解析された情報はさまざまなオブジェクトに保存され、コレクションに追加されます。

GUIはこれらすべてのオブジェクトを一度にロードしてメモリに保持する必要がないため、ファイルからデータをロード/アンロードする効率的な方法を探しています。これにより、ユーザーが要求したときにのみデータがコレクションにロードされます。 。

私は今、ただの評価オプションです。また、データのサブセットをコレクションにロードし、それをGUIに表示した後、以前に観察されたデータをリロードするための最良の方法である場合についても考えました。パーサー/Populateコレクション/PopulateGUIを再実行しますか?または、コレクションをメモリに保持する方法、またはコレクション自体をシリアル化/逆シリアル化する方法を見つけますか?

ある種のデータフィルタリングが実行されると、データのサブセットのロード/アンロードがトリッキーになる可能性があることを私は知っています。IDでフィルタリングすると、新しいサブセットには、以前に分析された2つのサブセットのデータが含まれるとしましょう。これは問題ありません。データ全体のマスターコピーをメモリに保持します。

大量のデータを処理する場合、google-collectionsは優れていて効率的であり、多くのことを単純化するメソッドを提供するので、コレクションをメモリに保持するための代替手段を提供する可能性があることを読みました。これは一般的な話です。どのコレクションを使用するかという問題は、別個の複雑なものです。

このタイプのタスクに関する一般的な推奨事項を知っていますか?同様のシナリオであなたが何をしたか聞きたいです。

必要に応じて、より詳細な情報を提供できます。

4

2 に答える 2

4

HSQLDBのように、データベースをアプリケーションに埋め込むことができます。このようにして、最初にファイルを解析してから、SQLを使用して単純なクエリと複雑なクエリを実行します。

HSQLDB(HyperSQL DataBase)は、Javaで記述された主要なSQLリレーショナルデータベースエンジンです。JDBCドライバーがあり、ほぼ完全なANSI-92 SQL(BNFツリー形式)に加えて、多くのSQL:2008拡張機能をサポートしています。インメモリおよびディスクベースのテーブルを提供し、組み込みモードとサーバーモードをサポートする小型で高速なデータベースエンジンを提供します。さらに、コマンドラインSQLツールやGUIクエリツールなどのツールが含まれています。

于 2010-03-12T19:07:39.663 に答える
3

大量のデータと大量のファイルがあり、メモリが不足している場合は、ファイルの初期スキャンを実行してインデックスを作成できます。ファイルが改行によってレコードに分割されていて、レコードの読み取り方法を知っている場合は、バイト位置でレコードにインデックスを付けることができます。後で、特定のインデックスのセットを読み取りたい場合は、高速ルックアップを実行して、読み取る必要のあるバイト範囲を見つけ、ファイルのInputStreamからそれらを読み取ります。それらのアイテムが不要になると、GCされます。必要以上のアイテムをヒープに保持することはありません。

これは簡単な解決策になります。より多くの機能を提供するライブラリを見つけることができると確信しています。

于 2010-03-12T18:48:46.920 に答える