Gerçekleştirilmiş Görünüm düzeniMaterialized View pattern

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.Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations. Bu, etkili bir sorgulama ve veri ayıklama işleminin desteklenmesine ve uygulama performansının artırılmasına yardımcı olur.This can help support efficient querying and data extraction, and improve application performance.

Bağlam ve sorunContext and problem

Verileri depolarken, geliştiricilerin ve veri yöneticilerinin önceliği genellikle verilerin nasıl okunduğundan çok nasıl depolandığı bilgisidir.When storing data, the priority for developers and data administrators is often focused on how the data is stored, as opposed to how it's read. 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.The chosen storage format is usually closely related to the format of the data, requirements for managing data size and data integrity, and the kind of store in use. Örneğin, NoSQL belge deposu kullanıldığında veriler, her biri söz konusu varlığa ilişkin tüm bilgileri içeren bir toplama değerleri dizisi olarak temsil edilir.For example, when using NoSQL document store, the data is often represented as a series of aggregates, each containing all of the information for that entity.

Ancak bunun sorgular üzerinde olumsuz bir etkisi olabilir.However, this can have a negative effect on queries. 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.When a query only needs a subset of the data from some entities, such as a summary of orders for several customers without all of the order details, it must extract all of the data for the relevant entities in order to obtain the required information.

ÇözümSolution

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.To support efficient querying, a common solution is to generate, in advance, a view that materializes the data in a format suited to the required results set. 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.The Materialized View pattern describes generating prepopulated views of data in environments where the source data isn't in a suitable format for querying, where generating a suitable query is difficult, or where query performance is poor due to the nature of the data or the data store.

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.These materialized views, which only contain data required by a query, allow applications to quickly obtain the information they need. 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.In addition to joining tables or combining data entities, materialized views can include the current values of calculated columns or data items, the results of combining values or executing transformations on the data items, and values specified as part of the query. Gerçekleştirilmiş görünüm yalnızca bir sorgu için de iyileştirilebilir.A materialized view can even be optimized for just a single query.

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.A key point is that a materialized view and the data it contains is completely disposable because it can be entirely rebuilt from the source data stores. 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.A materialized view is never updated directly by an application, and so it's a specialized cache.

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.When the source data for the view changes, the view must be updated to include the new information. Bu işlemi otomatik olarak veya sistem özgün verilerde bir değişiklik algıladığında gerçekleştirilecek şekilde zamanlayabilirsiniz.You can schedule this to happen automatically, or when the system detects a change to the original data. Bazı durumlarda görünümün el ile yeniden oluşturulması gerekebilir.In some cases it might be necessary to regenerate the view manually. Şekilde Gerçekleştirilmiş Görünüm düzeninin nasıl kullanılabileceğine ilişkin bir örnek gösterilmektedir.The figure shows an example of how the Materialized View pattern might be used.

Ş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 gerekenlerIssues and considerations

Bu düzenin nasıl uygulanacağına karar verirken aşağıdaki noktaları göz önünde bulundurun:Consider the following points when deciding how to implement this pattern:

Görünümün nasıl ve ne zaman güncelleştirileceği.How and when the view will be updated. İdeal olarak, kaynak verilerde değişiklik belirten bir olay sonucunda görünüm yeniden oluşturulur ancak bu, kaynak verilerin hızlı bir şekilde değişmesi durumunda aşırı miktarda ek yüke neden olabilir.Ideally it'll regenerate in response to an event indicating a change to the source data, although this can lead to excessive overhead if the source data changes rapidly. Görünümü yeniden oluşturmak için alternatif olarak, zamanlanmış bir görevi, bir dış tetikleyiciyi veya el ile eylemi kullanmayı deneyin.Alternatively, consider using a scheduled task, an external trigger, or a manual action to regenerate the view.

Bazı sistemlerde (örneğin, yalnızca verileri değiştiren olayların deposunun tutulduğu Olay Kaynağını Belirleme düzeni kullanılırken), gerçekleştirilmiş görünümler gereklidir.In some systems, such as when using the Event Sourcing pattern to maintain a store of only the events that modified the data, materialized views are necessary. Olay deposundan bilgi edinmenin tek yolu tüm olayları inceleyerek görünümleri önceden doldurup geçerli durumu belirlemek olabilir.Prepopulating views by examining all events to determine the current state might be the only way to obtain information from the event store. 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.If you're not using Event Sourcing, you need to consider whether a materialized view is helpful or not. Gerçekleştirilmiş görünümler özellikle bir veya az sayıda sorguya yönelik olarak tasarlanmıştır.Materialized views tend to be specifically tailored to one, or a small number of queries. Ç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.If many queries are used, materialized views can result in unacceptable storage capacity requirements and storage cost.

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.Consider the impact on data consistency when generating the view, and when updating the view if this occurs on a schedule. 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.If the source data is changing at the point when the view is generated, the copy of the data in the view won't be fully consistent with the original data.

Görünümü nerede depolayacağınızı göz önünde bulundurun.Consider where you'll store the view. Görünümün özgün verilerle aynı depoda veya bölümde yer alması gerekmez.The view doesn't have to be located in the same store or partition as the original data. Birleştirilmiş birkaç farklı bölüme ait bir alt kümede yer alabilir.It can be a subset from a few different partitions combined.

Bir görünüm kaybolursa yeniden oluşturulabilir.A view can be rebuilt if lost. 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.Because of that, if the view is transient and is only used to improve query performance by reflecting the current state of the data, or to improve scalability, it can be stored in a cache or in a less reliable location.

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.When defining a materialized view, maximize its value by adding data items or columns to it based on computation or transformation of existing data items, on values passed in the query, or on combinations of these values when appropriate.

