Gerçekleştirilmiş Görünüm düzeni

Azure Depolama

Verilerin gerekli sorgu işlemleri için ideal biçimlendirmeye sahip olmadığı durumlarda, bir veya birden çok veri deposundaki veriler üzerinden önceden doldurulmuş görünümler oluşturun. Bu, etkili bir sorgulama ve veri ayıklama işleminin desteklenmesine ve uygulama performansının artırılmasına yardımcı olur.

Bağlam ve sorun

Verileri depolarken, geliştiricilerin ve veri yöneticilerinin önceliği genellikle verilerin nasıl okunduğundan çok nasıl depolandığı bilgisidir. Seçilen depolama biçimi; verilerin biçimi, veri boyutunu ve veri bütünlüğünü yönetme gereksinimleri ve kullanılan depo türü ile genellikle yakından ilişkilidir. Örneğin, NoSQL belge deposu kullandığınızda, veriler genellikle her biri söz konusu varlığa ilişkin tüm bilgileri içeren bir dizi toplama olarak gösterilir.

Ancak bunun sorgular üzerinde olumsuz bir etkisi olabilir. Sorguda yalnızca bazı varlıklara ait verilerin bir alt kümesine ihtiyaç duyulduğunda (tüm sipariş ayrıntılarının yer almadığı birkaç müşteri siparişinin özeti gibi) gerekli bilgilerin edinilmesi için tüm verilerin ayıklanması gerekir.

Çözüm

Verileri, gerekli sonuçlar kümesine uygun bir biçimde gerçekleştiren bir görünümü önceden oluşturmak, etkili sorgulamayı destekleme konusunda yaygın olarak kullanılan bir çözümdür. Gerçekleştirilmiş Görünüm düzeni, kaynak verilerin sorgulama için uygun biçimde olmadığı, uygun bir sorgunun oluşturulmasının zor olduğu veya verilerin ya da veri deposunun yapısı nedeniyle sorgu performansının yetersiz olduğu ortamlarda verilerin önceden doldurulmuş görünümlerinin oluşturulmasını açıklar.

Yalnızca bir sorgu için gerekli olan verilerin bulunduğu bu gerçekleştirilmiş görünümler uygulamaların gereksinim duyduğu bilgileri hızla elde etmesini sağlar. Gerçekleştirilmiş görünümler, tabloları veya veri varlıklarını birleştirmenin yanı sıra hesaplanan sütunların ya da veri öğelerinin geçerli değerlerini, veri öğeleri üzerinde gerçekleştirilen değer birleştirme veya dönüşüm yürütme işlemlerinin sonuçlarını ve sorgunun bir parçası olarak belirtilen değerleri içerebilir. Gerçekleştirilmiş görünüm yalnızca bir sorgu için de iyileştirilebilir.

Gerçekleştirilmiş görünüm ve bunun içerdiği veriler, kaynak veri depolarından yeniden oluşturulabildiğinden gerçekleştirilmiş görünümün ve içerdiği verilerin tamamen atılabilir olması önemli bir noktadır. Gerçekleştirilmiş görünüm hiçbir zaman doğrudan bir uygulama tarafından güncelleştirilmediğinden özelleştirilmiş bir önbellek niteliği taşır.

Görünüme ilişkin kaynak veriler değiştiğinde görünüm en yeni bilgileri içerecek şekilde güncelleştirilmelidir. Bu işlemi otomatik olarak veya sistem özgün verilerde bir değişiklik algıladığında gerçekleştirilecek şekilde zamanlayabilirsiniz. Bazı durumlarda görünümün el ile yeniden oluşturulması gerekebilir. Şekilde Gerçekleştirilmiş Görünüm düzeninin nasıl kullanılabileceğine ilişkin bir örnek gösterilmektedir.

Şekil 1’de Gerçekleştirilmiş Görünüm düzeninin nasıl kullanılabileceğine ilişkin bir örnek gösterilmektedir

Sorunlar ve dikkat edilmesi gerekenler

Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:

Görünümün nasıl ve ne zaman güncelleştirileceği. İdeal olarak, kaynak verilerdeki bir değişikliği belirten bir olay üzerine yeniden oluşturulmalıdır. Ancak, kaynak veriler hızlı bir şekilde değişirse bu, aşırı bir ek yüke neden olabilir. Alternatif olarak, görünümü yeniden oluşturmak için zamanlanmış bir görev, bir dış tetikleyici veya manuel bir eylem kullanmayı düşünebilirsiniz.

