All Products
Search
Document Center

Simple Log Service:Percepat kueri dengan tampilan yang di-materialisasi

Last Updated:Jun 23, 2026

Tampilan yang di-materialisasi melakukan pra-komputasi inkremental terhadap sub-pernyataan SQL dan menyimpan hasil antara secara persisten. Saat Anda menjalankan kueri, sistem secara otomatis menulis ulang SQL untuk membaca data yang telah dipra-komputasi, sehingga mengurangi latensi kueri dasbor dan laporan dari menit menjadi detik.

Pilih strategi akselerasi

Simple Log Service (SLS) mendukung analisis SQL real-time, di mana setiap kueri memproses seluruh dataset dalam rentang waktu yang dipilih. Untuk dataset besar, Anda dapat meningkatkan performa dengan metode berikut:

Metode akselerasi

Prinsip

Kasus penggunaan

Batasan

Kueri dan analisis berakurasi penuh berperforma tinggi (Dedicated SQL)

Menambah sumber daya komputasi untuk meningkatkan paralelisme kueri tunggal.

Dataset besar dengan kueri SQL yang sering berubah.

Skala data memiliki batas atas, dan waktu eksekusi bisa lama untuk dataset masif.

Materialized view (topik ini)

Menjalankan pra-komputasi inkremental pada sub-pernyataan kueri SQL tetap. Saat kueri dijalankan, kueri tersebut secara otomatis ditulis ulang untuk membaca hasil yang telah dipra-komputasi.

Skema pelaporan dan dasbor dengan kueri SQL relatif tetap dan dataset masif.

Hanya Logstore Jenis Penyimpanan Standar yang didukung. Maksimal 100 tampilan yang di-materialisasi dapat dibuat per proyek.

Cara kerja

  • Source Logstore: Logstore yang berisi data log mentah. Tampilan yang di-materialisasi tidak memengaruhi Source Logstore.

  • materialized store: Saat Anda membuat tampilan yang di-materialisasi, sistem secara otomatis membuat materialized store yang sesuai untuk menyimpan hasil pra-komputasi.

    Proses materialisasi memproses data yang diingest sebagai aliran. Bahkan jika data mentah tiba dengan waktu log yang tidak berurutan, materialisasi terjadwal tidak menghasilkan duplikasi atau kelalaian.
  • Komputasi latar belakang terjadwal: Sistem mengekstraksi pola materialisasi dari SQL input dan secara berkala menghitung hasil antara dari Source Logstore. Anda hanya perlu menyediakan SQL target saat membuat tampilan yang di-materialisasi; logika materialisasi ditangani secara otomatis oleh sistem.

  • transparent rewrite: Saat Anda menjalankan kueri SQL, mesin eksekusi SLS menganalisis struktur SQL, mencocokkannya dengan tampilan yang di-materialisasi yang ada, dan secara otomatis menulis ulang kueri tersebut. Anda dapat terus melakukan kueri terhadap Source Logstore tanpa mengubah SQL atau menentukan tampilan yang di-materialisasi.

  • Penggabungan otomatis untuk integritas data: Untuk rentang waktu yang telah dimaterialisasi, mesin membaca langsung dari tampilan yang di-materialisasi. Untuk data terbaru yang belum dimaterialisasi, mesin menghitungnya dari Source Logstore secara real time. Kedua set hasil digabungkan secara otomatis untuk mengembalikan hasil lengkap dan mutakhir.

Catatan

Transparent rewrite adalah mekanisme inti dari tampilan yang di-materialisasi. Berbeda dengan sistem yang mengharuskan Anda melakukan kueri manual terhadap tabel hasil materialisasi, SLS mengotomatiskan pencocokan SQL, penulisan ulang, dan penggabungan hasil tanpa perubahan pada kueri yang sudah ada. Setelah Anda membuat tampilan yang di-materialisasi, akselerasi tidak langsung berlaku karena sistem harus melakukan pra-komputasi data historis secara asinkron dari waktu mulai hingga waktu saat ini. Proses pembuatan ini biasanya memakan waktu 1 hingga 12 jam, tergantung pada volume data dan kompleksitas komputasi. Akselerasi hanya berlaku setelah pra-komputasi mencakup rentang waktu kueri.

