ProgramlamaVeri Mühendisi

Veri tablosuna dosyadan toplu veri içe aktarmayı (bulk insert) nasıl düzenlersiniz, maksimum performansı sağlamak ve verilerin doğruluğunu garanti etmek için? Farklı DBMS'lerde hangi araçları kullanmalısınız ve hata kontrolü ile ilgili hangi incelikler vardır?

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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ı.

Anahtar noktalar:

  • Gereksiz dönüşümler olmadan CSV/TXT formatlarını kullanın.
  • Veri kontrolü gerekmiyorsa, içe aktarma süresi boyunca tetikleyicileri ve indeksleri devre dışı bırakın — bu hız artırır.
  • İçe aktarma öncesinde ve/veya sonrasında referans bütünlüğünü kontrol edin ve doğrulayın.
  • Geçici bir tabloya içe aktarım yapın, doğrulayın, ardından ana tabloya toplu ekleme yapın.
  • Destekleniyorsa, verileri partilere ayırmaya çalışın.
  • Dönüş kodlarını/logları kontrol edin — bulk insert hataların atlanmasına izin verebilir.

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;

Aldatmaca soru.

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.