Was sind die Nachteile einer JSON-serverseitigen Datenspeicherdatei?
-
21-12-2019 - |
Frage
Ich suche nach alternativen Datenspeichermethoden zu SQL ( das heißt, ich mache nicht SQL, auch für Abfragen ) und stieß auf awenige basierend auf JSON.Mit Freunden, die Datenbankarbeit machen, sagten sie, ich sollte diese nicht berücksichtigen, würde aber nicht erarbeiten. Was sind die potenziellen (und praktischen) differcts , um JSON als Datenspeicherdateiformat zu verwenden?
Ich dachte, JSON wäre aus diesen Gründen
- .
- json ist
streng definiert
unter anderem ...
Lösung
Ich denke, Sie möchten vielleicht No-SQL-Datenbanken ansehen: https://en.wikipedia.org/wiki/nosql
Wenn Sie möchten, dass Sie JSON-ähnliche Daten verwenden, ist eine ich persönlich benutzt, ist mongodb.
Ich habe es nicht als Haupt- / Einzelquelle meiner App-Daten verwendet, sondern nur für sekundäre Zwecke. Aber ich denke, Sie können es auch versuchen, ihn als Hauptdatenspeicher zu verwenden (ich denke viele Leute, die es tun).
was ich ausprobiert habe und war ziemlich zufriedenstellend, war mongodb mit c # und benutzte Mongovue als GUI-Anwendung, um Abfragen und Interaktion mit dem DB auszuführen. Ich war mit MongoVue nicht sehr zufrieden, aber es scheint, dass es zu dieser Zeit die beste Option war.
SQL DBS sind jedoch sehr gut, um Beziehungen in Ihren Daten zu definieren. Z.B. Verweisen Sie einen Eintrag auf Tabelle A von einem Eintrag auf Tabelle B und dieser Art von Sachen. Mit diesen Beziehungen können Sie Tische mitmachen und viele interessante Dinge tun. Ich denke, es ist gut, dass Sie auch Erfahrungen auf diesem Feld erhalten.
mongodb baut nicht auf, um Beziehungen zu definieren (soweit ich verstehe). Es hat das Konzept von "Dokumenten", in denen Sie Informationen in einem JSON-Format speichern (mit verschachtelten Schlüssel / Werten). Sie können Dokumente abfragen. In-Mongodb "> Wie leite ich die SQL-Anmelde-Äquivalent in Mongodb? Sicherstellung der Datenkonsistenz (auf wirklich zuverlässiger Weise), wenn Beziehungen in MONGODB verwendet werden, scheint mir ziemlich unmöglich zu sein. Aber auch wenn ich falsch liege, und es ist möglich, es ist 10 mal schwieriger, es zu erreichen, als mit SQL-DBS.
Sie können jedoch die Liste in Wikipedia ansehen, und es könnte eine bessere Alternative als MONGODB für Sie geben.
Sie können jedoch auch reines JSON mit keinem DB-System verwenden.
also in Zusammenhang mit JSON-ähnlicher Lagerung (zumindest) diese Probleme:
- .
- nicht gut bei der Definition und Verwendung von Beziehungen
- Wenn Sie Beziehungen verwenden, ist die Datenintegrität (oder wahrscheinlicher, Referenzintegrität) schwer.
- Wenn Sie kein gutes DB-System verwenden, aber Sie können JSON einfach in eine Datei ablegen, wenn diese Datei zu groß wird, haben Sie Leistungsprobleme. Stellen Sie sich vor, Sie senden ein 1 GB-JSON-Coded-Array von Objekten, um die gewünschten Objekte zu erhalten. Sie müssen das gesamte Array auf dem Speicher laden, durch das Ganze ausgeführt werden (da Sie keine Indizes haben) und dann (wenn Sie nicht mehr Speicher und Ihre Verbindung ausgeführt haben, und wenn Sie mit einem Netzwerk nicht abgelaufen sind) Sie wird ein Ergebnis erhalten. Die meisten NO-SQL-DBS wie MONGODB und die meisten SQL-DBs haben keine solchen Probleme (zumindest in angemessenen Datenmengen). Sie sind fein abgestimmt, sie unterstützen Indexierung, Referenzen, Berechtigungen, Rollen und Sie können den Ausführender Code auch auf der DB-Ebene (wie Auslöser und gespeicherte Prozeduren) definieren. Sicherlich sind sie komplexer, aber die Komplexität kann den meisten Zeiten erforderlich sein, um das Endergebnis zu erreichen.
Andere Tipps
JSON- oder JavaScript-Objektnotation ist ein offenes Standardformat, das humanlesem Text verwendet, um Datenobjekte zu übertragen, die aus Attribut-Wert-Paaren bestehen.Es wird hauptsächlich zur Übertragung von Daten zwischen einem Server- und einer Webanwendung als Alternative zu XML verwendet.
Sie schauen sich mehr auf den Vergleich zwischen Datenbank vs Flat-Dateispeicher wirklich.
Auch bei Verwendung einer relationalen DB ist die Datenintegrität (oder die referentielle Integrität) immer noch schwer, da Zeilen normalerweise zeitgestempelt sind.Ganz oft sind fremde Schlüssel aufgrund davon nicht durchgesetzt.Wenn ein Zeilenaktualisierung auftritt, haben Sie 2 Optionen.Erstens, "vergessen" die vorherige Version.Zweitens, aktualisieren Sie die ursprüngliche Zeile und kopieren Sie die vorherige Version in einen zeitgestempelten "nicht relationalen" History-Tisch, in dem ausländische Schlüssel unbrauchbar sind.Die meisten Geschäftsdaten erfordert Updates.Funktionen zur Aufrechterhaltung der referenziellen Integrität in relationalen Datenbanken sind für diese Art von Geschäftsdaten nutzlos (was die meisten Unternehmensdaten darstellt). Was benötigt wird, ist eine zeitliche Datenbank oder eine Abstraktionsschicht, die einen Benutzer mit der entsprechenden Version einer Zeile basierend auf einem Zeitkontext darstellt.Ideal in 2 Dimensionen d. H. Transaktionszeit und Geschäftszeit (alias gültige Zeit).