All Products
Search
Document Center

Simple Log Service:Tingkatkan performa kueri pada data skala besar dengan materialized views

Last Updated:Jan 30, 2026

Simple Log Service (SLS) menyediakan materialized views untuk mempercepat analisis SQL pada dataset skala besar. SLS secara otomatis mengekstraksi dan menyimpan subhasil yang dapat digunakan ulang—seperti agregasi, filter, dan proyeksi—dari pernyataan SQL target. Untuk kueri berikutnya, SLS secara otomatis menulis ulang SQL tersebut agar menggunakan hasil yang telah diprekomputasi ini, sehingga performa meningkat secara signifikan.

Ikhtisar

Mengapa menggunakan materialized views

SLS memungkinkan analisis data real-time menggunakan SQL. Setiap kueri SQL menganalisis seluruh data dalam rentang waktu tertentu. Pada dataset besar, mode eksekusi standar dapat menghasilkan hasil yang tidak akurat, timeout, atau melebihi batas konkurensi.

Kueri dan analisis akurat berperforma tinggi (Dedicated SQL) secara signifikan meningkatkan daya komputasi. Namun, mode ini memiliki batas ukuran data dan dapat menghasilkan waktu eksekusi yang lama untuk dataset yang sangat besar.

Untuk skenario dengan persyaratan ketat terhadap waktu eksekusi SQL—seperti refresh dashboard—pertimbangkan penggunaan materialized views. Materialized views melakukan pre-komputasi secara inkremental dan menyimpan hasil antara dari sub-pernyataan SQL. Saat Anda merefresh laporan, sistem secara otomatis menggunakan hasil yang telah diprekomputasi ini untuk meningkatkan performa secara signifikan.

Cara kerja

Component

Description

Source logstore

Logstore yang berisi log mentah. Materialized views tidak memengaruhi source logstore.

Materialized database

Database yang dibuat secara otomatis untuk menyimpan hasil materialized view. Data diproses sebagai aliran saat ditulis. Bahkan jika log mentah tidak terurut berdasarkan waktu, hasil materialisasi terjadwal tidak akan menduplikasi atau kehilangan data apa pun.

Scheduled background computation

Sistem secara otomatis mengekstraksi pola materialisasi dari SQL input dan secara berkala menghitung hasil antara dari source logstore. Untuk membuat materialized view, cukup berikan kueri SQL yang ingin dipercepat. Anda tidak perlu mengelola detail materialisasi.

Transparent rewrite

Saat menjalankan kueri SQL, mesin eksekusi SLS menganalisis struktur SQL secara cerdas, secara otomatis mencocokkan kueri dengan materialized view yang sesuai, dan menulis ulang kueri tersebut secara transparan. Anda langsung mengkueri source logstore, dan mesin komputasi menemukan serta menggunakan materialized view yang tepat untuk menulis ulang kueri. Proses penulisan ulang ini transparan bagi Anda.

Latest data visibility

Mesin komputasi membaca data dari materialized view untuk rentang data yang telah dimaterialisasi. Untuk data baru yang belum dimaterialisasi, mesin membaca dan menghitung data secara real-time dari source logstore. Mesin kemudian secara otomatis menggabungkan kedua set hasil tersebut untuk mengembalikan hasil lengkap. Hal ini memberikan manfaat performa sekaligus memastikan data terbaru tetap terlihat secara real-time.

Prasyarat

Sebelum memulai, pastikan persyaratan berikut terpenuhi:

Requirement

Description

Logstore type

Hanya logstore Standard. Query logstores, Metricstores, dan StoreViews tidak didukung.

Management method

Hanya API. Konsol belum mendukung operasi materialized view.

SDK version

Java SDK 0.6.138 atau lebih baru

Permissions

log:CreateMaterializedView, log:GetMaterializedView, log:ListMaterializedViews, log:DeleteMaterializedView (hanya untuk Pengguna RAM)

Memulai dengan cepat

Buat materialized view dalam tiga langkah:

// 1. Impor SDK
import com.aliyun.openservices.log.Client;
import com.aliyun.openservices.log.request.CreateMaterializedViewRequest;

// 2. Inisialisasi client
Client client = new Client("cn-hangzhou.log.aliyuncs.com", accessId, accessKey);

// 3. Buat materialized view
CreateMaterializedViewRequest request = new CreateMaterializedViewRequest(
    "your-project",           // Nama project
    "my_mv",                   // Nama materialized view
    "your-logstore",           // Source logstore
    "* | select count(*) as cnt", // SQL yang akan dipercepat
    60,                        // Interval komputasi (menit)
    startTime,                 // Waktu mulai (Unix timestamp)
    0                          // TTL (0 = sama seperti sumber)
);
client.createMaterializedView(request);

