PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

PostgreSQL ke Data-Warehouse:Pendekatan terbaik untuk ETL/ekstraksi data hampir real-time

Dengan asumsi bahwa tabel yang Anda minati memiliki (atau dapat ditambah dengan) kunci sekuensial yang unik, diindeks, maka Anda akan mendapatkan nilai yang jauh lebih baik hanya dengan mengeluarkan SELECT ... FROM table ... WHERE key > :last_max_key dengan output ke file, di mana last_max_key adalah nilai kunci terakhir dari ekstraksi terakhir (0 jika ekstraksi pertama.) Pendekatan tambahan dan terpisah ini dihindari memperkenalkan latensi pemicu di jalur data penyisipan (baik itu pemicu khusus atau Slony yang dimodifikasi), dan tergantung pada penyiapan Anda, skalanya bisa lebih baik dengan jumlah CPU, dll. (Namun, jika Anda juga harus melacak UPDATE s , dan kunci sekuensial ditambahkan oleh Anda, lalu UPDATE pernyataan harus SET kolom kunci ke NULL sehingga mendapat nilai baru dan diambil oleh ekstraksi berikutnya. Anda tidak dapat melacak DELETE s tanpa pemicu.) Apakah ini yang Anda pikirkan saat menyebut Talend?

Saya tidak akan menggunakan fasilitas pencatatan kecuali Anda tidak dapat menerapkan solusi di atas; logging kemungkinan besar melibatkan penguncian overhead untuk memastikan baris log ditulis secara berurutan dan tidak saling tumpang tindih/timpa satu sama lain ketika beberapa backend menulis ke log (periksa sumber Postgres.) Overhead penguncian mungkin tidak menjadi bencana besar, tetapi Anda dapat melakukannya tanpanya jika Anda dapat menggunakan SELECT alternatif. Selain itu, pencatatan log pernyataan akan hilang pesan PERINGATAN atau KESALAHAN yang berguna, dan penguraian itu sendiri tidak akan berlangsung seketika .

Kecuali Anda bersedia mengurai WAL (termasuk pelacakan status transaksi, dan siap untuk menulis ulang kode setiap kali Anda meningkatkan Postgres), saya juga tidak perlu menggunakan WAL -- yaitu, kecuali jika Anda memiliki perangkat keras tambahan yang tersedia , dalam hal ini Anda dapat mengirim WAL ke mesin lain untuk ekstraksi (di mesin kedua Anda dapat menggunakan pemicu tanpa malu -- atau bahkan pencatatan log pernyataan -- karena apa pun yang terjadi di sana tidak memengaruhi INSERT /UPDATE /DELETE kinerja pada mesin utama.) Perhatikan bahwa dari segi kinerja (pada mesin utama), kecuali Anda dapat menulis log ke SAN, Anda akan mendapatkan kinerja yang sebanding (dalam hal meronta-ronta cache sistem file, sebagian besar) dari pengiriman WAL ke mesin yang berbeda dari menjalankan SELECT . inkremental .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah mungkin menggunakan variabel dan tidak menentukan tipe pengembalian di postgreSQL?

  2. Bagaimana cara menulis bingkai data ke tabel Postgres tanpa menggunakan mesin SQLAlchemy?

  3. jika-pernyataan dengan string yang berisi kondisi

  4. Bagaimana cara melihat kode CREATE VIEW untuk tampilan di PostgreSQL?

  5. Bagaimana cara mengubah kunci utama dari integer ke serial?