Neden bu kadar çok programcı nesne yaygınlığı katmanlarından kesinlikle nefret ediyor?


9

Prevalans, ikili serileştirme ve önceden yazma günlüğüne dayanan bir bellek içi nesne modeline ACID özellikleri sağlamak için basit bir tekniktir. Şöyle çalışır:

  • Anlık görüntü ile başlayın. Nesne modelini seri hale getirin ve bir dosyaya yazın.
  • Günlük dosyası oluşturun. Nesne modeline yapılan her çağrı için çağrıyı ve argümanlarını serileştirin.
  • Dergi çok büyüdüğünde, kapatıyorsunuz veya başka bir şekilde uygunsa, bir kontrol noktası gerçekleştirin: yeni bir anlık görüntü yazın ve günlüğü kesin.
  • Bir çarpışmadan veya elektrik çarpmasından geri almak veya kurtarmak için, son anlık görüntüyü yükleyin ve günlüğe kaydedilen tüm aramaları yeniden yürütün.

Bu işi yapmak için gerekli önlemler şunlardır:

  • Değişken nesne referanslarının kaçmasına veya yaygınlık katmanına girmesine izin vermeyin. RPC yapıyormuşsunuz gibi bir çeşit proxy veya OID şemasına ihtiyacınız var. (Bu yaygın bir acemi hatasıdır, ' vaftiz sorunu ' olarak adlandırılmıştır .)
  • Bir çağrıdan erişilebilen tüm mantık tamamen belirleyici olmalı ve iş mantığı açısından anlamlı I / O veya OS çağrıları yapmamalıdır. Tanılama günlüğüne yazmak büyük olasılıkla sorun değil, ancak sistem saatini almak veya eşzamansız bir temsilci başlatmak genellikle uygun değildir. Böylece günlük, farklı bir makinede veya farklı bir zamanda geri yüklense bile aynı şekilde yeniden oynatılır. (Çoğu yaygınlık kodu, işlem zaman damgasını almak için alternatif bir zaman araması sağlar.)
  • Yazar eşzamanlılığı, dergi yorumlamasında belirsizlik getirir, bu nedenle yasaktır.

Çünkü ...

  • insanlar çok uygun olmayan bir proje üzerinde birini kullanmak denedikten sonra onlar için kötü bir tat geliştirdi * kendisine?
  • Klaus Wuestefeld'in sert savunucusu insanları kapattı mı?
  • zorunlu programlama modelini sevenler G / Ç'yi hesaplamadan ayırmaktan hoşlanmaz , bunun yerine G / Ç ve iş parçacığı aramaları ile hesaplamayı harmanlamayı mı tercih ederler?
  • yaygınlık katmanları kavramsal olarak o kadar basittir ve içinde yaşadıkları çerçevenin özelliklerine o kadar yakındırlar ki, genellikle proje için özel olarak yuvarlanırlar, bu da onları çok yabancı / standart dışı / riskli yapar mı?
  • Yapmamaya dikkat etmen gereken şeyi düz tutmak çok zor mu?
  • Yeni başlayanların kafaları, okulda yazmayı öğrendikleri aynı iki katmanlı veritabanı tabanlı uygulama olmayan bir şeyle karşılaştıklarında patlıyor gibi görünüyor mu? ;)

* RAM içinde tüm veri seti uyuyor , sen yazar eşzamanlılık gerekmez ve bir veri deposuna geçici sorgular, raporlama veya ihracat yapmaya gerek yoktur. SQLite'den özür dilerken, prevalans, Oracle'ın yerine değil, kayıt dosyalarındaki bir gelişmedir.


Aha. Bir ismi olup olmadığını merak ettim. Bana her zaman mantıklı geldi, onun için hiç bir adım olmadı.
greyfade

9
Neden bahsediyorsun?
TheLQ

Bunu ilk kez duydum. Bu ne?
Jonn

Açıklama eklendi.
Jeffrey Hantin

1
Ohhh .. Kavramı biliyorum ama bunu daha önce hiç yapmadım. Bana çok şık gözüküyor. Eminim bir sürü devs "kesinlikle nefret" bir şey değil.
Jonn

Yanıtlar:


6

Bence bazı sorun onlar çok özel kullanım durumda (sizin uygun olmayan nedeni) olmasıdır. Bu yaklaşımı kullanan sistemler üzerinde çalıştım ve çalıştım ve aslında bu sorun olan bir sorununuz olduğunda harika bir çözüm olabilir.

Başka bir bölüm, 10 yıldan fazla bir süre önce bulmak için kullandığınız daha fazla özel veri depolama bitine benziyor ve aynı tuzaklardan bazılarına sahip (örneğin toplu güncellenmiş btreive'ı düşünün) "çok özel" bir nokta, ama aynı zamanda onunla kibarca çalışan raf parçalarını bulmayı zorlaştırıyor.

Son bölüm, birçok durumda sorgulanması çok zor olabilir ve genel olarak insanlar şu anda cevaplarını almaya oldukça alışkındır.


11

Sanırım ilk önce bu kadar çok geliştiricinin onlardan kesinlikle nefret ettiğini göstermeniz gerekiyor. Ben öyle düşünmüyorum. Bunun için bir çeşit desen resmiyete o Fowler, bir süre geri düşünün burada .


Evet, biraz kafam karıştı. Doğru bir nedenle kullanırsanız harika bir araç gibi görünürler.
Matt Olenik

Bunu sadece söylüyorum çünkü iş arkadaşlarından bu konuda inanılmaz bir keder yakaladım.
Jeffrey Hantin

1
@Jeffrey Hantin: Tembel ve kapalı fikirli görünüyorlar.
Steven Evers

1
Oh, ve desenin asıl köşe taşı c2.com/cgi/wiki?TransactionTape
Jeffrey Hantin

4

Sorunun cevabı, teorinin basit olmasına rağmen uygulamanın olmadığıdır.

Sadece böyle bir kurulumu test etmek onlarca test vakası gerektirir, mutli süreci veya çok iş parçacıklı kod ekler ve bu hem kalıcılık hem de kurtarma için test edilmesi gereken yüzlerce olası koşula atlar.

CICS, Smokin, Weblogic, Websphere, JBOSS veya .NET gibi herhangi bir işlem izleyicisi, tüm bu tesisleri temiz ve test edilmiş bir şekilde sağlayacaktır. Ve herhangi bir veritabanı çoğu uygulama için "yeterli" işlem / kalıcılık sağlayacaktır.

Bu tekerleğin büyük bir vakası uzun zaman önce icat edildi ve mükemmelleştirildi.


Bu ve birçok "mimar" ın, tasarımın çözülmesi gereken sorun için ne kadar uygunsuz olduğu fark etmeksizin, herhangi bir şeye itmeye çalıştıkları bir "lezzet" tercih etme eğilimi.
jwenting

@jwenting Peki bu 'katı savunuculuk' noktası altına giriyor mu?
Jeffrey Hantin

2

Önkoşullar, özellikle bellekte çalışırken ACID uyumluluğuna ihtiyaç duymayan çoğu sistemde kodlamak için biraz zahmetli geliyor. Genel gider de biraz kötü geliyor - orada devlet izleme bir sürü vardır.

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.