Büyük veri depolarının ve akışlarının (ETL, göçler) ortaya çıkması, yüz binlerce satırı sadece yüklemek değil, aynı zamanda verilerin ya tamamen yükleneceğini ya da hiçbir şey yüklenmeyeceğini garanti etmek gerektiğini talep etmiştir. SQL'de bu, işlemleri kullanarak atomik bulk operasyonları ile gerçekleştirilir.
Toplu ekleme (Bulk Insert) sırasında hata riski daha yüksektir — bir hatalı satır tüm yüklemeyi bozabilir veya kısmi eklemeye yol açabilir. Bu, finansal, lojistik ve diğer kritik sistemler için kabul edilemez.
Pratik — bulk işlemi bir işlem içinde sarmak, uygun özel komutları (BULK INSERT, COPY) kullanmak ve hataları yakalamak/günlüğe kaydetmektir. Önemli: Hatalı bir satır durumunda tüm bloğun geri alınması gerçekleşir:
SQL Server için örnek:
BEGIN TRAN; BULK INSERT Customers FROM 'C:\data\customers.csv' WITH ( FIELDTERMINATOR = ',', ROWTERMINATOR = ' ', FIRSTROW = 2 ); IF @@ERROR <> 0 ROLLBACK TRAN; ELSE COMMIT TRAN;
PostgreSQL'de (COPY ile örnek):
BEGIN; COPY products FROM '/tmp/products.csv' DELIMITER ',' CSV HEADER; COMMIT;
Anahtar özellikler:
Bulk Insert'te işlemin boyutu performansı ve kilitlemeleri etkiler mi?
Evet, çok büyük miktarlarda uzun süreli kilitlenmelere yol açabilir, işlem günlüklerini doldurabilir ve sunucuyu yavaşlatabilir. En iyisi, işlemleri parça parça yüklemektir (batch), örneğin işlem başına 10000 satır.
Bulk Insert her zaman tüm veritabanı yönetim sistemlerinde atomik midir?
Hayır, bazı veritabanı yönetim sistemlerinde (örneğin, MySQL) bulk insert komutu her zaman otomatik olarak atomik değildir — bunu BEGIN/COMMIT ile manuel olarak sarmalamak gerekir, aksi halde kısmi yüklenme olabilir.
Toplu ekleme sırasında dış anahtarların bütünlüğü garanti edilebilir mi?
Evet, yalnızca yükleme sırasına uyulduğunda: önce üst düzey tablolar, sonra alt düzey tablolar, ya da kısıtlamalar geçici olarak devre dışı bırakılarak. Dış anahtar hatası, bulk insert işleminin tümünü geri alır.
Müşterilerin yüklenmesi sırasında, bir satırdaki hata nedeniyle kısmi yüklemeye yol açtı — günün sonunda veritabanı ve dış kaynak birbirinden senkronize olmadı.
Artılar:
Dosya önceden hata için kontrol edilir, Bulk insert 5000 satıra bölünür, her parça kendi işleminde. Hata kayıtları daha fazla analiz için saklanır.
Artılar: