2016-03-29 8 views
1

Ich muss eine Heatmap erstellen, die Dichtebereiche entsprechend IPv6-Adressen in der Welt anzeigt. Ich kann diese Heatmap (Dichten) auffüllen, indem ich eine CSV-Datei analysiere und nach IPv6-Adressen und den zugehörigen Breitengrad-Koordinaten suche.Benötige ich eine Datenbank für meine nodejs-Anwendung?

Benötige ich eine Datenbank zum Speichern dieser gefilterten Informationen? Oder kann ich meine Anwendung (die Client-Seite) so schreiben, dass jedes Mal, wenn ich zur Seite index.html gehe, die client-Seite diese csv-Datei verarbeitet und die heat map füllt? Außerdem gibt es eine Einschränkung, dass die CSV-Datei geändert werden kann. Würde das nicht bedeuten, wenn ich eine db verwenden würde, müsste ich die db mit neuen Daten aus der neuen csv-Datei neu füllen?

Antwort

1

Diese Antwort ist wirklich an Ihnen . Sie können den syntaktischen Analyseprozess der CSV-Datei auf der Client-Seite definitiv ausführen, wenn Sie denken. Wenn es ein zeitraubender Prozess ist, kann es besser sein, dass der Server diesen Schritt ausführt und dann die Ergebnisse nur dem Client bereitstellt.

Hier sind ein paar Szenarien Kopf herum zu wickeln ...

1) Client Side. Das ist deine Idee. Der Server sendet index.html und data.csv an den Client-Browser. Und Daten werden analysiert und auf Client-Seite bedient.

Vorteile: Einfache serverseitige Logik.

Nachteile: Puts eine Menge Arbeit auf dem Client! (Hoffentlich benutzen sie kein mobiles Gerät). Die Daten werden für jede Anforderung auf der Clientseite analysiert.

2) Serverseite. Der Server analysiert data.csv und speichert das Ergebnis im Speicher. Der Server sendet index.html und analysierte Daten im Speicher auf Anfrage.

Vorteile: Keine Verarbeitung auf der Client-Seite. Minimale Verarbeitung auf Serverseite (einmal geparst).

Nachteile: Im Serverspeicher gespeichert. Muss bei jedem Serverstart erneut analysiert werden. Wenn es nicht lange dauert, die Daten zu analysieren, sollte dies unbedeutend sein.

3) Serverseite + DB. Der Server analysiert data.csv und übergibt die Ergebnisse an die Datenbank. Der Server sendet index.html und analysierte Daten auf Anfrage.

Vorteile: Keine Verarbeitung auf der Client-Seite. Minimale Verarbeitung auf Serverseite (einmal geparst).

Nachteile: Datenbank zum Speichern eines einfachen statischen Dataset wie oben beschrieben scheint wie Overkill IMO.

Ich mag Szenario # 2 persönlich (wenn es nicht offensichtlich war). Das ist meine Meinung, hoffe es hilft dir Entscheidung.


helfen Um Ihre Frage zu dem Übergeben Sie die Serverdaten an den Client zu beantworten ...

Dies hängt in erster Linie auf das, was Sie auf der Server-Seite verwenden. Knoten/Express, ASP.Net MVC, etc?

Ich nehme an, Sie haben 2 Szenarien dafür (mehr Entscheidungen!).

1) index.html ist eine statische Datei, die vom Backend bereitgestellt wird. Wenn dies der Fall ist, haben Sie einige Javascript in dieser Datei, die nach dem Laden der Seite zum Aufrufen dieser Heatmap-Daten an Ihren Server zurückruft. Bei diesem Anruf kommt Ihr anderer Endpunkt ins Spiel. Sobald es die Daten bekommt - Sie können den Rest erraten - übergibt es es an Ihre Heatmap-Bibliothek, um es zu tun. Der von Ihnen erwähnte REST-Endpunkt würde also Parsing und Manipulation durchführen und ein JSON-Ergebnis zurückgeben. Das Skript in Ihrer index.html verwendet JQuery, um mit $ .get() zu diesem Endpunkt auf Ihrem Server aufzurufen.

