Veritabanları, satırları güncellemek zorunda kaldıklarında silme ve ekleme yapar mı?


13

Bu yüzden bugün bir profesör bize veritabanının bir güncelleme yapması gerektiğinde, dahili olarak (düşük seviyede) bir silme ve daha sonra güncellenmiş alanlarla bir ekleme yaptığını söyledi. Daha sonra bunun tüm veritabanlarında yapılmış bir şey olduğunu söyledi ve sonra bunun bir anlamı olmadığını düşündüğümü ancak pozisyonumu destekleyecek yeterli kaynağım olmadığını söyleyen bir tartışma başlattım. O çok şey biliyor gibi görünüyor ama dbs neden bunu anlayamıyorum.

Yani, bir alanı güncellerseniz ve bu satır için daha fazla alana ihtiyacınız varsa, satırı fiziksel olarak silebilir ve yeni verilerle sonuna koyabilirim. Ancak, örneğin kullanılan alanı azaltırsanız, neden sonunda siler ve yeniden yerleştirirsiniz?

Bu doğru mu? Avantajları nelerdir?


1
Belirli bir veritabanı türünden mi bahsediyordu?
Tom V - topanswers.xyz'yi deneyin

1
@TomV sql sunucusu hakkında konuşuyordu ama sonra tüm dbs böyle yapıldığını söyledi ..
Pablo Matias Gomez

Yanıtlar:


16

Bu doğru mu?

Hayır, bu bir uygulama detayıdır. Bir veritabanı, uygun bir güncelleştirme uygulamaya koyabilir yerde o kadar seçerse.

Avantajları nelerdir?

Bir güncelleştirmeyi bir silme ve ardından bir eke bölmek genellikle uygulamayı kolaylaştırır. Potansiyel yan faydalar arasında , bölünmüş silme / ekleme işlemlerini uygun şekilde sıralayarak benzersiz bir dizinde geçici anahtar ihlallerini önleme yeteneği bulunur .

Bölünmüş güncelleme olabilir biraz daha yavaş olabilir ve (her zaman mümkün zaten değildir) gerçek yerinde güncelleştirmek daha fazla günlüğü oluşturuyor.

Kin bir yorumda belirtildiği gibi, bir örneğe ihtiyacınız varsa (SQL Server için) bakınız:

Ayrıca MVCC'nin uygulanmasıyla da ilgilidir. MVCC ile ilgili Wikipedia sayfasında bahsedilmektedir:

Bir MVCC veritabanının bir veri öğesini güncellemesi gerektiğinde , eski verilerin üzerine yeni veriler yazmaz, bunun yerine eski verileri eski olarak işaretler ve yeni sürümü başka bir yere ekler. Bu nedenle, birden fazla sürüm saklanır, ancak yalnızca en son sürüm vardır. Bu, okuyucuların, başkası tarafından kısmen değiştirilmiş veya silinmiş olsa bile, okumaya başladıklarında orada bulunan verilere erişmesini sağlar.

Bruce Momjian'ın PostgreSQL Internals pdf'inin 60. sayfasına bakınız (Postgres MVCC'yi kullanır): " UPDATEetkili bir DELETEve bir INSERT."

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.