Pola Tampilan Terwujud

Azure Storage

Menghasilkan tampilan yang telah terisi sebelumnya atas data dalam satu atau beberapa penyimpanan data saat data tidak diformat secara ideal untuk operasi kueri yang diperlukan. Hal ini dapat membantu mendukung kueri dan ekstraksi data yang efisien, serta meningkatkan performa aplikasi.

Konteks dan masalah

Saat menyimpan data, prioritas pengembang dan administrator data sering kali difokuskan pada cara data disimpan, bukan cara membacanya. Format penyimpanan yang dipilih biasanya terkait erat dengan format data, persyaratan untuk mengelola ukuran data dan integritas data, dan jenis penyimpanan yang digunakan. Misalnya, saat menggunakan penyimpanan dokumen NoSQL, data sering direpresentasikan sebagai serangkaian agregat, masing-masing berisi semua informasi untuk entitas tersebut.

Namun, hal ini dapat memiliki efek negatif pada kueri. Ketika kueri hanya memerlukan subset data dari beberapa entitas, seperti ringkasan pesanan untuk beberapa pelanggan tanpa semua detail pesanan, kueri harus mengekstrak semua data untuk entitas yang relevan untuk mendapatkan informasi yang diperlukan.

Solusi

Untuk mendukung kueri yang efisien, solusi umum adalah menghasilkan, terlebih dahulu, tampilan yang mewujudkan data dalam format yang sesuai dengan kumpulan hasil yang diperlukan. Pola Tampilan Terwujud menjelaskan pembuatan tampilan data yang telah terisi sebelumnya di lingkungan tempat data sumber tidak dalam format yang sesuai untuk kueri, saat menghasilkan kueri yang sesuai sulit dilakukan, atau saat performa kueri buruk karena sifat data atau penyimpanan data.

Tampilan terwujud ini, yang hanya berisi data yang diperlukan oleh kueri, memungkinkan aplikasi memperoleh informasi yang dibutuhkan dengan cepat. Selain menggabungkan tabel atau menggabungkan entitas data, tampilan terwujud dapat menyertakan nilai saat ini dari kolom terhitung atau item data, hasil menggabungkan nilai atau menjalankan transformasi pada item data, dan nilai yang ditentukan sebagai bagian dari kueri. Tampilan terwujud bahkan dapat dioptimalkan hanya untuk satu kueri.

Poin utamanya adalah tampilan yang terwujud dan data yang ada di dalamnya benar-benar dapat dihapus karena dapat sepenuhnya dibuat ulang dari penyimpanan data sumber. Tampilan terwujud tidak pernah diperbarui secara langsung oleh aplikasi, sehingga merupakan cache khusus.

Saat data sumber untuk tampilan berubah, tampilan harus diperbarui untuk menyertakan informasi baru. Anda dapat menjadwalkannya terjadi secara otomatis, atau ketika sistem mendeteksi perubahan pada data asli. Dalam beberapa kasus, mungkin perlu membuat ulang tampilan secara manual. Gambar tersebut menunjukkan contoh bagaimana pola Tampilan Terwujud dapat digunakan.

Gambar 1 menunjukkan contoh bagaimana pola Tampilan Terwujud dapat digunakan

Masalah dan pertimbangan

Pertimbangkan poin-poin berikut saat memutuskan cara menerapkan pola ini:

Cara dan kapan tampilan akan diperbarui. Idealnya, tampilan akan dibuat ulang sebagai respons terhadap peristiwa yang menunjukkan perubahan pada data sumber, meskipun dapat menyebabkan overhead yang berlebihan jika data sumber berubah dengan cepat. Atau, pertimbangkan untuk menggunakan tugas terjadwal, pemicu eksternal, atau tindakan manual untuk meregenerasi tampilan.