Performansı daha fazla artırmak için, depolama mekanizmasının desteklediği ölçüde, gerçekleştirilmiş görünümün dizinini oluşturmayı deneyin.Where the storage mechanism supports it, consider indexing the materialized view to further increase performance. Ç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.Most relational databases support indexing for views, as do big data solutions based on Apache Hadoop.

Bu düzenin kullanılacağı durumlarWhen to use this pattern

Bu desen aşağıdaki durumlarda kullanışlıdır:This pattern is useful when:

  • Doğrudan sorgulanması zor olan veriler üzerinde gerçekleştirilmiş görünüm oluşturma 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 durumlar.Creating materialized views over data that's difficult to query directly, or where queries must be very complex to extract data that's stored in a normalized, semi-structured, or unstructured way.
  • 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.Creating temporary views that can dramatically improve query performance, or can act directly as source views or data transfer objects for the UI, for reporting, or for display.
  • 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.Supporting occasionally connected or disconnected scenarios where connection to the data store isn't always available. Görünüm bu durumda yerel olarak önbelleğe alınabilir.The view can be cached locally in this case.
  • Kaynak veri biçimiyle ilgili bilgi sahibi olmayı gerektirmeyen bir şekilde sorguları basitleştirme ve verileri deneme amaçlı olarak gösterme.Simplifying queries and exposing data for experimentation in a way that doesn't require knowledge of the source data format. Ö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.For example, by joining different tables in one or more databases, or one or more domains in NoSQL stores, and then formatting the data to fit its eventual use.
  • 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.Providing access to specific subsets of the source data that, for security or privacy reasons, shouldn't be generally accessible, open to modification, or fully exposed to users.
  • Her veri deposunun özelliklerinden yararlanmak için farklı veri depolarını köprüleme.Bridging different data stores, to take advantage of their individual capabilities. Ö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.For example, using a cloud store that's efficient for writing as the reference data store, and a relational database that offers good query and read performance to hold the materialized views.

Bu desen aşağıdaki durumlarda kullanışlı değildir:This pattern isn't useful in the following situations:

  • Veri kaynağının basit ve kolay bir şekilde sorgulanabilmesi.The source data is simple and easy to query.
  • Veri kaynağının çok hızlı bir şekilde değişmesi veya veri kaynağına bir görünüm kullanılmadan da erişilebilmesi.The source data changes very quickly, or can be accessed without using a view. Bu tür durumlarda, görünüm oluşturmaya yönelik işleme ek yükünden kaçınmanız gerekir.In these cases, you should avoid the processing overhead of creating views.
  • Tutarlılık yüksek öncelik taşır.Consistency is a high priority. Görünümler özgün verilerle her zaman tam olarak tutarlı olmayabilir.The views might not always be fully consistent with the original data.

ÖrnekExample

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.The following figure shows an example of using the Materialized View pattern to generate a summary of sales. 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.Data in the Order, OrderItem, and Customer tables in separate partitions in an Azure storage account are combined to generate a view containing the total sales value for each product in the Electronics category, along with a count of the number of customers who made purchases of each item.

Şekil 2: Bir 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.Creating this materialized view requires complex queries. 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.However, by exposing the query result as a materialized view, users can easily obtain the results and use them directly or incorporate them in another query. 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.The view is likely to be used in a reporting system or dashboard, and can be updated on a scheduled basis such as weekly.

Bu örnekte Azure tablo depolaması kullanılıyor olsa da ilişkisel veritabanı yönetim sistemlerinin birçoğu da gerçekleştirilmiş görünümler için yerel destek sağlar.Although this example utilizes Azure table storage, many relational database management systems also provide native support for materialized views.

Bu düzen uygulanırken aşağıdaki düzenler ve yönergeler de yararlı olabilir:The following patterns and guidance might also be relevant when implementing this pattern:

  • Veri Tutarlılığı Temel Bilgileri.Data Consistency Primer. Gerçekleştirilmiş görünümdeki özet bilgilerinin, temel alınan veri değerlerini yansıtacak şekilde tutulması gerekir.The summary information in a materialized view has to be maintained so that it reflects the underlying data values. 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.As the data values change, it might not be practical to update the summary data in real time, and instead you'll have to adopt an eventually consistent approach. 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.Summarizes the issues surrounding maintaining consistency over distributed data, and describes the benefits and tradeoffs of different consistency models.
  • Komut ve Sorgu Sorumluluğu Ayrımı (CQRS) düzeni.Command and Query Responsibility Segregation (CQRS) pattern. Temel alınan veri değerleri değiştiğinde gerçekleşen olaylara yanıt vererek bir gerçekleştirilmiş görünümdeki bilgileri güncelleştirmek için kullanın.Use to update the information in a materialized view by responding to events that occur when the underlying data values change.
  • Olay Kaynağını Belirleme düzeni.Event Sourcing pattern. Bir gerçekleştirilmiş görünümdeki bilgileri korumak için CQRS düzeni ile birlikte kullanın.Use in conjunction with the CQRS pattern to maintain the information in a materialized view. 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.When the data values a materialized view is based on are changed, the system can raise events that describe these changes and save them in an event store.
  • Dizin Tablosu deseni.Index Table pattern. 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.The data in a materialized view is typically organized by a primary key, but queries might need to retrieve information from this view by examining data in other fields. Yerel ikincil dizinleri desteklemeyen veri depoları için veri kümeleri üzerinde ikincil dizinler oluşturmak için kullanın.Use to create secondary indexes over data sets for data stores that don't support native secondary indexes.