Büyük veri hacimlerinin toplu olarak içe aktarımı için özel komutlar ve araçlar kullanılır: BULK INSERT, COPY, LOAD DATA INFILE, SQL Server için bcp, PostgreSQL için psql gibi dış araçlar, ayrıca ETL araçları.
PostgreSQL örneği:
COPY staging_table (id, name, age) FROM '/path/to/data.csv' DELIMITER ',' CSV HEADER; -- Veri kontrolü, doğrulamadan sonra ana tabloya aktarım INSERT INTO prod_table (id, name, age) SELECT id, name, age FROM staging_table WHERE age >= 0 AND name IS NOT NULL;
Soru: Neden büyük bir tabloya yapılan bulk insert işlemi sonrası indeksli tablo üzerindeki sonraki işlemlerde keskin bir performans düşüşü gözlemlenebilir?
Cevap: Çünkü bulk insert tabloyu doğrudan doldurur ve indeksler yalnızca ana içe aktarma işleminden sonra yeniden oluşturulur/güncellenir, bu da tabloyu kilitleyebilir ve kaynak tüketebilir. İçe aktarma süresi boyunca ikincil indekslerin devre dışı bırakılması ve sonrasında yeniden oluşturulması önerilir veya partilere bölünmesi gerekir.
Hikaye
Lojistik projesinde, geçici tablo kullanılmadan BULK INSERT ile milyonlarca satır yüklendi — geçersiz veriler "geçersiz bilgiyle" indeksleri doldurdu, dolayısıyla FK ve kontrol kısıtlamaları nedeniyle kötü satırların bir kısmını "geri almak" mümkün olmadı. Veriler elle temizlemek zorunda kaldı.
Hikaye
Kurumsal hizmette, bulk insert, içe aktarma süresini 10 kat artırdı, çünkü yükleme sırasında ikincil indeksler devre dışı bırakılmamıştı ve her adımda yapı yeniden hesaplanıyordu.
Hikaye
Fintech ürününde büyük dosyaların yüklenmesinde bulk insert, hataların doğru işlenmemesi nedeniyle tüm satırları yükleyemedi — önemli bilgilerin bir kısmını kaybettik ve bunu birkaç gün sonra dış kaynaklarla karşılaştırmada fark ettik.