2017-10-20 78 views
0

要求:可預測地拆分數據結構的算法,無論它構建的順序

我正在給構建Solr索引的程序添加一個特性。系統是多線程的,所以搜索條目每次都會隨機創建。 Solr索引也需要拆分爲多個文件,因爲如果用戶試圖上傳一個大文件,服務器可能會耗盡內存。

問題:

爲了保持系統可靠,使事情變得更容易整體,產生的Solr的索引文件必須是相同的,無論他們是在處理什麼樣的順序該指數需要平衡。跨文件(或足夠接近平衡),並有最大數量的條目。如果文件超出了最大條目數量,則需要將其分割。這些文件也將在運行中更新,因此將添加,刪除和更改條目。

只需要什麼:

我在尋找一個可以爲這些要求採用的算法。我想我需要某種B樹,但我不知道任何適合這個特定要求的B樹變體。

有沒有可以幫助滿足這些要求的算法或數據結構?

+0

「Solr索引文件需要相同」是什麼意思?你的意思是說,不管他們處理的順序如何,這些文件必須是相同的?或者,文件的內容一旦被讀取和處理後,必須創建相同的結果? –

+0

默認的Lucene索引文件只能追加,所以如果你以不同的順序添加東西,你會得到不同的文件(內部docid也會不同)。您可以創建自己的編解碼器來自己序列化和反序列化內容。如果你有這些要求,你可以擴展嗎?您是否在Solr之外建立了Lucene索引,並且您如何構建它?你可以在磁盤和內存中創建一個結構,然後按順序將該結構序列化爲Lucene?在這種情況下,每個線程中都有一個二叉樹,然後將其合併到磁盤。 – MatsLindh

+0

通過「索爾索引文件需要是相同的」,我的意思是文件本身必須是相同的。這些要求是爲了證明程序的可靠性和完整性。我不知道Solr索引是如何創建的,因爲我們沒有進行規劃。不過,我可以說這些文件將採用JSON格式。只要結果文件一致,我們就可以在磁盤和內存中創建結構。 – user489481

回答