2015-05-20 6 views
5

Ich habe mich nur gefragt, ob jemand irgendwelche Gedanken über die Umwandlung einer JSON-Dokumentdatenbankstruktur in SQL hatte. Es muss für Datenintegration/Warehousing getan werden.Beste Architektur zum Konvertieren von JSON nach SQL?

Die JSON-Felder sind relativ statisch, aber neue "Felder" können alle 2-4 Wochen entstehen.

Aufgrund der Natur dieser, und die Konvertierung in SQL --- Ich dachte ... parse alle statischen Felder in SQL-Felder. Die 'dynamischen' Felder sind glücklicherweise in einem Teil des JSON-Dokuments strukturiert.

Meine Idee war es, einfach diesen 'dynamische Felder-Abschnitt' auszugeben, der 50, 100 Felder enthält, wer weiß - es kann sich langsam ändern --- in ein zusätzliches SQL-Feld.

Auf diese Weise ist zumindest der ETL-Prozess relativ statisch, egal wie sich die JSON-Felder ändern.

Dann eine zweite Schicht, oder vielleicht "Ansicht" würde im Wesentlichen diese riesige Spalte in seine getrennten Felder analysieren. IE die riesige Spalte könnte sagen "Farbe: rot; Status: offen; Stadt: Rom" ... und eine Reihe von String-Funktionen würde diese aussortieren, um die Felder Farbe, Status und Stadt zu füllen, vielleicht in einer Ansicht.

Ich bin mir nicht sicher, ob dies verrückt ist oder nicht. Die andere Möglichkeit wäre, MySQL-Anweisungen im laufenden Betrieb auszuführen (um Spalten hinzuzufügen), wie sie in JSON-Dokumenten vorkommen, aber das ist eine eigene Reihe von Problemen.

Hat jemand Gedanken dazu?

Und sagen, die Datenbank wird nur hinzugefügt, nie aktualisiert. In diesem Fall muss das Parsing nur einmal pro Zeile durchgeführt werden. Wäre eine Ansicht immer noch die beste Option? Oder einfach einen anderen Tisch zusammen?

Antwort

5

Einfache Strategie: Analysieren Sie aus dem JSON die Felder, die behoben sind und die Sie kennen. Setzen Sie diese in SQL-Tabellen.

Felder, die Sie nicht erkennen, lassen Sie sie als JSON. Wenn die Datenbank einen JSON-Typ unterstützt, legen Sie ihn dort ab. Ansonsten speichern Sie es in einem großen String-Feld.

Beginnen Sie nicht mit der Analyse von JSON in anonyme Felder, insbesondere wenn sich die Felder wöchentlich (oder so) ändern. Die meisten Datenbanken unterstützen JSON bis zu einem gewissen Grad. Daher können Sie die Datenbank-Engine für das Parsen verwenden, wenn Sie die Daten abfragen.

+0

Ja das habe ich mir gedacht. Es ist mehr wie eine monatliche Basis, aber selbst das ist zu viel Wartung. Die Felder werden nicht genau anonym sein ... im Grunde sind sie "user-created" -Felder in einer Anwendung (nicht von meiner Erstellung) --- es kann vorkommen, dass ein bestimmtes benutzerdefiniertes Feld in einer Business Intelligence nützlich ist/Data Warehouse-Einstellung ... Ich denke, Parsing aus dem "großen String-Feld" ist einfacher zu verwalten, aber war nicht sicher, ob das lächerlich oder nicht. – user45867

0

Es klingt, als ob Sie ein Handle auf die "statischen" Felder haben. Haben Sie überlegt, ein Tagging-System für die "dynamischen" Felder zu verwenden? Vielleicht eine Tabelle, die einen Wert speichert, einen Fremdschlüssel für eine Master-Tag-Liste (eine Liste aller verfügbaren "statischen" Felder, die Werttypdefinitionen wie String, Int usw. enthält) und einen Fremdschlüssel für die Entität, der der Feldwert zugeordnet ist mit? Sie müssten natürlich einen ETL-Prozess für bekannte Master-Tags beibehalten, aber das würde die Dinge ein wenig vereinfachen. Wenn neue Tags hinzugefügt werden, können Sie einfach einige (hoffentlich) getestete SQL-Transaktionen einführen, die die neuen Tags Ihrem System hinzufügen und sie zusammen mit Ihrer Anwendung versionieren.

Nachdem ich das alles gesagt habe, würde ich wahrscheinlich noch ein bisschen weiter gehen und etwas mehr Designarbeit machen und eine Strategie entwickeln, die die Konsistenz auf der Anwendungsebene zugunsten der Persistenzschicht hält. DDD + Domain Events, Producer/Consumer Modelle, Pub/Sub, Actor Semantics oder eine andere Strategie, die das Problem weiter oben in Ihrem Stack löst. Es klingt so, als ob die meisten davon in Wartungsbildschirme eingebunden werden könnten, um die Dinge auf der Anwendungsebene konsistent zu halten, wenn Sie bereit sind, einige Ihrer Geschäftsobjekte/-einheiten neu zu gestalten und neu zu definieren.

Verwandte Themen