2) index.html ist keine statische Datei. Stattdessen ist es ein Endpunkt, der HTML (und Javascript) generiert. Sie würden alles in diesen einen Anruf setzen. Es würde die CSV analysieren und manipulieren (wenn es nicht bereits beim Start des Servers getan wurde) und eine Antwort generieren, die aus der HTML-Seite und den Skript-Tags besteht, die auch das gesamte Javascript enthalten. Sie würden eine JavaScript-Variable festlegen, die den Daten entspricht. Wenn die Seite geladen wird, würden Sie die Daten in der Variablen an die Heatmap-Bibliothek übergeben.

Ihre Gedanken sind mehr mit Szenario 1 abgestimmt, denke ich. Ich habe das Gefühl, dass diese Information Sie noch mehr verwirren könnte, aber hoffentlich hilft es.

+0

danke für die umfassende Antwort. Ich denke, die Verarbeitung auf der Serverseite könnte die beste Option sein, da ich auch einen anderen REST - Endpunkt definiere, der die lat, langen Koordinaten innerhalb eines Begrenzungsrahmens zurückgibt (stellen Sie sich ein Feld auf der Karte vor, das der Benutzer auf der Clientseite angibt) Sie möchten alle Koordinaten von IPv6-Adressen in diesem Feld an den Benutzer zurückgeben). Was sind deine Gedanken? – newenthusiast

+0

Ich denke du hast die richtige Idee! Der Endpunkt würde die Bounding-Box-Dimensionen übernehmen, die clientseitig gezeichnet wurden, wie zB lat lang oben links im Feld und lat lang rechts unten im Feld. Mit diesen Eingängen können Sie alle Ipv6-Koordinaten durchlaufen und diejenigen zurückgeben, die in die Box fallen. Entschuldigung, wenn das zu viel Detail ist. Ich würde es hassen, mir den Spaß zu nehmen, es herauszufinden. – Theo

+0

Danke, das ist hilfreich! :) @Theo – newenthusiast

1

Ich denke, das hängt von Ihnen und der Leistung der ehemaligen und letzteren ab.

Sich auf die Anwendung zu verlassen, um das schwere Heben jedes Mal durchzuführen, das es geladen wird, funktioniert gut, wenn es nicht zu lange dauert, um zu laden.

Andernfalls kann Ihre Anwendung die CSV-Datei analysieren und die Daten in einer Datenbank speichern. Die Frage ist, wird die CSV-Datei vorübergehend sein? Wenn dies der Fall ist, möchten Sie vielleicht die erste und analysieren Sie es jedes Mal, wenn die Anwendung geladen wird.

Andernfalls können Sie die Daten in einer Datenbank speichern und Ihre Anwendung die Datenbank abfragen, um die Ergebnisse auf der Karte anzuzeigen.

1

Es gibt keine Regeln !! Aber viel zu beachten.

Wie lange dauert das Analysieren/Laden und Initialisieren der Anwendung? Sie müssen diese Kosten bei jeder einzelnen Anfrage aufbringen, wenn Sie die Daten aus dem Dateisystem laden.

Wie oft wird der Datensatz geändert? Wenn es sehr aufwendig ist, das Dataset zu laden, kann Ihre Anwendung es in den Speicher laden und Anfragen mit der In-Memory-Version ausführen. Dann, wenn es aktualisiert wird, muss der Dienst benachrichtigt werden, damit er seine Speicherversion aktualisieren kann.

Gibt es noch andere Möglichkeiten, die funktionieren könnten? Könntest du dein Dataset in eine Svg oder etwas rendern und einen Webserver haben, der statischen Inhalt liefert?

Wenn Sie einen DB verwenden, um die Datenmenge zu speichern, die Ihre Kunden sehen, dann hat es aktualisiert werden, wenn die Daten geändert werden für die Kunden, es zu sehen :)

Verwandte Themen