PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

PostgreSQL do Data-Warehouse:Najlepsze podejście do ETL / ekstrakcji danych w czasie zbliżonym do rzeczywistego

Zakładając, że interesujące Cię tabele mają (lub mogą być wzbogacone) unikalny, indeksowany klucz sekwencyjny, znacznie lepszą wartość uzyskasz, po prostu wydając SELECT ... FROM table ... WHERE key > :last_max_key z wyjściem do pliku, gdzie last_max_key to ostatnia wartość klucza z ostatniej ekstrakcji (0, jeśli pierwsza ekstrakcja). To przyrostowe, oddzielone podejście pozwala uniknąć wprowadzenie opóźnienia wyzwalacza w ścieżce danych wstawiania (czy to niestandardowe wyzwalacze, czy zmodyfikowane Slony) i w zależności od konfiguracji może lepiej skalować się z liczbą procesorów itp. (Jeśli jednak musisz także śledzić UPDATE s , a klucz sekwencyjny został dodany przez Ciebie, a następnie Twoja UPDATE instrukcje powinny SET kolumna klucza do NULL więc otrzymuje nową wartość i jest wybierany przez następną ekstrakcję. nie będziesz w stanie śledzić DELETE s bez wyzwalacza). Czy to miałeś na myśli, kiedy wspomniałeś o Talendzie?

Nie korzystałbym z funkcji rejestrowania, chyba że nie możesz wdrożyć powyższego rozwiązania; rejestrowanie najprawdopodobniej wiąże się z zablokowaniem narzutu aby upewnić się, że wiersze dziennika są zapisywane sekwencyjnie i nie nakładają się/nie nadpisują się nawzajem, gdy wiele backendów zapisuje do dziennika (sprawdź źródło Postgres). Narzut blokowania może nie być katastrofalny, ale możesz się bez niego obejść, jeśli możesz użyć przyrostowego SELECT alternatywny. Co więcej, zagłuszałoby rejestrowanie wyciągów wszelkie przydatne komunikaty OSTRZEGAWCZE lub BŁĘDOWE, a samo analizowanie nie będzie natychmiastowe .

O ile nie chcesz analizować WAL (w tym śledzenie stanu transakcji i być gotowym do przepisywania kodu za każdym razem, gdy uaktualnisz Postgresa), niekoniecznie będę używał WAL-ów — to znaczy, chyba że masz dostępny dodatkowy sprzęt , w takim przypadku możesz wysłać pliki WAL na inny komputer w celu wyodrębnienia (na drugiej maszynie możesz bezwstydnie używać wyzwalaczy -- a nawet rejestrowanie instrukcji -- ponieważ cokolwiek się tam dzieje, nie ma wpływu na INSERT /UPDATE /DELETE wydajność na maszynie podstawowej.) Zauważ, że pod względem wydajności (na maszynie podstawowej), o ile nie możesz zapisywać dzienników do sieci SAN, uzyskasz porównywalny spadek wydajności (w kategoriach thrashing pamięci podręcznej systemu plików, głównie) z dostarczania WAL-ów na inną maszynę od uruchomienia przyrostowego SELECT .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Automatyzacja Barmana z Puppet:it2ndq/barman (część pierwsza)

  2. Sequelize Error:Relacja nie istnieje

  3. Railsy ignorują stałe w instrukcji SQL SELECT

  4. Dowiedz się, czy użytkownik ma uprawnienia do wyboru/aktualizacji/... tabeli/funkcji/... w PostgreSQL

  5. Grupowanie według daty, z 0, gdy count() nie daje żadnych wierszy