2017-04-24 57 views
0

我已經使用Koa(nodeJs)編寫了一個Web服務器。我需要從mongo數據庫返回大量數據。大意味着大約750.000個json數據的數組。每個json元素都包含多個字符串。在節點中返回大量數據的好做法

什麼是編碼這樣的服務器以避免它崩潰的好方法? 我接受所有提示:)

PS:我的客戶端是Unity(c#或js)。

+0

爲什麼你需要一次全部返回?首先想到的是gzip。如果它還不夠小,請使用其他類型的壓縮來幫助降低壓縮率。但說實話,我會試着去看看客戶端爲什麼一次需要所有這些數據。 –

+0

我製作數據vizualisation,並且我想一次性將所有這些視覺化。不過,我可以通過包裝加載它們。 – MrFlo

+0

如果是這種情況,您可能也想在服務器端處理/聚合數據,以便發送更少的數據。 –

回答

1

節點默認使用分塊傳輸編碼來處理HTTP,並且使用流可以在一個請求中返回PB級數據,而不會有任何問題,至少在服務器沒有問題的情況下 - 讓客戶端解析數據是另一回事。

問題在於將大數據序列化爲JSON,這通常是需要內存中所有數據的阻塞操作。但有流式JSON編碼器可用。

例如參見大友好JSON - 對於大JSON數據集異步流功能:

參見其它模塊:

而且,你並不需要發送一個大的JSON,您可以將其拆分成多個對象。你不需要使用JSON來序列化數據。您可以使用CSV,TSV或其他任何適合您的數據。你沒有告訴我們關於你的數據的任何信息,所以很難給你一個具體的建議。

+0

感謝您的建議。我使用的是mongodb,因此將數據存儲在json中。沒有具體的理由,除了爲我管理更簡單(這是一個糟糕的原因)。我要檢查你的模塊,再次感謝。 – MrFlo

1

由於數據量如此之大,您是否真的希望一次性在客戶端上?如果不是另一個簡單的選項是通過多個請求分頁數據。

mongo查詢可以通過限制和跳過選項輕鬆查找查找請求。

您可以通過在使用查詢參數http://example.com/large_data?skip=5000&limit=1000.

+0

好的建議!這正是我正在尋找的語法!非常感謝 ! – MrFlo

相關問題