Lingkup dan batasan

  • Hanya Logstore Jenis Penyimpanan Standar yang didukung. Query Logstore, MetricStore, dan StoreView tidak didukung.

  • Anda dapat membuat hingga 100 tampilan yang di-materialisasi per proyek.

  • Anda dapat membuat dan mengelola tampilan yang di-materialisasi melalui Konsol atau API.

Persyaratan izin

Akun Alibaba Cloud secara default memiliki semua izin yang diperlukan. Pengguna RAM harus diberikan izin berikut:

Izin yang diperlukan untuk tampilan yang di-materialisasi

Minta AliyunLogFullAccess kebijakan sistem untuk SLS dari administrator Akun Alibaba Cloud Anda, atau lihat Buat kebijakan izin kustom untuk menerapkan kontrol akses detail halus seperti yang dijelaskan dalam tabel berikut.

Aksi

Aksi izin

Buat tampilan yang di-materialisasi

log:CreateMaterializedView

Perbarui tampilan yang di-materialisasi

log:UpdateMaterializedView

Dapatkan detail tampilan yang di-materialisasi

log:GetMaterializedView

Hapus tampilan yang di-materialisasi

log:DeleteMaterializedView

Daftar tampilan yang di-materialisasi

log:ListMaterializedViews

Gunakan tampilan yang di-materialisasi

Buat dari halaman kueri

Setelah menjalankan kueri SQL di halaman kueri dan analisis, Anda dapat langsung membuat tampilan yang di-materialisasi dari kueri tersebut.

  1. Masuk ke Konsol Simple Log Service.

  2. Dalam daftar Projects, klik proyek target, lalu klik Logstore Jenis Penyimpanan Standar target.

  3. Di halaman kueri dan analisis, masukkan pernyataan SQL yang ingin Anda percepat, lalu klik Search & Analyze.

  4. Di area statistics chart hasil kueri, klik Create Materialized View.

  5. Di wizard pembuatan, lengkapi konfigurasi. Pernyataan SQL akan diisi otomatis dengan kueri saat ini. Parameter lainnya sama dengan saat membuat tampilan dari panel materialized views.

Buat dan kelola di Konsol

Buat tampilan yang di-materialisasi

  1. Masuk ke Konsol Simple Log Service.

  2. Dalam daftar Projects, klik proyek target.

  3. Di panel navigasi sebelah kiri, klik ikon Materialized View.

  4. Di panel materialized views, klik Create Now.

  5. Di wizard pembuatan, konfigurasikan pengaturan berikut.

    1. Source Logstore: Konfigurasikan sumber data untuk tampilan yang di-materialisasi.

      Parameter

      Deskripsi

      Project

      Diisi otomatis dengan proyek saat ini dan tidak dapat diubah.

      Source type

      Pilih Logstore. Saat ini, hanya Logstore Jenis Penyimpanan Standar yang didukung.

      Logstore

      Pilih Logstore target dari daftar drop-down.

      Setelah menyelesaikan konfigurasi, klik Next.

    2. Konfigurasi tampilan yang di-materialisasi: Konfigurasikan nama, SQL, dan parameter lainnya untuk tampilan yang di-materialisasi.

      Parameter

      Deskripsi

      Materialized view name

      Masukkan nama untuk tampilan yang di-materialisasi. Sistem secara otomatis menambahkan awalan mv_. Anda tidak perlu menambahkannya secara manual.

      SQL code

      Masukkan pernyataan SQL yang ingin dipercepat. Editor mendukung syntax highlighting dan autocompletion. Setelah memasukkan pernyataan SQL, klik Preview untuk memvalidasi hasil eksekusi.

      Catatan

      Nama kolom yang digunakan dalam pernyataan SQL harus diindeks. Jika tidak, terjadi error saat pratinjau.

      Start time

      Pilih waktu mulai untuk materialisasi data. Waktu ini berdasarkan waktu penulisan data mentah. Sistem hanya mematerialisasi data yang ditulis setelah waktu ini.

      Materialization interval

      Tetapkan interval (dalam menit) pemrosesan ulang tampilan. Interval yang lebih pendek membuat hasil materialisasi lebih dekat ke real time tetapi meningkatkan biaya komputasi.

  6. Setelah menyelesaikan konfigurasi, klik Save.

    Setelah tampilan yang di-materialisasi dibuat, sistem secara otomatis mengarahkan Anda ke halaman kueri tampilan yang di-materialisasi.

    Catatan

    Periode retensi data tampilan yang di-materialisasi sama dengan Source Logstore terkait. Anda dapat membuat maksimal 100 tampilan yang di-materialisasi per proyek.