Bazı sistemlerde, örneğin yalnızca verileri değiştiren olayların depolarını korumak için Olay Kaynağını Belirleme desenini kullandığınızda gerçekleştirilmiş görünümler gereklidir. Etkinlik deposundan bilgi edinmenin tek yolu, tüm olayları inceleyip geçerli durumu belirlemek için görünümleri önceden hazırlamak olabilir. Olay Kaynağını Belirleme düzenini kullanmıyorsanız bir gerçekleştirilmiş görünümün yararlı olup olmadığını değerlendirmeniz gerekir. Gerçekleştirilmiş görünümler özel olarak bir sorguya veya az sayıda sorguya uyarlanmış olma eğilimindedir. Çok sayıda sorgu kullanılıyorsa gerçekleştirilmiş görünümler kabul edilemez nitelikte depolama kapasitesi gereksinimlerine ve depolama maliyetlerine neden olabilir.

Görünümü oluştururken ve zamanlanmış olarak gerçekleşiyorsa görünümü güncelleştirirken veri tutarlılığı üzerindeki etkiyi göz önünde bulundurun. Kaynak veriler görünümün oluşturulduğu noktada değişiyorsa verilerin görünümdeki kopyası, özgün verilerle tam olarak tutarlı olmayacaktır.

Görünümü nerede depolayacağınızı göz önünde bulundurun. Görünümün özgün verilerle aynı depoda veya bölümde yer alması gerekmez. Farklı birkaç bölümden birleştirilmiş bir alt küme olabilir.

Bir görünüm kaybolursa yeniden oluşturulabilir. Bu nedenle, görünüm geçiciyse ve verilerin geçerli durumunu yansıtarak yalnızca sorgu performansını iyileştirmek veya ölçeklenebilirliği artırmak için kullanılıyorsa bir önbellekte veya daha az güvenilir bir konumda saklanabilir.

Gerçekleştirilmiş bir görünüm tanımlarken, mevcut veri öğelerinin hesaplanmasına veya dönüştürülmesine, sorguda iletilen değerlere veya uygun olduğu durumlarda bu değerlerin bileşimlerine göre bu görünüme veri öğeleri ya da sütunları ekleyerek görünümün değerini maksimuma çıkarın.

Performansı daha da artırmak amacıyla, depolama mekanizmasının desteklediği ölçüde malzemeleştirilmiş görünümü dizinlemeyi değerlendirin. Çoğu ilişkisel veritabanı, Apache Hadoop’a dayalı büyük veri çözümlerinde olduğu gibi görünümler için dizin oluşturmayı destekler.

Bu düzenin kullanılacağı durumlar

Bu desen aşağıdaki durumlarda kullanışlıdır:

  • Doğrudan sorgulamanın zor olduğu veya sorguların normalleştirilmiş, yarı yapılandırılmış veya yapılandırılmamış şekilde depolanan verileri ayıklamak için son derece karmaşık olması gerektiği veriler üzerinde malzemeli görünümler oluşturma.
  • Sorgu performansını önemli ölçüde artırabilecek veya kullanıcı arabirimi için, raporlama için ya da görüntüleme için doğrudan kaynak görünümü veya veri aktarımı nesnesi işlevi görebilecek geçici görünümler oluşturma.
  • Veri deposuyla bağlantının her zaman kullanılabilir durumda olmadığı bağlantılı veya bağlantısız senaryoları sıklıkla destekleme. Görünüm bu durumda yerel olarak önbelleğe alınabilir.
  • Kaynak veri biçimiyle ilgili bilgi sahibi olmayı gerektirmeyen bir şekilde sorguları basitleştirme ve verileri deneme amaçlı olarak gösterme. Örneğin, farklı tabloları bir veya birden fazla veritabanında ya da NoSQL depolarındaki bir veya birden fazla etki alanında birleştirme ve sonra verileri nihai kullanıma uyacak şekilde biçimlendirme.
  • Güvenlik ve gizlilik nedenleriyle genel olarak erişilebilir, değiştirilmeye açık veya kullanıcılara tamamen açık olmaması gereken kaynak verilerin belirli alt kümelerine erişim sağlama.
  • Farklı veri depolarını birleştirerek, her birinin özelliklerinden yararlanmak. Örneğin, başvuru veri deposu olarak, yazma konusunda etkili bir bulut deposu kullanma ve gerçekleştirilmiş görünümleri tutmak için iyi bir sorgu ve okuma performansı sunan ilişkisel bir veritabanı kullanma.
  • Mikro hizmetleri kullandığınızda, veri depolama alanları da dahil olmak üzere bunları gevşek bir şekilde bağlamanız önerilir. Bu nedenle, maddileştirilmiş görünümler hizmetlerinizdeki verilerinizi birleştirmenize yardımcı olabilir. Mikroservis mimarinizde veya belirli senaryonuzda malzemeleştirilmiş görünümler uygun değilse, domain driven design'e (DDD) uygun, iyi tanımlanmış sınırları ve verilerini ona göre toplayan bir yapıyı göz önünde bulundurun.

