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 .