2011-11-07 17 views
3

私はleveldbを使用して、キーが64ビットのハッシュで値が2倍のレコード(キー値)を保存しています。類推するには、64ビットのハッシュを顧客のユニークなIDと考え、アカウントの残高(アカウントにどれだけの金額があるか)をダブルとします。私はデータベースをアカウント残高別に並べ替え、最初に最も高いアカウント残高を持つ顧客をリストしたいと思います。しかし、データベースはメモリに収まらないので、ソートするために他の方法を使わなければならず、アカウントの残高をソートする必要があります。LevelDBを値でソートする方法

私はSTXXLの使用を検討していますが、データベースのコピーを単一のフラットファイルにしてから、STXXLを使用して外部ソートを実行する必要があります。別の単一のフラットファイルに戻すことができます)。データをソートするためのより良いアプローチがありますか、またはSTXXLソートと一緒に行くべきですか?

答えて

1

いくつのエントリがありますか?符号なしの32ビット整数をインデックスとして使用して(元の配列をどのようにソートするかを識別するために使用できる4,294,967,296のインデックスが可能ですか)

つまり、32ビットインデックスと勘定残高のペアを作成し、残高をソートしてから、32ビットインデックスを使用して元のデータの順序を整えます。

+0

次に、私は64ビットインデックスも使用できると思いますよね?キーは ''となる可能性があります... – Kiril

+0

私はあなたがメモリに完全なdbをロードできないと言ったと思いましたか?私は32ビットインデックスをその情報を減らす方法として提案しました。実際には、64ビットのハッシュと量よりも多くの情報がありますか? –

+0

正しいですが、私はそれらをメモリにロードする必要はありません。あなたの提案は別のLevelDBインスタンスをソートに使用するよう促しましたが、2番目のLevelDBインスタンスでは別のキー( '') 。したがって、キーは2重にソートされ、重複する倍数がある場合は、キーの2番目の部分が再生され、元のユニークなハッシュでソートされます。この方法では、データを1回だけコピーする必要があります。 – Kiril

関連する問題