Tekrarlanabilir okumada tutarsızlık


10

http://www.postgresql.org/docs/9.2/static/transaction-iso.html

Tekrarlanabilir Okuma modu, her işlemin veritabanının tamamen kararlı bir görünümünü gördüğüne dair kesin bir garanti sağlar. Bununla birlikte, bu görüş her zaman aynı seviyedeki eşzamanlı işlemlerin bazı seri (birer birer) yürütülmesi ile tutarlı olmayacaktır. Örneğin, bu düzeydeki salt okunur bir işlem bile, bir toplu işin tamamlandığını göstermek için güncellenmiş bir kontrol kaydı görebilir, ancak kontrol kaydının daha önceki bir revizyonunu okuduğu için toplu işin mantıksal bir parçası olan ayrıntı kayıtlarından birini görmez . Bu yalıtım düzeyinde çalışan işlemlerle iş kurallarını uygulama girişimlerinin, çakışan işlemleri engellemek için açık kilitleri dikkatli bir şekilde kullanmadan doğru bir şekilde çalışması muhtemel değildir.

Tekrarlanabilir okuma modunda mümkün olmayan bir hayali okuma değil mi?

Belgeler, tekrarlanabilir bir okuma işlemindeki bir sorgunun işlemin başlangıcından itibaren bir anlık görüntü gördüğünü, ardından bir sorgunun tutarsız verileri okumasının nasıl mümkün olabileceğini söylüyor.

Yanıtlar:


5

İşte o bölümü okudum. İtiraf edeceğim kafa karıştırıcı.

İki tablom olduğunu varsayalım:

CREATE TABLE batch (
   id serial not null unique,
   control_code text primary key,
   date_posted date not null default now()
);

CREATE TABLE details (
   batch_id int not null references batch(id),
   description text,
   primary key(batch_id, description)
);

Şimdi, farklı işlemlere toplu iş ve ayrıntı kayıtlarını eklediğimizi varsayalım. 1. Oturum bir toplu iş ekler ve ayrıntıları eklemeye başlar, ancak tamamlanmadan 2. oturum başlar. Oturum 2, toplu başlık bilgisini görmeye başlar, ancak kullanıcıyı hiçbir kayıt bulunmadığını bildirmek için ayrıntılardaki taahhüdü beklemez. Toplu işiniz ve ayrıntılarınız tamamen aynı işlemdeyse, bu asla bir sorun değildir.

bu, kullanıcıya hiçbir satır bulunmadığını bildirip bildirmeme konusunda karar vermeden önce önceki eklemenin tamamlanmasını ve tamamlanmasını veya geri dönmesini beklediğiniz yerde serileştirilebilir durumdan farklı olacaktır.


3

Orada bir belge YİNELENEBİLİR OKU işlem yalıtım düzeyinde işlemlerin belirli kombinasyonları ile oluşabilecek bazı sorunları göstermek PostgreSQL Wiki ve bunlar PostgreSQL sürümü 9.1 ile SERIALIZABLE işlem yalıtım düzeyi başında kaçınılır nasıl.

Ayrıca , TEKRARLANABİLİR READ düzeyi READ-ONLY işleminin tutarsız verileri okumasının nasıl mümkün olabileceğine ilişkin bir örnek de içerir .


@dezso Şununla ilgilenebilirsin
907th

1

Prensip olarak "Tekrarlanabilir okuma" izolasyon seviyesinde hayali okumalar (bunu tekrarlanamayan okumalarla karıştırmamaya dikkat edin) mümkündür. Ancak "Tekrarlanabilir okuma" yı seçtiğinizde Postgresql fiili davranış standarttan daha güçlüdür (neredeyse "Seri hale getirilebilir" bir yalıtım), böylece aslında hayali okumalara sahip olmazsınız. Dokümanlar :

Okunmamış Okuma seviyesini seçtiğinizde, gerçekten Okundu Taahhüdü alırsınız ve Tekrarlanabilir Okumanın PostgreSQL uygulamasında hayali okumalar mümkün değildir , bu nedenle gerçek izolasyon seviyesi seçtiğinizden daha katı olabilir.

Şimdi, bu uyarı her zaman aynı seviyedeki eş zamanlı işlemlerin seri (her seferinde bir tane) yürütülmesi ile tutarlı olmayacaktır "? Sanırım (emin değilim) anlamına gelir "dışarıdan" anlık görüntü (işlemin başında sabit) sonunda diğer işlemlerden satırları içerebilir ama aynı işlemden bazı diğer satırları dahil etmek başarısız.

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.