2016-03-29 14 views
1

世界のIpv6アドレスに対応する密度領域を表示するヒートマップを作成する必要があります。私はcsvファイルを解析し、Ipv6アドレスとそれに関連する緯度、経度の座標をフィルタリングすることでこのヒートマップ(密度)を設定できます。nodejsアプリケーションにデータベースが必要ですか?

このフィルタリングされた情報を格納するにはデータベースが必要ですか?または、クライアント側でindex.htmlページにアクセスするたびに、このCSVファイルを処理してヒートマップを作成するようなアプリケーション(クライアント側)を作成できますか?また、csvファイルを変更することもできます。私はdbを使用していた場合、新しいcsvファイルから新しいデータをdbに再投入する必要がありますか?

答えて

1

この答えはあなた次第本当にあります。あなたは確かに、あなたが思っているようにクライアント側でcsvファイルの解析プロセスを毎回実行することができます。時間がかかるプロセスの場合は、サーバーにこの手順を実行し、結果をクライアントに送信するほうがよい場合があります。ここで

は)

1 ... クライアント側の周りにあなたの頭をラップするいくつかのシナリオです。これはあなたの考えです。サーバーはindex.htmlとdata.csvをクライアントブラウザーに送信します。データは解析され、クライアント側で処理されます。

長所:シンプルなサーバーサイドロジック。

短所:クライアントに多くの作業を施しました! (彼らはモバイルデバイスを使用していないと思う)。データはすべての要求に対してクライアント側で解析されます。

2)サーバーサイド。サーバーはdata.csvを解析し、結果をメモリーに保管します。サーバーは、要求に応じてindex.htmlと解析されたデータをメモリに送ります。

長所:クライアント側では処理されません。サーバー側での最小限の処理(1回解析)。

短所:サーバーメモリに格納されます。サーバーが起動するたびに再解析する必要があります。データの解析に時間がかかる場合を除き、これは重要ではありません。

3)サーバーサイド+ DB。サーバーはdata.csvを解析し、結果をデータベースにコミットします。サーバーは、要求に応じてindex.htmlと解析されたデータを送信します。

長所:クライアント側では処理されません。サーバー側での最小限の処理(1回解析)。

短所:上記のような単純な静的データセットを格納するためのデータベースは、過度のIMOのようです。

私はシナリオ#2が個人的に好きです(明らかでない場合)。これは私の意見です、あなたの決定に役立つことを願っています。


クライアントにサーバデータを渡すことについて、あなたの質問に答えるために...

これは、サーバー側で使用しているものに主に依存します。ノード/エクスプレス、ASP.Net MVCなど?

これには2つのシナリオがあると思います。

1)index.htmlは、バックエンドによって処理される静的ファイルです。この場合、ヒットマップデータを要求するためにページが読み込まれた後に、サーバーに戻ってくるファイルにjavascriptがあります。この呼び出しは、他のエンドポイントが再生される場所です。データが取得されたら残りの部分を推測することができます。それをヒートマップライブラリに渡してそれを実行します。あなたが言及したRESTエンドポイントは解析と操作を行い、JSON結果を返します。 index.html内のスクリプトはJQueryを使用して$ .get()を使用してサーバー上のそのエンドポイントに呼び出します。

2)index.htmlは静的ファイルではありません。代わりに、html(とjavascript)を生成するエンドポイントです。この1回の呼び出しにすべてを当てます。これは、CSVを解析して操作し(サーバーの起動時にまだ実行されていない場合)、HTMLのページとスクリプトタグと、すべてのjavascriptを含む応答を生成します。 javascript変数をデータと同じに設定します。ページが読み込まれると、変数内のデータをヒートマップライブラリに渡します。

あなたの考えは、シナリオ1ともっと一致していると思います。私は、この情報があなたをさらに混乱させるかもしれないと感じていますが、うまくいけばそれが役に立ちます。

+0

総合的な回答ありがとうございます。 バウンディングボックス内の緯度、経度座標を返す別のRESTエンドポイントを定義しているので、サーバー側での処理が最適なオプションかもしれないと考えています(ユーザーがクライアント側で指定したマップ上のボックスを想像してください)。あなたはそのボックス内のIPアドレスのすべての座標をユーザーに戻したいと思う)。あなたの考えは? – newenthusiast

+0

あなたは正しい考えを持っていると思います!エンドポイントは、ボックスの左上の左上の長さやボックスの右下の長さなど、クライアント側に描画されたバウンディングボックスの寸法を取ります。これらの入力を使用すると、すべてのIpv6座標をループして、ボックス内にあるものを返すことができます。これがあまりにも細かい場合には謝罪してください。私はそれを理解する楽しさを取り除くことが嫌です。 – Theo

+0

ありがとう、これは役に立ちます! :) @テオ – newenthusiast

1

私はあなたと前者と後者のパフォーマンスに依存すると思います。

負荷がかかりすぎるたびに重い作業をするアプリケーションに依存すると、読み込みに時間がかかりすぎるとうまくいく可能性があります。

そうしないと、アプリケーションでCSVファイルを解析してデータをデータベースに保存させることができます。質問は、CSVファイルは一時的なものでしょうか?もしそうなら、アプリケーションをロードし、アプリケーションがロードされるたびにそれを解析するだけです。

それ以外の場合は、データをデータベースに保存し、アプリケーションでデータベースにクエリを実行して結果をマップに表示させることができます。

1

ルールはありません!しかし、考慮する必要があります。

アプリケーションを解析/ロードして初期化するのにどれくらい時間がかかりますか?ファイルシステムからデータをロードする場合は、1回のリクエストごとにそのコストが発生します。

データセットの変更頻度はどのくらいですか?データセットを読み込むのが集中している場合は、アプリケーションがメモリにロードし、メモリ内のバージョンを使用して要求を処理させることができます。それが更新されると、メモリバージョンで更新できるようにサービスに通知する必要があります。

他にも有効な方法はありますか?データセットをsvgなどにレンダリングし、その静的コンテンツをWebサーバーで処理できますか?

あなたのクライアントが参照データセットを格納するDBを使用することを選択した場合、データがそれを見るために、クライアントのために変更されたとき、それは更新する必要があります:)

関連する問題