2016-03-29 155 views
1

我需要創建一個熱圖來顯示世界上對應於Ipv6地址的密度區域。我可以通過解析一個csv文件並過濾Ipv6地址和相關的經緯座標來填充這個熱圖(密度)。我是否需要一個用於我的nodejs應用程序的數據庫?

我需要一個數據庫來存儲這個過濾的信息嗎?或者我可以以這樣的方式編寫我的應用程序(客戶端):每次進入index.html頁面時,客戶端都會處理此csv文件並填充熱圖?此外,有一個警告,可以更改csv文件。這不是說如果我使用數據庫,我需要使用新的csv文件中的新數據重新填充數據庫?

回答

1

這個答案真的取決於你。您可以按照您的想法每次在客戶端執行csv文件的解析過程。如果這是一個耗時的過程,那麼最好讓服務器執行此步驟,然後將結果提供給客戶端。

這裏有幾個方案來包裝你的頭周圍...

1)客戶端。這是你的想法。服務器將index.html和data.csv發送到客戶端瀏覽器。數據在客戶端解析並提供。

優點:簡單的服務器端邏輯。

缺點:在客戶端上做了很多工作! (希望他們沒有使用移動設備)。每個請求的數據都被解析客戶端。

2)服務器端。服務器解析data.csv並將結果存儲在內存中。服務器根據請求在內存中發送index.html和分析的數據。

優點:客戶端無需處理。服務器端的最小處理(解析一次)。

缺點:存儲在服務器內存中。每次服務器啓動時都必須重新解析。除非需要很長時間來解析數據,否則這應該是微不足道的。

3)服務器端+ DB。服務器解析data.csv並將結果提交給數據庫。服務器根據請求發送index.html和解析的數據。

優點:客戶端無需處理。服務器端的最小處理(解析一次)。

缺點:如上所述的用於存儲簡單靜態數據集的數據庫看起來像是過度的IMO。

我喜歡2號場景(如果不是很明顯)。這是我的意見,希望它能幫助你做出決定。


爲了幫助回答你的問題有關服務器的數據傳遞到客戶端...

這主要取決於你使用在服務器端的東西。節點/快遞,ASP.Net MVC等?

我想你有2場景(更多的決定!)。

1)index.html是一個由後端提供的靜態文件。如果是這種情況,那麼您將在該文件中包含一些JavaScript,在加載頁面以請求熱圖數據後,該文件將會回調到您的服務器。這個電話是你的另一個端點將會發揮作用的地方。一旦它獲得了數據 - 你可以猜測剩下的數據 - 它將它傳遞給你的熱圖庫來做它的事情。因此,您提到的REST端點將執行解析和操作並返回JSON結果。 index.html中的腳本將使用JQuery通過$ .get()調用服務器上的該端點。

2)index.html不是靜態文件。相反,它是生成html(和javascript)的端點。你會把一切都放到這一個電話中。它會解析和操作CSV(如果它尚未在服務器啓動時完成),並生成一個響應,該響應將包含HTML頁面和腳本標記以及所有javascript。你會設置一個JavaScript變量等於數據。加載頁面時,您可以將變量中的數據傳遞給熱圖庫。

您的想法與我認爲的場景1更加一致。我有一種感覺,這些信息可能會讓你更加困惑,但希望它有所幫助。

+0

謝謝您的全面解答。 我想在服務器端處理可能是最好的選擇,因爲我還定義了另一個REST端點,它返回邊界框內的緯度,長度座標(想象一下用戶在客戶端指定的地圖上的一個框,以及你想返回給用戶該盒子內所​​有Ipv6地址的座標)。你怎麼看? – newenthusiast

+0

我認爲你有正確的想法!端點將採用客戶端繪製的邊界框尺寸,例如框的左上角的lat長,以及框的右下角的lat長。通過這些輸入,您可以遍歷所有Ipv6座標,並返回落入該框內的座標。抱歉,如果這太詳細了。我討厭拿走搞定它的樂趣。 – Theo

+0

謝謝,這很有幫助! :) @Theo – newenthusiast

1

我想這取決於你和前者和後者的表現。

依靠應用程序在每次加載時執行繁重的工作,如果加載時間不需要太長時間,就可以正常工作。

否則,您可以讓應用程序解析CSV文件並將數據存儲在數據庫中。問題是,CSV文件會不會是暫時的?如果是這樣,你可能想要前者,並且每當應用程序加載時就解析它。

否則,您可以自由地將數據存儲在數據庫中,讓您的應用程序查詢數據庫以在地圖上顯示結果。

1

沒有規則!但很多要考慮。

解析/加載和初始化應用程序需要多長時間?如果您從文件系統中加載數據,您將不得不在每一個請求上產生這種成本。

數據集多久更改一次?如果加載數據集的密集程度很高,則可以讓應用程序將其加載到內存中,並使用內存版本爲請求提供服務。然後當它更新時,服務將不得不被通知,以便它可以更新它的內存版本。

有沒有其他方法可行?你能渲染你的數據集到一個svg或者什麼東西,並且讓一個web服務器提供這個靜態內容嗎?

如果您選擇使用一個數據庫來存儲你的客戶看,那麼它在數據改變時被更新的數據集的客戶看到它:)

相關問題