Topik ini menjelaskan arsitektur layanan yang mengoptimalkan pengorganisasian data untuk tabel Delta.
Latar Belakang
Tabel Delta adalah format tabel data inkremental di MaxCompute yang mendukung impor data hampir real-time tingkat menit. Dalam skenario lalu lintas tinggi, hal ini dapat menghasilkan banyak file inkremental kecil dan status antara yang redundan. Untuk mengurangi beban penyimpanan dan biaya komputasi serta meningkatkan kecepatan eksekusi analisis dan efisiensi operasi baca/tulis data, MaxCompute menyediakan tiga layanan optimasi: Clustering (penggabungan file kecil), COMPACTION, dan pembersihan data.
Clustering (penggabungan file kecil)
Tantangan
Tabel Delta mendukung impor data inkremental hampir real-time tingkat menit. Dalam skenario lalu lintas tinggi, jumlah file inkremental kecil dapat meningkat pesat, sehingga menimbulkan permasalahan berikut:
Biaya penyimpanan tinggi dan peningkatan beban I/O.
Pembaruan metadata yang sering akibat banyaknya file kecil.
Eksekusi analisis lebih lambat dan operasi baca/tulis data menjadi tidak efisien.
Oleh karena itu, diperlukan layanan penggabungan file kecil yang dirancang dengan baik—dikenal sebagai layanan Clustering—untuk secara otomatis mengoptimalkan skenario ini.
Solusi
Layanan Clustering dijalankan oleh Storage Service internal MaxCompute dan dirancang untuk menggabungkan file-file kecil. Clustering tidak mengubah status antara historis apa pun dari data, artinya layanan ini tidak menghapus status historis antara dari catatan mana pun.
Alur Kerja
Alur kerja keseluruhan layanan Clustering ditunjukkan pada gambar berikut.

