我們目前有一個Solr實例,它擁有約5000萬個文檔。有一個long
領域,我們經常排序,使用標準long
字段類型零的precisionStep
:Solr排序,precisionStep和內存使用
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/>
<field name="row" type="long" indexed="true" stored="true" />
當談到做一個排序,索引需要在內存中加載。在我們的例子中,我們需要大量的row
值,我們需要500萬到1克的堆才能完成。
我想知道是否可以減少這種內存使用要求。
增加row
字段的precisionStep
是否會減小索引大小,從而減少排序所需的內存量?在對分類速度做這件事情時是否有一個權衡?並且在更高精度的步驟下排序仍然完全正確(行值必須嚴格按順序)?
1GB的堆現在是相當可以接受的,但是如果我們添加更多的文檔以及更多的row
值,內存要求將變得太高,我有點謹慎。
(jpountz的回答後加入)
雖然這符合當前內存中,它不會與規模,我們期待在未來幾個月增加文檔的數量。我們可能會從Solr中得到未排序的結果,並在基於磁盤的java-merge-sort的客戶端上對它們進行排序。