Dalam beberapa sistem, seperti saat menggunakan pola Sumber Peristiwa untuk mempertahankan penyimpanan hanya peristiwa yang mengubah data, tampilan yang terwujud diperlukan. Mengisi tampilan di awal dengan memeriksa semua peristiwa untuk menentukan status saat ini mungkin merupakan satu-satunya cara untuk mendapatkan informasi dari penyimpanan peristiwa. Jika tidak menggunakan Sumber Peristiwa, Anda perlu mempertimbangkan apakah tampilan yang terwujud bermanfaat atau tidak. Tampilan terwujud cenderung secara khusus disesuaikan dengan satu, atau kueri dalam jumlah kecil. Jika banyak kueri digunakan, tampilan terwujud dapat mengakibatkan persyaratan kapasitas penyimpanan dan biaya penyimpanan yang tidak dapat diterima.

Pertimbangkan dampaknya pada konsistensi data saat membuat tampilan, dan saat memperbarui tampilan jika ini terjadi pada jadwal. Jika data sumber berubah pada saat tampilan dibuat, salinan data dalam tampilan tidak akan sepenuhnya konsisten dengan data asli.

Pertimbangkan tempat Anda akan menyimpan tampilan. Tampilan tidak harus berada di penyimpanan atau partisi yang sama dengan data asli. Hal ini bisa menjadi subset dari beberapa partisi berbeda yang digabungkan.

Tampilan dapat dibangun kembali jika hilang. Karena itu, jika tampilan bersifat sementara dan hanya digunakan untuk meningkatkan performa kueri dengan mencerminkan status data saat ini, atau untuk meningkatkan skalabilitas, tampilan dapat disimpan dalam cache atau di lokasi yang kurang dapat diandalkan.

Saat mendefinisikan tampilan terwujud, maksimalkan nilainya dengan menambahkan item data atau kolom ke dalamnya berdasarkan komputasi atau transformasi item data yang ada, pada nilai yang diteruskan dalam kueri, atau pada kombinasi nilai ini jika sesuai.

Jika mekanisme penyimpanan mendukungnya, pertimbangkan untuk mengindeks tampilan terwujud untuk lebih meningkatkan performa. Sebagian besar database hubungan mendukung pengindeksan untuk tampilan, seperti halnya solusi big data berdasarkan Apache Hadoop.

Kapan menggunakan pola ini

Pola ini berguna ketika:

  • Membuat tampilan terwujud atas data yang sulit untuk dikueri secara langsung, atau tempat kueri harus bersifat sangat kompleks untuk mengekstrak data yang disimpan dengan cara yang dinormalisasi, semi-terstruktur, atau tidak terstruktur.
  • Membuat tampilan sementara yang secara dramatis dapat meningkatkan performa kueri, atau dapat bertindak langsung sebagai tampilan sumber atau objek transfer data untuk UI, untuk pelaporan, atau untuk tampilan.
  • Mendukung skenario yang terkadang terhubung atau terputus tempat koneksi ke penyimpanan data tidak selalu tersedia. Tampilan dapat di-cache secara lokal dalam kasus ini.
  • Menyederhanakan kueri dan memaparkan data untuk eksperimen dengan cara yang tidak memerlukan pengetahuan tentang format data sumber. Misalnya, dengan menggabungkan tabel yang berbeda dalam satu atau beberapa database, atau satu atau beberapa domain di penyimpanan NoSQL, lalu memformat data agar sesuai dengan penggunaan akhirnya.
  • Menyediakan akses ke subset tertentu dari data sumber, untuk alasan keamanan atau privasi, tidak boleh diakses secara umum, terbuka untuk dimodifikasi, atau diekspos sepenuhnya kepada pengguna.
  • Menjembatani penyimpanan data yang berbeda, untuk memanfaatkan setiap kemampuannya. Misalnya, menggunakan penyimpanan cloud yang efisien untuk menulis sebagai penyimpanan data referensi, dan database hubungan yang menawarkan performa kueri dan baca yang baik untuk menyimpan tampilan terwujud.
  • Saat menggunakan layanan mikro, sebaiknya simpan secara longgar, termasuk penyimpanan datanya. Oleh karena itu, tampilan terwujud dapat membantu Anda mengkonsolidasikan data dari layanan Anda. Jika tampilan yang terwujud tidak sesuai dalam arsitektur layanan mikro Anda atau skenario tertentu, harap pertimbangkan untuk memiliki batasan yang jelas yang selaras dengan desain berbasis domain (DDD) dan menggabungkan datanya saat diminta.

