2016-05-12 2 views
0

Ich habe eine Tabelle, die etwa 25-30 Millionen Zeilen und 15 Spalten hat. Die meisten von ihnen sind statisch oder erhalten Echtzeit-Updates. Aber für einige der Spalten (3 bis 4) bekomme ich die Daten von hdfs einmal pro Tag und aktualisiere es, was bedeutet, dass diese Spalten einmal am Tag aktualisiert werden müssen.Der beste Weg, um 3-4 Spalten in einer Tabelle von 30 Millionen täglichen Aufzeichnungen zu aktualisieren

Ich habe versucht, eine neue Tabelle aus der hdfs-Ausgabe zu erstellen und dabei auf die Haupttabelle zu kommen, aber das scheint ewig zu dauern. Ich habe versucht, Batch-Updates zu tun, aber das dauert auch zu lange.

Was ist der beste Weg, dies zu tun?

ich Postgres als meine db

+2

Wenn Sie Daten aktualisieren möchten, müssen Sie sich zuerst für die von Ihnen verwendete Datenbank entscheiden und die Frage entsprechend kennzeichnen. Ich habe die überflüssigen Datenbank-Tags entfernt. –

+0

@GordonLinoff bearbeitet die Frage. Ich habe andere relational dbs auch markiert, so dass Leute mit ähnlicher Erfahrung und mit einigen anderen rdbms und nicht Postgres geben auch Eingaben hier – Peter

+0

@Peter Probleme und Lösungen dieser Art neigen dazu, RDMS spezifisch sein, sondern kann auch zu anderen DBs. Wenn Sie generec Lösung für alle wollen, verwenden Sie einfach sql-Tag. Es wäre auch unmöglich, einen "besten Weg" für alle zu finden. – Alex

Antwort

2

beste Weg, um eine Leistung von Update/Insert-Abfrage zu verbessern verwende ist durch einen Bulk Insert mit/Aktualisieren

Bitte einen Blick auf Beiträge unter denen haben helfen Sie:

MySQL bulk INSERT or UPDATE

Does splitting up an update query improve performance

+0

Bevor jemand diese Antwort downvotes, bitte beachten Sie, dass die ursprüngliche Frage jedes erdenkliche SQL-Tag hatte, also war dies eine faire Antwort zu der Zeit (obwohl ein Zitat von der verknüpften Seite es besser gemacht hätte) – e4c5

+0

Ich habe in erwähnt die Frage selbst die Batch-Updates sind sehr sehr lang – Peter

0

Ich würde etwas wie das Erstellen einer neuen Tabelle mit dem Befehl CREATE TABLE AS ... versuchen, indem ich eine Verknüpfung zwischen der neuen Tabelle und der Tabelle, die Sie mit den Stapeldaten erstellen, anstelle der Aktualisierung der alten Tabelle verwende.

http://www.postgresql.org/docs/9.4/static/sql-createtableas.html

Wenn Sie platzieren, dass innerhalb einer Transaktion, können Sie es in einer Funktion setzen können, und danach können Sie nur die Tabellen umbenennen, um sie zu wechseln oder einfach nur das alte entfernen und das neue umbenennen.

Ich habe Prozesse gesehen, wo diese Strategie wie eine Uhr für Batch-Jobs funktioniert (Erstellen einer neuen Tabelle ist schneller als das Aktualisieren der alten).

Sie müssen es testen und sehen, ob das für Ihre Tabellen passt, und auch die Indizes, die Sie haben.

Viel Glück!

Hinweis: Sie müssen auch die Indizes und Einschränkungen der neuen Tabelle als create-Tabelle hinzufügen, da sie diese nicht enthalten.

+0

Ich habe eine aktualisierbare Sicht auf diese 2 Tabellen erstellt, scheint es gut zu funktionieren. – Peter

Verwandte Themen