Lihat dan kelola tampilan yang di-materialisasi

Setelah membuat tampilan yang di-materialisasi, Anda dapat melihat dan mengelolanya di Konsol.

  • Lihat daftar tampilan yang di-materialisasi

    Di panel navigasi sebelah kiri proyek target, klik ikon Materialized View. Panel samping yang muncul menampilkan semua tampilan yang di-materialisasi di proyek saat ini.

  • Lihat detail tampilan yang di-materialisasi

    Di daftar tampilan yang di-materialisasi, klik nama tampilan yang di-materialisasi untuk membuka halaman detailnya. Halaman detail menampilkan informasi konfigurasi berikut:

    • Materialized View Name: Nama lengkap tampilan yang di-materialisasi, termasuk awalan mv_.

    • Start At: Waktu mulai materialisasi data.

    • View Update Interval: Interval pemrosesan ulang tampilan.

    • Data Retention Period: Sama dengan periode retensi data Source Logstore.

    • SQL Code: Pernyataan SQL yang sesuai dengan tampilan yang di-materialisasi.

  • Hapus tampilan yang di-materialisasi

    Di halaman detail tampilan yang di-materialisasi, klik Delete, lalu klik OK di kotak dialog konfirmasi.

    Peringatan

    Tampilan yang di-materialisasi yang dihapus tidak dapat dipulihkan. Materialized store terkait juga dihapus.

Akselerasi kueri Dasbor

Jika grafik dasbor memiliki latensi kueri tinggi, Anda dapat membuat tampilan yang di-materialisasi untuk mempercepatnya. Untuk informasi selengkapnya, lihat dashboard query acceleration.

Gunakan SDK