Bu desen aşağıdaki durumlarda kullanışlı değildir:

  • Veri kaynağının basit ve kolay bir şekilde sorgulanabilmesi.
  • Veri kaynağının çok hızlı bir şekilde değişmesi ya da bir görünüm kullanılmadan erişilebilmesi. Bu tür durumlarda, görünüm oluşturmaya yönelik işleme ek yükünden kaçınmanız gerekir.
  • Tutarlılık yüksek öncelik taşır. Görünümler özgün verilerle her zaman tam olarak tutarlı olmayabilir.

İş yükü tasarımı

Bir mimar, Azure Well-Architected Framework sütunları kapsamında yer alan hedefleri ve ilkeleri ele almak için Materialized View desenini iş yükü tasarımında nasıl kullanabileceğini değerlendirmelidir. Örneğin:

Sütun Bu desen sütun hedeflerini nasıl destekler?
Performans Verimliliği , ölçeklendirme, veri ve kod iyileştirmeleri aracılığıyla iş yükünüzün talepleri verimli bir şekilde karşılamasını sağlar. Gerçekleştirilmiş görünümler, veritabanı altyapısının veya istemcinin her istek için yeniden derlemesini gerektirmeden karmaşık hesaplamaların veya sorguların sonuçlarını depolar. Bu tasarım, genel kaynak tüketimini azaltır.

- PE:08 Veri performansı

Herhangi bir tasarım kararında olduğu gibi, bu desenle ortaya konulabilecek diğer temel bileşenlerin hedeflerine karşı herhangi bir tavizi göz önünde bulundurun.

Örnek

Aşağıdaki şekilde, bir satış özeti oluşturmak için Gerçekleştirilmiş Görünüm düzeni kullanmaya ilişkin bir örnek gösterilmektedir. Bir Azure depolama hesabındaki ayrı bölümlerde yer alan Order, OrderItem ve Customer tablolarındaki veriler, Elektronik kategorisindeki her ürün için toplam satış değerinin yanı sıra her bir ürün için o ürünü satın alan müşterilerin sayısını içeren bir görünüm oluşturmak üzere birleştirilir.

Şekil 2: Satış özeti oluşturmak için Gerçekleştirilmiş Görünüm düzenini kullanma

Bu gerçekleştirilmiş görünümün oluşturulması için karmaşık sorgular gerekir. Ancak kullanıcılar, sorgu sonucunu gerçekleştirilmiş görünüm olarak göstererek sonuçları kolayca elde edip doğrudan kullanabilir veya başka bir sorguya dahil edebilir. Görünüm büyük olasılıkla bir raporlama sisteminde veya panoda kullanılır ve haftalık gibi bir zamanlamaya göre güncelleştirilebilir.

Bu örnekte Azure tablo depolaması kullanılıyor olsa da, birçok ilişkisel veritabanı yönetim sistemi gerçekleştirilmiş görünümler için yerel destek de sağlar.

Sonraki adımlar

  • Veri Tutarlılığı Temel Bilgileri. Gerçekleştirilmiş görünümdeki özet bilgilerinin, temel alınan veri değerlerini yansıtacak şekilde tutulması gerekir. Veri değerleri değiştikçe özet verilerini gerçek zamanlı olarak güncelleştirmek pratik olmayabilir ve bunun yerine, sonuçta tutarlılık sağlayacak bir yaklaşımı benimsemeniz gerekir. Dağıtılmış veriler üzerinde tutarlılık sağlama konusundaki sorunları özetlemesinin yanı sıra farklı tutarlılık modellerinin avantajlarını ve dezavantajlarını açıklar.

Bu desen uygulanırken aşağıdaki desenler de uygun olabilir:

  • Komut ve Sorgu Sorumluluğu Ayrımı (CQRS) düzeni. Temel alınan veri değerleri değiştiğinde gerçekleşen olaylara tepki vererek bir materyalize görünümdeki bilgileri güncellemek için kullanın.
  • Olay Kaynağını Belirleme düzeni. Bir gerçekleştirilmiş görünümdeki bilgileri korumak için CQRS düzeni ile birlikte kullanın. Bir gerçekleştirilmiş görünümün temel aldığı veri değerleri değiştiğinde, sistem bu değişiklikleri açıklayan olaylar tetikleyebilir ve bunları bir olay deposuna kaydedebilir.
  • Dizin Tablosu kalıbı. Bir gerçekleştirilmiş görünümdeki veriler genellikle bir birincil anahtara göre düzenlenir, ancak sorguların diğer alanlardaki verileri inceleyerek bu görünümden bilgi alması gerekebilir. Yerel ikincil dizinleri desteklemeyen veri depoları için veri kümeleri üzerinde ikincil dizinler oluşturmak için kullanın.