私は現在、データ解析プログラムに取り組んでいる核物理学の大学院生です。データは数十億の多次元ポイントで構成されています。
とにかく、空間充填曲線を使用して複数の次元を単一の次元にマップし、B + ツリーを使用してデータのページにインデックスを付けています。各ページには、一定の最大ポイント数があります。
元のファイルから生データ (数百ギガ) を読み取り、前処理してインデックスを作成するときに、個々のポイントをページに挿入する必要があります。明らかに、単純にメモリに保存してからディスクにダンプするにはページが多すぎます。だから私の質問はこれです:ページが最大サイズに達して分割する必要があるときにデータの再シャッフルが最小限になるように、ページをディスクに書き込むための良い戦略は何ですか.
コメントに基づいて、これを少し減らします。
順序付けされたレコードを含むファイルがあります。これらのレコードはファイルに挿入されていますが、これらのレコードが多すぎて、単純にメモリ内でこれを行ってからファイルに書き込むことができません。レコードを挿入するときに必要な再シャッフルの量を最小限に抑えるには、どの戦略を使用する必要がありますか?
これが何らかの意味を成している場合は、これに対する解決策をいただければ幸いです。
編集:
データは多次元空間の点です。基本的に整数のリスト。これらの整数はそれぞれ 2 バイトですが、各整数にはさらに 2 バイトのメタデータが関連付けられています。したがって、座標ごとに 4 バイトで、座標は 3 から 20 の間です。したがって、基本的にデータは、各チャンクが 12 ~ 100 バイトの数十億のチャンクで構成されます。(明らかに、4 次元のポイントは、抽出されると 5 次元のポイントとは別のファイルに配置されます)。
この記事で説明したものと同様の手法を使用しています: http://www.ddj.com/184410998
編集2:ここでこの質問をしたことを少し後悔しているので、正式に取り消されたと考えてください。しかし、これが私が既製の製品を使用しない理由です。私のデータは、3 次元から 22 次元までの範囲のポイントです。各ポイントを単なるリストと考えると、これらの数字と同じリストに表示されたすべての数字として、ポイントをクエリする方法を考えることができます。以下は、次元が低い (そして通常よりもデータ ポイントがはるかに少ない) 例です。
Queries:
511
1021
237, 661
1021, 1047
511, 237, 1047
Responses:
237, 661, 1021, 237, 1021, 661, 1047, 1021
237, 661, 511, 511, 237, 511, 661, 1047
511, 1021, 1047
511, 661
_
したがって、これはほとんどのデータベース プログラムにとって難しい小さな問題ですが、これをうまく処理できるプログラムがいくつか存在することは知っています。
しかし、問題はさらに複雑になります。すべての座標が同じというわけではありません。多くの場合、ガンマ球だけで実行するため、各座標はガンマ線エネルギーを表します。しかし、ガンマスフィアまたはマイクロボールと呼ばれる検出システムに中性子検出器を挿入する場合もあれば、ガンマスフィアで生成された核種がフラグメント質量分析器に送られる場合もあります。これらすべておよびその他の検出システムは、単独で、またはガンマスフィアと組み合わせて使用できます。残念ながら、ほとんどの場合、上記と同様の方法でこの追加データを選択できるようにしたいと考えています。したがって、座標にはさまざまな意味があります。ガンマスフィアに加えてマイクロボールがあれば、方程式 x + y = n の正の解と同じ数の方法で n 次元のイベントを構成できます。さらに、各座標には関連付けられたメタデータがあります。したがって、私が示した各数値には、少なくとも 2 つの追加の数値が関連付けられています。1 つ目はイベントを検出した検出器の検出器番号、2 つ目は特定のガンマ線が何回発生したかを表す効率値です。 (実際に検出される検出器に入るガンマ線のパーセンテージは、検出器とエネルギーによって変化するため)。
既製のデータベース ソリューションで、膨大な量のカスタマイズを行わなくても、これらすべてのことを同時に実行できるとは思えません。そのために費やされた時間は、一般的ではなく、私自身の解決策を書くことに費やされたほうがよいと私は信じています。一般性が失われるため、どのデータベース コードに対しても削除関数を実装する必要はありません。また、さまざまなタイプの座標をゲートするためのセカンダリ インデックスを作成する必要もありません (1 つのセットだけで、各ポイントを 1 回だけ効果的にカウントします)。等