Pola ini tidak berguna dalam situasi berikut:

  • Sumber datanya sederhana dan mudah untuk dikuerikan.
  • Data sumber berubah sangat cepat, atau dapat diakses tanpa menggunakan tampilan. Dalam kasus ini, Anda harus menghindari pemrosesan overhead untuk membuat tampilan.
  • Konsistensi adalah prioritas tinggi. Tampilan mungkin tidak selalu sepenuhnya konsisten dengan data asli.

Desain beban kerja

Arsitek harus mengevaluasi bagaimana pola Tampilan Materialisasi dapat digunakan dalam desain beban kerja mereka untuk mengatasi tujuan dan prinsip yang tercakup dalam pilar Azure Well-Architected Framework. Contohnya:

Pilar Bagaimana pola ini mendukung tujuan pilar
Efisiensi Performa membantu beban kerja Anda memenuhi tuntutan secara efisien melalui pengoptimalan dalam penskalaan, data, kode. Tampilan materialisasi menyimpan hasil komputasi atau kueri yang kompleks tanpa mengharuskan mesin database atau klien untuk mengolah ulang untuk setiap permintaan. Desain ini mengurangi konsumsi sumber daya secara keseluruhan.

- Performa DATA PE:08

Seperti halnya keputusan desain apa pun, pertimbangkan tradeoff terhadap tujuan pilar lain yang mungkin diperkenalkan dengan pola ini.

Contoh

Gambar berikut menunjukkan contoh penggunaan pola Tampilan Terwujud untuk menghasilkan ringkasan penjualan. Data dalam tabel Pesanan, ItemPesanan, dan Pelanggan di partisi terpisah di akun penyimpanan Azure digabungkan untuk menghasilkan tampilan yang berisi total nilai penjualan untuk setiap produk dalam kategori Elektronik, bersama dengan hitungan jumlah pelanggan yang melakukan pembelian setiap item.

Gambar 2: Menggunakan pola Tampilan Terwujud untuk menghasilkan ringkasan penjualan

Membuat tampilan terwujud ini membutuhkan kueri yang kompleks. Namun, dengan memaparkan hasil kueri sebagai tampilan terwujud, pengguna dapat dengan mudah memperoleh hasil dan menggunakannya secara langsung atau menggabungkannya dalam kueri lain. Tampilan kemungkinan akan digunakan dalam sistem pelaporan atau dasbor, dan dapat diperbarui secara terjadwal seperti mingguan.

Meskipun contoh ini menggunakan penyimpanan tabel Azure, banyak sistem manajemen database relasional juga menyediakan dukungan asli untuk tampilan yang terwujud.

Langkah berikutnya

  • Data Consistency Primer. Informasi ringkasan dalam tampilan terwujud harus dipertahankan sehingga mencerminkan nilai data yang mendasarinya. Saat nilai data berubah, memperbarui data ringkasan secara real time mungkin menjadi tidak praktis, dan sebaliknya Anda harus mengadopsi pendekatan yang pada akhirnya konsisten. Merangkum isu-isu seputar menjaga konsistensi data terdistribusi, dan menggambarkan manfaat dan pertukaran model konsistensi yang berbeda.

Pola berikut mungkin juga relevan saat menerapkan pola ini:

  • Pola Command and Query Responsibility Segregation (CQRS). Gunakan untuk memperbarui informasi dalam tampilan terwujud dengan merespons peristiwa yang terjadi saat nilai data yang mendasarinya berubah.
  • Pola Sumber Peristiwa. Gunakan bersama dengan pola CQRS untuk mempertahankan informasi dalam tampilan yang terwujud. Saat nilai data yang menjadi dasar tampilan terwujud diubah, sistem dapat memunculkan peristiwa yang menjelaskan perubahan ini dan menyimpannya di penyimpanan peristiwa.
  • Pola Tabel Indeks. Data dalam tampilan terwujud biasanya diatur oleh kunci utama, tetapi kueri mungkin perlu mengambil informasi dari tampilan ini dengan memeriksa data di bidang lain. Gunakan untuk membuat indeks sekunder di atas himpunan data untuk penyimpanan data yang tidak mendukung indeks sekunder asli.