次の形式の大きなデータセットがあります。
合計で、3687個のオブジェクトファイルがあります。それぞれに2,000,000レコードが含まれています。各ファイルのサイズは42MBです。
各レコードには次のものが含まれます。
- id(整数値)
- 値1(整数)
- Value2(整数)
- Value3(整数)
各ファイルのコンテンツは、データ収集プロセス中に観察されるため、並べ替えや順序付けは行われません。
理想的には、このデータのインデックスを作成したいと思います。(idでインデックス付けされます)これは次のことを意味します:
IDのセットを管理可能なチャンクに分割します。
ファイルをスキャンして、現在のワーキングセットのIDに関連するデータを取得します。
インデックスを作成します。
次のチャンクに移動して、1、2、3を繰り返します。
私にはこれは問題ないように聞こえますが、152GBを前後にロードするのは時間がかかり、可能な限り最良のアプローチについて、あるいはJavaが実際にそのようなプロセスに使用するのに適切な言語であるかどうかさえ疑問に思います。
私のマシンには256GBのRAMと32コアがあります。
更新: これを変更して、I / Oを脇に置き、ファイルがバイト配列のメモリ内にあると仮定します。
2,000,000レコードを持ち、各レコードに4つの整数がシリアル化されている42MBのオブジェクトファイルをデコードするための最速の方法は何でしょうか。