2017-05-15 42 views
0

我需要幫助/提示合併數以百萬計的數據的NodeJS

我有一個巨大的,需要加以合併,分類和過濾JSON數據量。現在,它們被分成不同的文件夾。幾乎2GB的json文件。

我在做什麼現在的問題是:

  • 讀取每個文件夾
  • 附加JSON解析我的腳本中的數據到Array variable內的所有文件。
  • 整理Array variable
  • 過濾。
  • 將其保存到一個文件

我正在重新思考而不是appending parsed data to a variable,也許我應該將其存儲在文件中?..你們覺得呢? 處理這種情況時哪種方法更好?

順便說一句,我遇到一個 Javascript Heap out of memory

+0

這樣的數據量,不一定要同時加載到內存中。 – csblo

+0

所以你認爲將分析後的數據存儲到文件中而不是將其存儲到變量中更好? – Hitori

+0

我會先過濾,然後排序。 – Robert

回答

0

你可以使用某種數據庫,例如MySQL的表引擎「內存」,所以它將被保存在內存中,並且很快就會消失,重啓後會被擦除,但在操作完成後,無論如何應該截斷它。當表中有數據時,可以很容易地對所需位進行過濾/排序,並通過增加1000行來獲取數據,並根據需要進行解析。你不需要在js裏面保存2gig的數據。

2gigs的數據可能會阻止你的js線程在循環中,你會得到凍結的應用程序。

如果您將使用某些文件來保存臨時數據以避免數據庫,我建議使用一些臨時磁盤,它將被安裝在RAM上,這樣您將擁有更好的I/O速度。

+0

謝謝,但說實話,我不知道爲什麼我會使用db?它只是需要在存儲到實際數據庫之前進行合併,過濾和排序的文件。這就是爲什麼我使用nodejs。 – Hitori

+0

如果您沒有看到任何需要使用數據庫並希望在排序/過濾等文件上存儲臨時數據時,只需使用RAM磁盤,它會很快。 Nodejs只是js runner,js是單線程的,如果你有一些cpu密集型任務在運行,它就會被凍結。這就是爲什麼我會使用一些數據庫解決方案來操縱更大的數據集。當然,你可以使用其他線程與工作人員,但它可能會過度工程。 –

相關問題