Anda juga dapat membuat dan mengelola tampilan yang di-materialisasi secara terprogram menggunakan SDK. Contoh berikut menggunakan bahasa Java.

  1. Impor SLS SDK untuk Java.

    <dependency>
        <groupId>com.aliyun.openservices</groupId>
        <artifactId>aliyun-log</artifactId>
        <version>0.6.138</version>
    </dependency>
  2. Contoh berikut menunjukkan cara membuat, menampilkan daftar, mendapatkan, dan menghapus tampilan yang di-materialisasi. Modifikasi dan jalankan kode sesuai kebutuhan.

    • Dapatkan parameter dalam kode sebagai berikut:

      • Untuk mendapatkan ID AccessKey dan Rahasia AccessKey, lihat Obtain an AccessKey pair.

      • Untuk mendapatkan titik akhir:

        1. Masuk ke Konsol Simple Log Service, lalu di daftar proyek, klik proyek target.

        2. Klik ikon image di samping nama proyek untuk membuka halaman Ikhtisar Proyek, lalu salin titik akhir publik.

      import com.aliyun.openservices.log.Client;
      import com.aliyun.openservices.log.exception.LogException;
      import com.aliyun.openservices.log.request.CreateMaterializedViewRequest;
      import com.aliyun.openservices.log.request.ListMaterializedViewsRequest;
      import com.aliyun.openservices.log.response.GetMaterializedViewResponse;
      import com.aliyun.openservices.log.response.ListMaterializedViewsResponse;
      
      import java.text.SimpleDateFormat;
      import java.util.concurrent.TimeUnit;
      
      public class MvDemo
      {
          static String accessId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
          static String accessKey = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
          /**
           * Titik akhir untuk Simple Log Service. Contoh ini menggunakan Hangzhou. Ubah sesuai wilayah Anda.
           */
          static String host = "cn-hangzhou.log.aliyuncs.com";
          /**
           * Buat klien Simple Log Service.
           */
          static Client client = new Client(host, accessId, accessKey);
          /**
           * Nama proyek.
           */
          static String projectName = "xxx";
          /**
           * Nama Logstore.
           */
          static String logstoreName = "xxx";
      
          public static void main(String[] args) throws Exception {
              String materializedViewName = "test_mv";
      
              createMv(materializedViewName); // Buat tampilan yang di-materialisasi dengan nama yang ditentukan.
      
              listMv(); // Dapatkan daftar tampilan yang di-materialisasi di proyek saat ini.
      
              getMv(materializedViewName); // Dapatkan informasi tentang tampilan yang di-materialisasi saat ini.
      
              // deleteMv(materializedViewName); // Hapus tampilan yang di-materialisasi.
          }
      
          static int dateStrToSecond(String dateStr) throws Exception {
              SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
              return (int)TimeUnit.MILLISECONDS.toSeconds(simpleDateFormat.parse(dateStr).getTime());
          }
      
          static void createMv(String materializedViewName) throws Exception {
              String originalSql = "* | select count(l1) as cnt, l2 from stability group by l2"; // Ubah ini menjadi kueri SQL yang ingin Anda percepat.
              int aggInternalMins = 60; // Interval materialisasi, dalam menit.
              int startTime = dateStrToSecond("2025-07-30 00:00:00"); // Waktu mulai materialisasi, berdasarkan waktu penulisan data mentah. Hanya data yang ditulis setelah waktu ini yang dimaterialisasi.
              int ttl = 0; // TTL materialized store. Nilai 0 berarti TTL mengikuti Source Logstore. TTL ini tidak boleh lebih pendek daripada TTL Source Logstore.
              // Jumlah tampilan yang di-materialisasi per proyek tidak boleh melebihi 100.
              CreateMaterializedViewRequest request = new CreateMaterializedViewRequest(projectName, materializedViewName, logstoreName, originalSql, aggInternalMins, startTime, ttl);
              client.createMaterializedView(request);
              System.out.println("create materialized view " + materializedViewName);
          }
      
          static void listMv() throws LogException
          {
              ListMaterializedViewsRequest request = new ListMaterializedViewsRequest(projectName, "", 0, 10); // 0 dan 10 adalah parameter paginasi.
              ListMaterializedViewsResponse response = client.listMaterializedViews(request);
              System.out.println("total materialized view count: " + response.getTotal());
              for (String materializedView : response.getMaterializedViews()) {
                  System.out.println(materializedView);
              }
          }
      
          static void getMv(String materializedViewName) throws Exception
          {
              GetMaterializedViewResponse response = client.getMaterializedView(projectName, materializedViewName);
              System.out.println("get materialized view detail, name: " + materializedViewName);
              System.out.println("originalSql: " + response.getOriginalSql());
              System.out.println("startTime: " + response.getStartTime());
              System.out.println("ttl: " + response.getTtl());
          }
      
          static void deleteMv(String materializedViewName ) throws LogException {
              client.deleteMaterializedView(projectName, materializedViewName);
              System.out.println("delete materialized view " + materializedViewName);
          }
      
      }

Sintaks yang didukung

  • Semua fungsi dan ekspresi skalar didukung.

  • Klausa seperti WHERE, GROUP BY, LIMIT, dan TOP-N didukung.

  • Fungsi agregat umum didukung, seperti yang tercantum dalam tabel berikut:

Fungsi agregat

Sintaks

fungsi agregat

count(*)

count(1)

count(x)

count_if(boolean expression)

max(x)

max(xn)

min(x)

min(xn)

sum(x)

arbitrary(x)

Fungsi aproksimasi

approx_distinct(x)

approx_distinct(xe)

approx_percentile(xpercentage)

Penagihan

Penagihan untuk tampilan yang di-materialisasi didasarkan pada volume data yang ditulis ke materialized store. Volume ini bergantung pada ukuran hasil komputasi SQL terjadwal dan biasanya jauh lebih kecil daripada volume data Source Logstore. Penagihan mengikuti model pay-by-ingested-data Logstore Jenis Penyimpanan Standar.

Catatan

Untuk mengurangi biaya materialisasi, hindari menggunakan bidang dengan kardinalitas tinggi seperti timestamp atau ID pengguna dalam klausa GROUP BY. Pilih interval materialisasi yang sesuai dengan frekuensi penyegaran data bisnis Anda.