2012-03-29 62 views
3

確實很簡單。我有一個可怕的JSON數量,總共100GB。這100GB被分成通常每個1mb的文件。更好地在Java或Javascript中處理JSON?

所以這讓我想知道,通常來說,解析Javascript中的JSON文件會更快嗎?還是使用Java的JSON jar之一來處理文件?

現在顯然我不得不多線程所有這一切等等。

+0

Node.js在分叉作業和運行多線程方面做得非常好 – ControlAltDel 2012-03-29 21:27:40

+0

@user:是的,這就是爲什麼我刪除了我的評論:) – 2012-03-29 21:28:00

+0

在解析數據後,你對數據做了什麼?這是另一件需要考慮的事情。 – 2012-03-29 22:04:29

回答

1

我認爲它會更容易,更快,更容易擴展(ThreadPoolExecutor)在Java中處理。 你打算怎麼用javascript做到這一點?獨立v8?

0

如果你知道它,我會使用Node.js.更好地在基於Javascript的環境中處理JSON對象

+0

它是如何更好? JSON旨在成爲便攜式格式。根據我的經驗,Java在處理它方面做得很好。 – 2012-03-29 22:07:48

6

使用您最擅長的任何技術,大規模性能差異的可能性都很低。 V8(Google的JavaScript引擎  —在Chrome瀏覽器和NodeJS中非常流行,但也可以獨立運行)非常快速,Sun/Oracle的JVM具有出色的熱點優化技術。如果你喜歡,你甚至可以在JVM上使用JavaScript(Rhino)。

現在顯然我不得不多線程所有這一切等等。

這根本不明顯。如果這個過程是I/O綁定的(如果你正在讀取一千個100MB的文件,聽起來好像它可能會取決於你在做什麼),添加多個線程不會對你有所幫助。

+1

重要的一點是,100GB不適合主內存,因此I/O性能可能是瓶頸,應該優化而不是處理代碼。 – 2012-03-29 21:29:18

+1

首先你已經說過這些100GB分佈在多個文件中(否則併發不會很微不足道),所以它們不需要適應內存。 說了我想看看java的內存映射文件的支持(在nio包下) - 我不認爲node.js有什麼等價的東西? – radai 2012-03-29 21:33:25

0

這兩種語言都運行在虛擬執行環境中,因此執行速度更依賴於您使用的虛擬機,而近期的虛擬機變得非常快速,尤其是在最近的硬件上。

據我所知,JavaScript沒有「原生」支持線程。多線程在「時間共享」執行中實施以防止鎖定。這似乎不再是這種情況"webworkers"也可以將文件分割成不同的進程,這些進程將獨立處理這些文件,但這會產生大量的併發磁盤訪問,這很可能是處理文件時的瓶頸。

所以我建議你去用你最舒服的語言。

Btw。介意告訴我們你將在json文件上做什麼樣的處理?

如果我要實現這個:爲了限制併發IO,我將有一個第一個線程,它將一次預取一個文件,並將其讀入內存並排隊工作人員處理該文件(如果處理過程繁重一個線程池肯定會提高處理速度)。