2017-02-27 105 views
2

我正在開發一個推薦引擎。我想我無法在內存中保留整個相似性矩陣。 我計算了10,000個項目的相似度,它超過了4000萬個浮點數。我將它們存儲在一個二進制文件中,它變爲160 MB。我應該如何將數據存儲在推薦引擎中?

哇! 問題是我可能有近20萬個物品。 即使我將它們分爲幾組併爲每個組創建相似性矩陣,我仍然必須在某個時間將它們加載到內存中。 但它會消耗很多內存。

那麼,有沒有辦法處理這些數據?

我應該如何將它們存儲並加載到內存中,同時確保我的引擎對輸入作出合理的快速響應?

回答

2

您可以使用memory mapping來訪問您的數據。通過這種方式,您可以將磁盤上的數據視爲一個大內存區域(就像訪問內存一樣訪問它),區別在於只有讀取或寫入數據的頁面(暫時)才加載到內存中。

如果您可以對數據進行分組,則只需要在訪問數據時在內存中讀取較小的部分。對於浮點數,如果你可以用較少的分辨率來處理,並將值存儲爲比如16位整數,那麼這也將是一半的大小。

+0

我正在使用node.js,可以在node.js中使用內存映射嗎? – arslan

+1

@alim我不知道node.js,但它似乎是可能的:http://stackoverflow.com/a/23748621/5708620 - 但也如答案中所述,訪問該數據量可能會更好從一些C++(或其他)代碼而不是腳本(也許爲所有線程保留一些內存部分 - 打開和關閉每個請求的內存映射都無濟於事)。 –

+0

謝謝,我會試試:) – arslan