PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL to Data-Warehouse:Bester Ansatz für Echtzeit-ETL / Extraktion von Daten

Angenommen, Ihre relevanten Tabellen haben einen eindeutigen, indizierten, sequentiellen Schlüssel (oder können damit erweitert werden), dann erhalten Sie einen viel besseren Wert, wenn Sie einfach SELECT ... FROM table ... WHERE key> ausgeben:last_max_key mit Ausgabe in eine Datei, wobei last_max_key ist der letzte Schlüsselwert der letzten Extraktion (0 bei der ersten Extraktion). Dieser inkrementelle, entkoppelte Ansatz vermeidet Einführung von Triggerlatenz im Einfügungsdatenpfad (sei es benutzerdefinierte Trigger oder modifizierter Slony) und könnte je nach Setup besser mit der Anzahl der CPUs usw. skalieren. (Wenn Sie jedoch auch UPDATE verfolgen müssen s , und der fortlaufende Schlüssel wurde von Ihnen hinzugefügt, dann Ihr UPDATE Anweisungen sollten SET sein die Schlüsselspalte auf NULL so erhält es einen neuen Wert und wird von der nächsten Extraktion ausgewählt. Sie wären nicht in der Lage, DELETE zu verfolgen s ohne Trigger.) Hatten Sie das im Sinn, als Sie Talend erwähnten?

Ich würde die Protokollierungsfunktion nicht verwenden, es sei denn, Sie können die obige Lösung nicht implementieren; Die Protokollierung beinhaltet höchstwahrscheinlich Sperraufwand um sicherzustellen, dass Protokollzeilen sequenziell geschrieben werden und sich nicht überlappen/überschreiben, wenn mehrere Backends in das Protokoll schreiben (überprüfen Sie die Postgres-Quelle). code>AUSWÄHLEN Alternative. Außerdem würde die Anweisungsprotokollierung übertönen keine nützlichen WARN- oder ERROR-Meldungen, und das Parsen selbst erfolgt nicht sofort .

Wenn Sie nicht bereit sind, WALs zu analysieren (einschließlich der Verfolgung des Transaktionsstatus und bereit sind, den Code jedes Mal neu zu schreiben, wenn Sie Postgres aktualisieren), würde ich die WALs auch nicht unbedingt verwenden - das heißt, es sei denn, Sie haben die zusätzliche Hardware verfügbar , in diesem Fall könnten Sie WALs zur Extraktion an einen anderen Computer senden (Auf der zweiten Maschine können Sie Trigger schamlos verwenden -- oder sogar Anweisungsprotokollierung -- denn was auch immer dort passiert, wirkt sich nicht auf INSERT aus /AKTUALISIEREN /LÖSCHEN Leistung auf dem primären Computer.) Beachten Sie, dass Sie in Bezug auf die Leistung (auf dem primären Computer) durch den Versand von WALs einen vergleichbaren Leistungseinbruch (meistens in Bezug auf das Thrashing des Dateisystem-Cache) erhalten würden, es sei denn, Sie können die Protokolle in ein SAN schreiben zu einem anderen Rechner ab dem Ausführen des inkrementellen SELECT .