Penggabungan bertingkat
Layanan ini menggunakan kebijakan clustering berdasarkan skenario bisnis baca/tulis khas. Secara berkala, layanan ini mengevaluasi file data berdasarkan beberapa dimensi, seperti ukuran dan kuantitas, lalu melakukan penggabungan bertingkat.
Tingkat 0 → Tingkat 1: File Delta terkecil dari operasi tulis awal (file data biru pada gambar) digabungkan menjadi file Delta berukuran menengah (file data kuning pada gambar).
Tingkat 1 → Tingkat 2: Ketika file Delta berukuran menengah mencapai skala tertentu, penggabungan tingkat lebih tinggi dipicu untuk menghasilkan file yang lebih besar dan dioptimalkan (file data oranye pada gambar).
Menghindari amplifikasi baca/tulis
Isolasi file besar: File data yang melebihi ukuran tertentu, seperti file T8 di Bucket3, dikecualikan dari penggabungan.
Batas rentang waktu: File dengan rentang waktu yang besar tidak digabungkan untuk mencegah pembacaan sejumlah besar data historis yang berada di luar rentang waktu kueri selama Time Travel atau kueri inkremental.
Pemicu eksekusi otomatis: Setiap operasi clustering membaca dan menulis data setidaknya sekali, sehingga mengonsumsi sumber daya komputasi dan I/O serta menyebabkan amplifikasi baca/tulis. Untuk memastikan efisiensi, mesin MaxCompute secara otomatis memicu operasi berdasarkan status sistem.
Konkurensi dan transaksionalitas
Eksekusi konkuren: Karena data dipartisi dan disimpan berdasarkan BucketIndex, layanan Clustering berjalan secara konkuren di tingkat bucket, sehingga secara signifikan mengurangi waktu proses keseluruhan.
Jaminan transaksional: Layanan Clustering berinteraksi dengan Meta Service untuk mengambil daftar tabel atau partisi yang akan diproses. Setelah operasi selesai, layanan ini meneruskan informasi tentang file data baru dan lama ke Meta Service. Meta Service memainkan peran kunci dalam mendeteksi konflik transaksi, mengoordinasikan pembaruan metadata yang mulus untuk file baru dan lama, serta mengamankan pembersihan file data lama.
Pemadatan
Tantangan
Tabel Delta mendukung operasi UPDATE dan DELETE. Operasi ini menulis catatan baru untuk menandai status sebelumnya dari catatan lama, bukan memodifikasi catatan lama secara langsung. Banyaknya operasi semacam ini dapat menyebabkan:
Redundansi data: Catatan redundan dalam status antara meningkatkan biaya penyimpanan dan komputasi.
Efisiensi kueri lebih rendah
Oleh karena itu, diperlukan layanan Compaction yang dirancang dengan baik untuk menghilangkan status antara dan mengoptimalkan skenario ini.
Solusi
Compaction menggabungkan file data tertentu, termasuk BaseFile dan DeltaFile. Layanan ini menggabungkan beberapa catatan dengan kunci primer yang sama dan menghilangkan status antara UPDATE dan DELETE, sehingga hanya catatan dengan status terbaru yang dipertahankan. Akhirnya, sebuah BaseFile baru dihasilkan yang hanya berisi data INSERT.
Alur Kerja
Alur kerja keseluruhan layanan Compaction adalah sebagai berikut.
Penggabungan DeltaFile
Dari t1 hingga t3, batch DeltaFile baru ditulis, memicu operasi Compaction yang berjalan secara konkuren di tingkat bucket. Operasi ini menggabungkan file untuk menghasilkan BaseFile baru pada setiap bucket.
Pada t4 dan t6, batch DeltaFile baru ditulis kembali, memicu operasi Compaction lain yang menggabungkan BaseFile yang ada dengan DeltaFile baru guna menghasilkan BaseFile baru.
Jaminan transaksional
Layanan Compaction juga berinteraksi dengan Meta Service, mirip dengan proses Clustering. Layanan ini mengambil daftar tabel atau partisi tempat operasi akan dilakukan. Setelah selesai, layanan meneruskan informasi mengenai file data lama dan baru ke Meta Service. Meta Service bertanggung jawab mendeteksi konflik transaksi terkait operasi Compaction, memperbarui metadata file lama dan baru secara atomik, serta membersihkan file data lama.
Frekuensi eksekusi
Layanan Compaction menghemat sumber daya komputasi dan penyimpanan dengan menghilangkan status catatan historis, sehingga meningkatkan efisiensi kueri snapshot lengkap. Namun, Compaction yang terlalu sering memerlukan sumber daya komputasi dan I/O yang signifikan serta dapat menyebabkan BaseFile baru menggunakan penyimpanan tambahan. DeltaFile historis mungkin masih diperlukan untuk kueri Time Travel dan tidak dapat dihapus segera, sehingga tetap menimbulkan biaya penyimpanan.
Oleh karena itu, frekuensi eksekusi operasi Compaction harus ditentukan berdasarkan kebutuhan bisnis dan karakteristik data spesifik Anda. Jika operasi UPDATE dan DELETE sering terjadi serta permintaan terhadap kueri snapshot lengkap tinggi, pertimbangkan untuk meningkatkan frekuensi Compaction guna mengoptimalkan kecepatan kueri.
Pengambilan data
Karena Time Travel dan kueri inkremental sama-sama mengakses status data historis, tabel Delta menyimpan versi historis data selama periode tertentu.
Kebijakan pembersihan: Anda dapat mengonfigurasi periode retensi data menggunakan properti tabel
acid.data.retain.hours. Jika data historis lebih tua dari nilai yang dikonfigurasi, sistem akan secara otomatis membersihkan dan menghapusnya. Setelah pembersihan selesai, versi historis tersebut tidak dapat lagi diakses melalui Time Travel. Data yang dibersihkan terutama mencakup log operasi dan file data.CatatanUntuk tabel Delta, jika Anda terus-menerus menulis DeltaFile baru, tidak ada DeltaFile yang dapat dihapus karena DeltaFile lain mungkin memiliki dependensi status terhadapnya. Setelah Anda menjalankan operasi COMPACTION atau operasi InsertOverwrite, file data yang dihasilkan selanjutnya tidak lagi bergantung pada DeltaFile sebelumnya. Setelah periode kueri Time Travel berakhir, file tersebut dapat dihapus.
Pembersihan paksa: Dalam skenario khusus, Anda dapat menggunakan perintah
PURGEuntuk memicu pembersihan paksa data historis secara manual.Mekanisme otomatis: Untuk mencegah pertumbuhan tak terbatas pada data historis—yang dapat terjadi jika Compaction tidak dijalankan dalam waktu lama—mesin MaxCompute menyertakan beberapa optimasi. Sistem backend secara berkala menjalankan Compaction otomatis pada BaseFile atau DeltaFile yang lebih tua dari periode Time Travel yang dikonfigurasi, sehingga memastikan mekanisme pembersihan berfungsi dengan baik.