2016-04-28 12 views
1

Ich habe gerade eine Pg-Datenbank entworfen und muss eine Möglichkeit wählen, meine DB mit Daten zu befüllen, die Daten bestehen aus TXT- und CSV-Dateien, können aber generell jede Art von Datei sein, die Zeichen mit Trennzeichen enthält. m Programmierung in Java, damit die Daten dieselbe Struktur haben (es gibt viele verschiedene Arten von Dateien und ich muss herausfinden, was jede Spalte der Datei darstellt, damit ich sie einer Spalte meiner Datenbank zuordnen kann) Ich dachte an zwei Wege:Effizienter Datenimport PostgreSQL DB

  • Konvertieren Sie die Dateien in eine gleiche Art von Datei (JSON) und dann die DB erhalten regelmäßig die JSON-Datei zu überprüfen und deren Inhalt importieren.

  • Direkte Verbindung zur Datenbank über JDBC senden Sie die Zeichenfolgen an die DB (ich muss noch eine Sicherungsdatei erstellen, die enthält, was in die DB eingefügt wurde, in beiden Fällen wird eine Datei erstellt und geschrieben).

Welchen Weg würden Sie mit der Zeit Effizienz gehen? Ich bin irgendwie versucht, die erste zu verwenden, da es einfacher wäre, eine json-Datei in der DB zu handhaben. Wenn Sie einen anderen Vorschlag haben, wäre das auch willkommen!

+0

Was meinst du mit Handle eine JSON-Datei in der db? Beabsichtigen Sie, reine JSON-Dokumente in der Datenbank zu speichern? Während postgresql JSONB Feld ist ziemlich cool, das ist nicht der ideale Weg, Postgresql zu verwenden. eine Nosql-Lösung wäre besser. – e4c5

+0

Nein, ich wollte die Daten aus dem JSON importieren, die ich über JSONB weiß, aber in meinem Fall wäre es nicht sehr nützlich –

Antwort

1

JSON oder CSV

Wenn Sie die Freiheit haben, Ihre Daten entweder in CSV oder JSON-Format zu konvertieren, ist CSV, das zu wählen. Dies liegt daran, dass Sie dann COPY FROM verwenden können, um große Datenmengen gleichzeitig in postgresql zu laden.

CSV wird von COPY unterstützt, aber JSON ist nicht.

Werte direkt einfügen.

Dies ist der Ansatz, wenn Sie nur ein paar (oder vielleicht sogar ein paar tausend) Datensätze einfügen müssen, aber nicht für eine große Anzahl von Datensätzen geeignet sind, weil es langsam ist.

Wenn Sie diesen Ansatz wählen, können Sie die Sicherung mit COPY TO erstellen. Wenn Sie jedoch der Meinung sind, dass Sie die Sicherungsdatei mit Ihrem Java-Code erstellen müssen. Wenn Sie das Format als CSV-Datei auswählen, können Sie das Massenladen wie oben beschrieben durchführen.

+0

Die Daten können manchmal ziemlich groß werden, so dass der erste vorgeschlagene Ansatz besser ist. Aber ist JSON schlecht mit COPY FROM zu verwenden? Die Methode [hier] (http://stackoverflow.com/questions/33129526/loading-json-data-from-a-file-into-postgres) dauert etwas länger als die Verwendung einer CSV, aber es ist immer noch sicher, oder? wir müssen nur sicherstellen, dass jede Zeile in der JSON-Datei eine Zeile in der DB darstellt (wir importieren die JSON-Datei im Wesentlichen in eine temporäre Tabelle, extrahieren dann die gewünschten Werte und fügen sie in eine entsprechende Spalte ein) –

+0

Ja, in diesem Fall Beispiel: Der gesamte Datensatz wird als einzelne Spalte geladen - ein JSON-Feld (jetzt durch JSONB-Felder veraltet). Das ist nicht relational. Wenn Sie Ihre Daten auf diese Weise speichern möchten, ist dies durchaus möglich und sicher, aber nicht optimal. Sie nutzen keine der Funktionen eines RDBMS – e4c5

+0

Also im Grunde keine andere Methode, die JSON-Daten zu erhalten, ohne durch ein JSONB-Feld zu gehen oder das gesamte JSON-Datenzeichen nach dem Zeichen zu lesen? –