data-infra
Sözlük ↗Upsert (Ekle-ya da-Güncelle)
Upsert, bir satır yoksa yazan, varsa güncelleyen tek bir ifadedir. Veritabanları bunu farklı yazımlarla sunar — INSERT ... ON CONFLICT, MERGE, INSERT ... ON DUPLICATE KEY UPDATE — ama amaç aynıdır: bir yazmayı bir anahtara göre etkisiz-tekrarlanabilir kılmak; böylece tekrarlamak yinelenmiş bir satır ya da bir hata değil aynı son durumu üretir. Upsert'lerin veri hatlarının ve entegrasyonların bel kemiği olmasının nedeni bu özelliktir. Bir kaynağı yeniden okuyan bir eşitleme, aynı olayı iki kez alabilen bir webhook tüketicisi, kısmi bir hatadan sonra yeniden denenen bir toplu iş — yazma anahtarlıysa ve etkisiz-tekrarlanabilirse hepsi güvenlidir, değilse hepsi yineleme üretir. Aynı akıl yürütme, geç gelen kayıtlara dayanmanın standart yolu olan ve önceki pencereyle kasten örtüşen gecelik bir yükleme için de geçerlidir. Bir upsert'in düzgün davranıp davranmayacağını iki ayrıntı belirler. Çakışma anahtarı üzerinde gerçek bir benzersizlik kısıtı gerekir; olmadığında veritabanının çakışmayı saptayacağı bir şey yoktur ve uygulama düzeyinde önce-kontrol-sonra-ekle mantığı eşzamanlılıkta yarışı kaybeder. Ve güncelleme dalı hangi sütunların üzerine yazacağını açıkça söylemelidir — her sütunu körlemesine değiştirmek, kaynağın bilmediği alanları siler: yerel olarak hesaplanmış bir durum ya da başka bir sistemin sahibi olduğu bir değer gibi. Yüksek hacimli upsert'ler dizin aramaları nedeniyle düz eklemelerden pahalıdır; bu yüzden toplu yüklemeler bazen geçici bir tabloya hazırlanıp tek seferde birleştirilir.
İlgili terimler