オンデマンドでファイルからコレクションにデータをロードする最も効率的な方法は何ですか?

StackOverflow https://stackoverflow.com/questions/2434971

質問

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

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

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

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

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

この種のタスクに関する一般的な推奨事項をご存知ですか?同様のシナリオでどのようなことを行ったかを聞きたいです。

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

役に立ちましたか?

解決

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

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

他のヒント

あなたはデータのトン、ファイルの多くを持っている、とあなたはメモリが不足している場合は、

、あなたは、インデックス、それへのファイルの最初のスキャンを行うことができます。ファイルは行でレコードにフィードを分け、そしてあなたがレコードを読み取るする方法を知っている場合は、バイト位置によってインデックスあなたの記録をできました。あなたがindecesの特定のセットを読みたいと思った場合、後で、あなたが読む必要がある範囲のどのバイトを見つけるために高速な検索を行うと、ファイルの入力ストリームからのものを読んでいました。あなたはもう、それらの項目を必要としない場合には、彼らはGCedになります。あなたは、ヒープに必要以上の項目を保持することはありません。

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top