現在、約 5,000 万のドキュメントを持つ Solr インスタンスがあります。ゼロlong
の標準long
フィールド タイプを使用して、よく並べ替えるフィールドがあります。precisionStep
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
<field name="row" type="long" indexed="true" stored="true" />
並べ替えを行う場合、インデックスをメモリにロードする必要があります。私たちの場合、値の範囲が広いrow
ため、並べ替えを行うには 500m から 1g のヒープが必要です。
このメモリ使用量の要件を何らかの方法で削減できるかどうか疑問に思っています。
フィールドの を大きくするprecisionStep
とrow
、インデックスのサイズが小さくなり、ソートに必要なメモリの量が減りますか? ソート速度に対してこれを行う場合、トレードオフはありますか? そして、より高い精度のステップで並べ替えは完全に正しいでしょうか (行の値は厳密に正しい順序である必要があります)?
現在、1GB のヒープはかなり許容範囲ですが、より多くのrow
値を持つドキュメントをさらに追加すると、メモリ要件が高くなりすぎるのではないかと少し心配です。
(jpountzの回答後に追加)
これは現在メモリに収まっていますが、今後数か月で追加されると予想されるドキュメントの数に合わせて拡張することはできません. おそらく、Solr から結果をソートせずに取得し、ディスクベースのjava-merge-sortを使用してクライアント側でソートします。