Untuk contoh lengkap, lihat petunjuk detail di bawah ini.

Gunakan materialized views

Bagian ini memberikan petunjuk langkah demi langkah menggunakan Java sebagai contoh.

Langkah 1: Konfigurasikan izin

Akun Alibaba Cloud memiliki semua izin secara default dan tidak memerlukan otorisasi tambahan. Jika Anda adalah Pengguna Resource Access Management (RAM), pastikan Anda memiliki izin berikut:

Izin yang diperlukan untuk materialized views

Minta kebijakan sistem AliyunLogFullAccess untuk SLS dari pemilik Akun Alibaba Cloud. Untuk kontrol detail halus, buat kebijakan izin kustom dengan izin pada tabel berikut. Untuk informasi lebih lanjut, lihat Buat kebijakan kustom.

Operation

Permission Action

Create a materialized view

log:CreateMaterializedView

Update a materialized view

log:UpdateMaterializedView

Get details of a materialized view

log:GetMaterializedView

Delete a materialized view

log:DeleteMaterializedView

List materialized views

log:ListMaterializedViews

Langkah 2: Impor SDK

Impor versi berikut dari SDK SLS untuk Java:

<dependency>
    <groupId>com.aliyun.openservices</groupId>
    <artifactId>aliyun-log</artifactId>
    <version>0.6.138</version>
</dependency>

Langkah 3: Buat, daftar, ambil, dan hapus materialized views

Contoh berikut menunjukkan cara membuat, mendaftar, mengambil detail, dan menghapus materialized views. Ubah dan jalankan kode sesuai kebutuhan.

Dapatkan parameter:

  • Untuk mendapatkan ID AccessKey dan Rahasia AccessKey, lihat Buat pasangan Kunci Akses.

  • Untuk mendapatkan titik akhir host:

    1. Masuk ke Konsol Simple Log Service.

    2. Pada daftar Projects, klik project target.

    3. Klik ikon di samping nama project untuk membuka halaman ikhtisar project. Di bagian Endpoint, 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 SLS. Contoh ini menggunakan Hangzhou. Ubah sesuai wilayah Anda.
     */
    static String host = "cn-hangzhou.log.aliyuncs.com";
    /**
     * Buat client SLS.
     */
    static Client client = new Client(host, accessId, accessKey);
    /**
     * Nama project.
     */
    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 materialized view dengan nama yang ditentukan.

        listMv(); // Dapatkan daftar materialized views di project saat ini.

        getMv(materializedViewName); // Dapatkan informasi tentang materialized view saat ini.
        
        // deleteMv(materializedViewName); // Hapus materialized view.
    }

    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 {
        // Kueri SQL yang akan dipercepat dengan materialized view.
        String originalSql = "* | select count(l1) as cnt, l2 from stability group by l2";
        // Periode materialisasi terjadwal dalam menit.
        int aggIntervalMins = 60;
        // Waktu mulai untuk materialisasi. Berdasarkan waktu penulisan data mentah.
        // Hanya data mentah setelah waktu ini yang dimaterialisasi.
        int startTime = dateStrToSecond("2025-07-30 00:00:00");
        // TTL dari logstore materialisasi.
        // Nilai 0 berarti sama dengan TTL logstore sumber.
        // TTL logstore materialisasi tidak boleh kurang dari TTL logstore sumber.
        int ttl = 0;
        // Jumlah materialized views dalam satu project tidak boleh melebihi 100.
        CreateMaterializedViewRequest request = new CreateMaterializedViewRequest(
            projectName, materializedViewName, logstoreName, originalSql, aggIntervalMins, startTime, ttl);
        client.createMaterializedView(request);
        System.out.println("create materialized view " + materializedViewName);
    }

    static void listMv() throws LogException
    {
        // 0 dan 10 adalah parameter untuk kueri terpaginasi.
        ListMaterializedViewsRequest request = new ListMaterializedViewsRequest(projectName, "", 0, 10);
        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.

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

  • Fungsi agregat umum didukung. Untuk daftar lengkap, lihat tabel berikut:

Supported aggregate functions

Syntax

Aggregate functions

count(*), count(1), count(x), count_if(boolean expression), max(x), max(x, n), min(x), min(x, n), sum(x), arbitrary(x)

Approximate functions

approx_distinct(x), approx_distinct(x, e), approx_percentile(x, percentage)

Penagihan

Penagihan untuk materialized views didasarkan pada volume data yang ditulis ke logstore yang menyimpan materialized view tersebut. Volume data ini bergantung pada ukuran hasil dari kueri SQL terjadwal. Volume data biasanya jauh lebih kecil daripada logstore sumber. Penagihan mengikuti model Pay-by-ingested-data untuk logstore Standard.