私は3,000万のレコードを提供するかなり複雑なデータベースクエリを持っています。メモリに収まるデータ量の約15倍です。データベースからすべてのレコードに順番にアクセスする(ソートする)必要があります。パフォーマンス上の理由から、注文書の準備には約40分を使用するResultSet
が使用されているため、「注文」明細書を使用することはできません。ソートされたファイルMergesortまたはデータベース?
平らにしたデータで到着する順不同のファイルに結果のデータをダンプ
とマージソートのいくつかのフォームを使用します。
は、私は私の問題を解決するために、2つの可能なオプションを参照してくださいそれを二次データベースにダンプし、データベースの順序付けメカニズムを使用して再選択します。
あなたは優雅さとパフォーマンスの理由からどちらを好きですか?
あなたの選択は、数2である場合は、データベースが使用する提案がありますか? SQLite、MySQL、またはApache Derbyを好むでしょうか?
私はmerge-sortがどのように動作するのか(そして関連するソートアルゴリズムでもメモリを利用しようとしています)、私は高速/よりエレガントなマージソートやデータベースの質問に対する答えを探していますソート。私はどちらの実装を選択しても、私の仕事時間はより良いPCよりも高価になるだろうが、私の会社はまだ32bit Windows上にあり、32bit-JVMで利用可能な1.5GBのメモリを既に最大限に活用している。 – Jonathan
最も洗練された解決策は、ジョブに適切なツールを使用することです。 ;)あなたの制限を考えると、私はあなたが働くものと一緒に行かなければならないと言います。 AFAIK一般的に受け入れられている解決策は、この状況では、マージソートです。個人的に私はあなたの標準システムを電子メールと単語に使用し続けますが、このタイプの問題には使用しません。 –
解決策2が何らかの理由で考慮され、却下されたり受け入れられたりした場合は知っていますか?解決策を拒否する理由はありますか、それがより独創的な解決策であるに過ぎないのでしょうか?私の観点から見ると、mergesortにはさらに1回の読み取り/書き込みサイクルが必要ですが、ファイルを連続して書き込むことは、同じ量のデータをデータベースに挿入するよりもはるかに高速ですが、問題はそれほど速いのですか?残念ながら、私は解決策を比較することはできません - 私は両方を実装するのではなく、両方を実装する予算があります。 – Jonathan