Topik ini menjelaskan solusi komputasi aliran diperluas yang dikembangkan berdasarkan fitur Indeks Kolom dalam Memori (IMCI) dari PolarDB, yang digunakan untuk menganalisis sejumlah besar data terstruktur dan semi-terstruktur. Solusi ini mengintegrasikan berbagai fitur IMCI seperti penyimpanan berorientasi kolom untuk data berformat JSON, kolom virtual, DDL instan, dan jumlah kolom maksimum yang diperluas dalam sebuah tabel. Topik ini juga mencakup beberapa kasus penggunaan pelanggan.
Informasi latar belakang
Untuk menyesuaikan dengan skenario yang beragam dan iterasi cepat, sebagian besar sistem bisnis dibangun untuk menyimpan dan menganalisis data semi-terstruktur. Fitur IMCI dari PolarDB menyediakan fitur komprehensif seperti kolom virtual dan penyimpanan berorientasi kolom untuk data berformat JSON. IMCI dapat memproses data besar serta berbagai jenis data termasuk data terstruktur dan semi-terstruktur dengan cepat. IMCI juga memberikan kemampuan analisis data yang efisien, kueri data, dan komputasi aliran. Ini cocok untuk skenario seperti analisis data, gudang data, dan komputasi aliran diperluas.
Topik ini menjelaskan cara menghitung dan menganalisis sejumlah besar data semi-terstruktur, seperti data berformat JSON, menggunakan solusi analisis data real-time dan komputasi aliran diperluas yang dikembangkan berdasarkan fitur IMCI dari PolarDB. Sebelum itu, topik ini menjelaskan solusi untuk analisis data semi-terstruktur di database tradisional dan gudang data, serta fitur-fitur IMCI yang disediakan oleh PolarDB, termasuk penyimpanan berorientasi kolom untuk data berformat JSON, kolom virtual, DDL instan, dan jumlah kolom maksimum yang diperluas dalam sebuah tabel.
Solusi
Data berformat JSON sering dianalisis di sebagian besar sistem bisnis karena fleksibilitas data semi-terstruktur dan kebutuhan untuk analisis yang efisien. Oleh karena itu, fleksibilitas dan efisiensi adalah metrik utama untuk mengukur kinerja solusi analisis data semi-terstruktur.
Solusi di database tradisional
Di database relasional tradisional seperti MySQL, PostgreSQL, dan ClickHouse, data mentah berformat JSON dienkripsi menjadi data biner dan kemudian disimpan di kolom JSON tabel. Selama kueri, fungsi JSON digunakan untuk mengurai dan menghitung semua data di kolom JSON secara real-time.
Data berformat JSON merupakan jenis data semi-terstruktur. Anda dapat menambahkan, menghapus, dan memodifikasi atribut data berformat JSON sesuai kebutuhan bisnis Anda. Jika kebutuhan bisnis berubah, Anda hanya perlu menambahkan, menghapus, atau memodifikasi atribut relevan untuk data baru di kolom JSON pada sistem bisnis Anda, tanpa perlu memodifikasi skema tabel. Ini secara efektif mengurangi biaya pemeliharaan dan pengelolaan skema tabel. Namun, semua data di kolom JSON diurai secara real-time selama kueri, yang mengonsumsi sejumlah besar sumber daya I/O dan dapat menyebabkan penguraian dan penghitungan berulang. Selain itu, Anda tidak dapat membuat atau menggunakan indeks sekunder untuk bidang tertentu di kolom JSON.
select product.item->"$.name"
from product, purchase
where product.id = purchase.item->"$.id"
group by product.item->"$.name";Sebagai contoh, pernyataan SQL di atas dieksekusi di database tradisional untuk mengkueri data berdasarkan nested loop join. Setiap kali satu baris data dibaca dari tabel produk, semua data dibaca dari kolom item tabel pembelian. Semua data di kolom item, yang merupakan kolom JSON, diurai berulang kali untuk mengekstrak data dari bidang tertentu. Hal ini menurunkan efisiensi kueri.
Solusi di gudang data tradisional
Proses pemrosesan data di gudang data terdiri dari langkah-langkah berikut:
Ekstraksi data: mengekstrak data yang diperlukan dari berbagai sumber data, termasuk database, file, dan layanan web, serta membersihkan, mentransformasi, dan menyaring data yang diekstraksi.
Transformasi data: mentransformasi data yang diekstraksi untuk memastikan bahwa data sesuai dengan model data dan spesifikasi gudang data. Operasi yang relevan meliputi pembersihan data, integrasi data, transformasi data, peningkatan data, dan agregasi data.
Pemuatan data: memuat data yang ditransformasi ke gudang data, termasuk tabel dimensi dan tabel fakta.
Manajemen data: mengelola data di gudang data, termasuk cadangan data, pemulihan data, dan keamanan data.
Analisis data: melakukan analisis multidimensi pada data di gudang data, termasuk kueri data, pembuatan laporan, dan penambangan data.
Dalam kebanyakan kasus, data produksi sistem bisnis diproses oleh pekerjaan ekstraksi, transformasi, dan pemuatan (ETL) berdasarkan kebutuhan bisnis sebelum data diimpor ke gudang data.
Selama pemrosesan data di gudang data, data berformat JSON diuraikan sebelumnya di pekerjaan ETL untuk menghitung nilai yang sesuai jika diperlukan, dan kemudian nilai-nilai tersebut dimasukkan ke kolom terpisah dari tabel. Dengan cara ini, atribut data berformat JSON dapat diproses berdasarkan kebutuhan bisnis dan dimasukkan ke kolom tabel lebar besar. Ini meningkatkan kinerja kueri. Selama kueri, data dapat dibaca dari kolom biasa, tanpa perlu membaca atau mengurai semua data di kolom JSON. Ini menghemat sejumlah besar sumber daya I/O. Selain itu, Anda dapat membuat dan menggunakan indeks untuk kolom biasa untuk secara efektif meningkatkan kinerja kueri.
Namun, jika Anda menambahkan, menghapus, atau memodifikasi atribut data berformat JSON berdasarkan kebutuhan bisnis di sistem bisnis Anda, pekerjaan ETL dan skema tabel di gudang data Anda harus dimodifikasi untuk menyesuaikan dengan data produksi hulu. Operasi seperti menerbitkan ulang pekerjaan ETL dan mengeksekusi pernyataan DDL untuk menambahkan atau menghapus kolom dilakukan untuk mempertahankan logika pekerjaan ETL dan skema tabel bisnis. Penerbitan ulang pekerjaan ETL yang sering memengaruhi konsumsi data di hulu dan gudang data di hilir. Selain itu, memodifikasi skema tabel besar mahal tanpa fitur DDL instan dan juga memengaruhi kueri data normal.
Solusi untuk analisis data semi-terstruktur di gudang data tradisional dapat memberikan kueri data yang efisien, tetapi kurang fleksibel dan memerlukan biaya pemeliharaan tinggi.
Solusi IMCI
Solusi untuk analisis data semi-terstruktur di database tradisional dan gudang data tidak dapat memenuhi persyaratan untuk kinerja kueri dan arsitektur fleksibel pada saat yang sama. Untuk memenuhi kebutuhan mendesak akan solusi baru di industri, Alibaba Cloud menyediakan fitur IMCI dari PolarDB.
Bab ini menjelaskan berbagai fitur yang disediakan oleh fitur IMCI dari PolarDB, termasuk penyimpanan berorientasi kolom untuk data berformat JSON, kolom virtual, DDL instan, dan jumlah kolom maksimum yang diperluas dalam sebuah tabel.
Penyimpanan berorientasi kolom untuk data berformat JSON
Sebagai bentuk data antara data terstruktur dan data tidak terstruktur, data semi-terstruktur sebagian terstruktur dan kekurangan model data relasional atau tabular tertentu. Data semi-terstruktur dapat dideskripsikan dan diatur dengan menggunakan elemen struktural seperti tag, penanda, dan metadata, tetapi struktur dan organisasinya juga dapat disesuaikan secara dinamis saat konten data berubah. Kode HTML di halaman web, dokumen XML, data berformat JSON, dan data di database NoSQL adalah contoh data semi-terstruktur. Fleksibilitas dan skalabilitas data semi-terstruktur menjadikannya bagian penting dari era big data.
PolarDB for MySQL adalah sistem manajemen database relasional yang menyimpan data terstruktur. PolarDB for MySQL juga mendukung penyimpanan dan kueri data semi-terstruktur, seperti data dalam format XML atau JSON. Fitur IMCI dari PolarDB sepenuhnya mendukung data berformat JSON dan fungsi JSON berorientasi kolom. Ini menggunakan format JSON biner untuk menyimpan data semi-terstruktur, dan menggunakan fungsi JSON berorientasi kolom untuk mengurai, mengkueri, memodifikasi, dan menghapus data berformat JSON. IMCI sepenuhnya kompatibel dengan sintaks MySQL.
Fitur IMCI dari PolarDB menggunakan format biner sederhana untuk menyimpan data berformat JSON berdasarkan kolom, dan menggunakan RapidJSON untuk mengurai data berformat JSON. Selama pemrosesan data, data dibaca sesuai permintaan dan teknologi kompresi untuk penyimpanan berorientasi kolom digunakan. Ini secara efektif mengurangi jumlah sumber daya I/O yang dikonsumsi. Selain itu, teknologi seperti single instruction multiple data (SIMD), vektorisasi, dan paralelisme digunakan untuk mempercepat komputasi.
Dalam contoh ini, data uji digunakan untuk menunjukkan cara menggunakan penyimpanan berorientasi kolom untuk data berformat JSON dan membandingkan kinerja kueri antara penyimpanan berorientasi baris dan penyimpanan berorientasi kolom.
Saat Anda membuat tabel, tambahkan kolom JSON dan buat IMCI pada kolom JSON.
create table produce (
id bigint(20) NOT NULL,
attributes json DEFAULT NULL
) comment='columnar=1';Gunakan fungsi JSON berorientasi kolom untuk mengkueri data.
select count(*)
from produce
where attributes->"$.delivery.width" > 10 and attributes->"$.delivery.height" > 10 and attributes->"$.delivery.weight" > 10;Kode sampel berikut menunjukkan rencana eksekusi kueri:
Project | Exprs: temp_table1.COUNT(0)
HashGroupby | OutputTable(1): temp_table1 | Grouping: None | Output Grouping: None | Aggrs: COUNT(0)
CTableScan | InputTable(0): produce | Pred: ((JSON_EXTRACT(produce.attributes, "$.delivery.width") > "10(json)") AND (JSON_EXTRACT(produce.attributes, "$.delivery.height") > "10(json)") AND (JSON_EXTRACT(produce.attributes, "$.delivery.weight") > "10(json)"))Tabel berikut membandingkan durasi untuk mengeksekusi pernyataan SQL pada tabel produce yang berisi puluhan juta entri data di PolarDB antara penyimpanan berorientasi baris dan penyimpanan berorientasi kolom.
Model penyimpanan | Durasi eksekusi SQL |
Penyimpanan berorientasi baris | 9,29 detik |
Penyimpanan berorientasi kolom dengan IMCI diaktifkan (32 core) | 0,14 detik |
Hasil pengujian di atas menunjukkan bahwa kinerja kueri penyimpanan berorientasi kolom lebih tinggi daripada penyimpanan berorientasi baris hampir dua orde magnitudo. Fitur IMCI dari PolarDB dapat menganalisis data berformat JSON lebih efisien. Kinerja kueri bisnis online dapat bervariasi berdasarkan dataset dan mode kueri. Data pengujian hanya untuk referensi.
Kolom virtual
Sebagai jenis kolom khusus, kolom virtual tidak memiliki nilai yang dimasukkan atau diperbarui, tetapi dihitung, digabungkan, atau difilter secara dinamis berdasarkan nilai kolom lain di tabel yang sama. Kolom virtual dapat digunakan untuk kueri data dan pengindeksan, tetapi tidak dapat dimodifikasi atau dihapus langsung. Kolom virtual memungkinkan Anda mengakses dan memproses data dengan cepat, tanpa perlu menghitung data untuk setiap kueri. Ini mengoptimalkan kueri data dan menyederhanakan operasi.
Untuk mengimplementasikan kolom virtual, fitur IMCI dari PolarDB mendukung dua jenis kolom yang dihasilkan: kolom tergenerasi virtual dan kolom tergenerasi yang disimpan. Secara default, kolom tergenerasi virtual digunakan. Nilai yang dihitung dari kolom tergenerasi virtual disimpan secara persisten di tabel berorientasi kolom, tetapi tidak di tabel berorientasi baris. Setiap kali tabel berorientasi baris dibaca, nilai kolom tergenerasi virtual dihitung secara real-time. Nilai yang dihitung dari kolom tergenerasi yang disimpan disimpan secara persisten di tabel berorientasi kolom dan tabel berorientasi baris, tetapi memakan lebih banyak ruang disk. Kami merekomendasikan Anda menggunakan kolom tergenerasi virtual saat menggunakan fitur IMCI dari PolarDB. Kolom tergenerasi virtual tidak hanya menghemat ruang disk tetapi juga meningkatkan kinerja penyimpanan berorientasi kolom.
Kode sampel berikut menunjukkan sintaks yang digunakan untuk mendefinisikan kolom virtual:
col_name data_type [GENERATED ALWAYS] AS (expr)
[VIRTUAL | STORED] [NOT NULL | NULL]
[UNIQUE [KEY]] [[PRIMARY] KEY]
[COMMENT 'string']Dalam contoh ini, data uji digunakan untuk menunjukkan cara menggunakan kolom virtual dan membandingkan kinerja kueri antara penyimpanan berorientasi baris dan penyimpanan berorientasi kolom.
Saat Anda membuat tabel, tambahkan kolom virtual dan buat IMCI pada kolom virtual.
create table produce (
id bigint(20) NOT NULL,
attributes json DEFAULT NULL,
`delivery_volume` double GENERATED ALWAYS AS (((json_extract(`attributes`,'$.delivery.width') * json_extract(`attributes`,'$.delivery.height')) * json_extract(`attributes`,'$.delivery.weight'))) VIRTUAL
) comment='columnar=1';Kueri data pada kolom biasa dan kolom virtual.
Kueri data pada kolom biasa.
select count(*) from produce where (attributes->"$.delivery.width" * attributes->"$.delivery.height" * attributes->"$.delivery.weight") > 1000;Kode sampel berikut menunjukkan rencana eksekusi kueri:
Project | Exprs: temp_table1.COUNT(0) HashGroupby | OutputTable(1): temp_table1 | Grouping: None | Output Grouping: None | Aggrs: COUNT(0) CTableScan | InputTable(0): produce | Pred: ((CAST JSON_EXTRACT(produce.attributes, "$.delivery.width")/JSON as DOUBLE(38, 31)) * (CAST JSON_EXTRACT(produce.attributes, "$.delivery.height")/JSON as DOUBLE(38, 31)) * (CAST JSON_EXTRACT(produce.attributes, "$.delivery.weight")/JSON as DOUBLE(38, 31)) > 1000.000000)Tabel berikut membandingkan durasi untuk mengeksekusi pernyataan SQL pada kolom biasa tabel produce yang berisi puluhan juta entri data di PolarDB antara penyimpanan berorientasi baris dan penyimpanan berorientasi kolom.
Model penyimpanan
Durasi eksekusi SQL
Penyimpanan berorientasi baris
13,43 detik
Penyimpanan berorientasi kolom dengan IMCI diaktifkan (satu core)
5,72 detik
Penyimpanan berorientasi kolom dengan IMCI diaktifkan (32 core)
0,24 detik
Kueri data pada kolom virtual.
select count(*) from produce where delivery_volume > 1000;Kode sampel berikut menunjukkan rencana eksekusi kueri:
Project | Exprs: temp_table1.COUNT(0) HashGroupby | OutputTable(1): temp_table1 | Grouping: None | Output Grouping: None | Aggrs: COUNT(0) CTableScan | InputTable(0): produce | Pred: (produce.delivery_volume > 1000.000000)Tabel berikut membandingkan durasi untuk mengeksekusi pernyataan SQL pada kolom virtual tabel produce yang berisi puluhan juta entri data di PolarDB antara penyimpanan berorientasi baris dan penyimpanan berorientasi kolom.
Model penyimpanan
Durasi eksekusi SQL
Penyimpanan berorientasi baris
14,30 detik
Penyimpanan berorientasi kolom dengan IMCI diaktifkan (satu core)
0,03 detik
Penyimpanan berorientasi kolom dengan IMCI diaktifkan (32 core)
0,01 detik
Hasil pengujian di atas menunjukkan bahwa fitur IMCI dari PolarDB dapat secara efektif meningkatkan kinerja kueri dengan menggunakan kolom virtual. Kinerja kueri bisnis online dapat bervariasi berdasarkan dataset dan mode kueri. Data pengujian hanya untuk referensi.
Fitur kolom virtual dari PolarDB for MySQL fleksibel dan kuat. Saat Anda memproses data semi-terstruktur, seperti data berformat JSON, Anda dapat menyimpan data tidak teratur sebagai data terstruktur dengan menggunakan kolom virtual. Ini menghilangkan kebutuhan untuk menjalankan pekerjaan ETL untuk pemrosesan data dan memungkinkan Anda menggunakan sintaks SQL tradisional untuk kueri data dan analisis. Kolom virtual menyederhanakan komputasi dan kueri kompleks, meningkatkan fleksibilitas arsitektur database Anda, dan menghindari redundansi data yang disebabkan oleh penyimpanan berorientasi baris. Setelah Anda membuat IMCI pada kolom virtual, Anda dapat menggunakan mekanisme pruner untuk penyimpanan berorientasi kolom untuk menyaring data, yang secara efektif meningkatkan kinerja kueri.
DDL Instan
Jika Anda perlu menambahkan atau menghapus kolom JSON untuk data semi-terstruktur berdasarkan kebutuhan bisnis Anda, Anda dapat mengeksekusi pernyataan DDL untuk menambahkan kolom ke atau menghapus kolom dari tabel. Dalam hal ini, fitur diperlukan untuk membantu Anda menambahkan atau menghapus kolom secara efisien. Setiap kali struktur data semi-terstruktur berubah, Anda tidak perlu memodifikasi skema tabel Anda. Jika data tidak sering dikueri di tabel Anda, Anda dapat menggunakan fungsi JSON berorientasi kolom untuk menghitung data secara real-time untuk setiap kueri. Dalam kebanyakan kasus, komputasi real-time dapat memenuhi persyaratan kinerja kueri Anda jika fitur IMCI dari PolarDB digunakan untuk data berformat JSON.
Fitur IMCI dari PolarDB menyediakan fitur DDL instan untuk membantu Anda menambahkan atau menghapus kolom virtual secara instan, selama proses tersebut operasi baca dan tulis dapat dilakukan dan kueri data normal tidak terpengaruh.
Kode sampel berikut menunjukkan sintaks yang digunakan untuk menambahkan kolom virtual dengan menggunakan fitur DDL instan:
alter table produce add column delivery_volume DOUBLE AS (attributes->"$.delivery.width" * attributes->"$.delivery.height" * attributes->"$.delivery.weight");Kode sampel berikut menunjukkan sintaks yang digunakan untuk menghapus kolom virtual dengan menggunakan fitur DDL instan:
alter table produce drop column delivery_volume;Jumlah kolom maksimum yang diperluas dalam sebuah tabel
Setelah atribut data semi-terstruktur diproses dan dimasukkan ke tabel lebar besar sebagai kolom virtual, jumlah kolom di tabel lebar besar terus bertambah seiring dengan bertambahnya atribut data semi-terstruktur. Jumlah maksimum kolom dalam tabel database MySQL asli bergantung pada batasan mesin penyimpanan yang digunakan oleh tabel. Misalnya, Mesin Penyimpanan InnoDB mendukung maksimal 1.017 kolom dalam sebuah tabel. Untuk tabel berorientasi baris, batas jumlah maksimum kolom dalam tabel memenuhi sebagian besar kebutuhan bisnis. Selama desain skema tabel untuk database relasional, tabel lebar besar jarang digunakan. Tabel yang berisi sejumlah besar kolom mengonsumsi lebih banyak sumber daya I/O dan memori selama kueri tetapi menurunkan efisiensi kueri. Misalnya, jika Anda perlu membaca data dari kolom tertentu, Anda harus membaca semua baris. Dalam kebanyakan kasus, tabel besar dibagi atau tabel kecil digabungkan untuk mengoptimalkan skema tabel. Jika penyimpanan berorientasi kolom digunakan, tabel lebar besar lebih disukai karena mereka dapat meningkatkan efisiensi kueri dan mencegah penggabungan tabel. Di tabel berorientasi kolom, data disimpan berdasarkan kolom untuk mencapai efek kompresi yang lebih baik. Jika Anda perlu membaca data dari kolom tertentu, Anda hanya perlu membaca kolom-kolom tersebut. Ini secara efektif mengurangi jumlah sumber daya I/O yang dikonsumsi.
Selama pemrosesan data semi-terstruktur, fitur IMCI dari PolarDB mengonversi beberapa atribut data semi-terstruktur sesuai kebutuhan dan memasukkan data yang dikonversi ke kolom virtual terpisah dari tabel. Jika data semi-terstruktur berisi sejumlah besar atribut, jumlah kolom di tabel mungkin melebihi batas. Oleh karena itu, fitur IMCI dari PolarDB memperluas jumlah maksimum kolom dalam tabel berorientasi kolom yang menggunakan Mesin Penyimpanan InnoDB menjadi 4.089.
Analisis data real-time
Untuk menganalisis data semi-terstruktur, fitur IMCI dari PolarDB mengimplementasikan fitur seperti penyimpanan berorientasi kolom untuk data berformat JSON dan kolom virtual. Dalam bab ini, solusi analisis data real-time yang dikembangkan berdasarkan fitur IMCI dari PolarDB diuji menggunakan data acara real-time GitHub pada Juli 2023.
Anda dapat mengunduh data acara real-time GitHub dalam format JSON dari GH Archive. Sebagai contoh, Anda dapat menjalankan perintah wget untuk mengunduh data untuk setiap jam di bulan Juli 2023. Setelah data diunduh, uraikan data dan masukkan data ke dalam tabel bernama github_events.
Definisikan tabel github_events berdasarkan Tipe Acara GitHub.
create table github_events (id bigint, type varchar(16), public bit, payload json, repo json, actor json, org json, created_at datetime);Pilih pernyataan SQL dari Everything You Always Wanted To Know About GitHub dan tulis ulang pernyataan SQL untuk melakukan dua kueri.
Kueri bahasa pemrograman paling populer dalam seminggu.
SELECT
repo_language AS language,
count(*) AS total
FROM
github_events
WHERE
created_at >= "2023-07-25 00:00:00"
AND created_at <= "2023-07-31 23:59:59"
AND repo_language IS NOT NULL
GROUP BY
repo_language
ORDER BY
total DESC
LIMIT 10;Peringkat semua repositori Linux berdasarkan jumlah bintang.
SELECT repo_name, count(*) AS stars
FROM github_events
WHERE (type = 'WatchEvent') AND (actor_login IN
(
SELECT actor_login
FROM github_events
WHERE (type = 'WatchEvent') AND (repo_name IN ('torvalds/linux')) AND created_at >= "2023-07-31 00:00:00" AND created_at <= "2023-07-31 23:59:59"
)) AND (repo_name NOT IN ('torvalds/linux')) AND created_at >= "2023-07-31 00:00:00" AND created_at <= "2023-07-31 23:59:5:59"
GROUP BY repo_name
ORDER BY stars DESC
LIMIT 10;Tambahkan kolom virtual seperti actor_login, repo_name, dan repo_language ke tabel github_events berdasarkan pernyataan SQL di atas dan buat IMCI.
alter table github_events add column actor_login varchar(256) generated always as (json_unquote(json_extract(`actor`,'$.login'))) virtual, add column repo_name varchar(256) generated always as (json_unquote(json_extract(`repo`,'$.name'))) virtual, add column repo_language varchar(32) generated always as (json_unquote(json_extract(`payload`,'$.pull_request.base.repo.language'))) virtual, comment 'columnar=1';Atur ukuran cache menjadi 500 GB untuk penyimpanan berorientasi baris dan 128 GB untuk penyimpanan berorientasi kolom. Tabel berikut membandingkan durasi untuk mengeksekusi pernyataan SQL pada data panas antara penyimpanan berorientasi baris dan penyimpanan berorientasi kolom.
Model penyimpanan | Durasi eksekusi SQL Kueri 1 | Durasi eksekusi SQL Kueri 2 |
Penyimpanan berorientasi baris | 45,01 detik | 8,57 detik |
Penyimpanan berorientasi kolom dengan IMCI diaktifkan (satu core) | 0,79 detik | 0,54 detik |
Penyimpanan berorientasi kolom dengan IMCI diaktifkan (32 core) | 0,04 detik | 0,07 detik |
Hasil pengujian di atas menunjukkan bahwa solusi analisis data real-time yang dikembangkan berdasarkan fitur IMCI dari PolarDB memberikan kinerja jauh lebih baik daripada penyimpanan berorientasi baris. Anda dapat menggunakan solusi ini untuk menganalisis sejumlah besar data semi-terstruktur secara efisien.
Komputasi aliran diperluas
Solusi komputasi aliran diperluas dikembangkan berdasarkan fitur IMCI dari PolarDB sebagai solusi otomatis untuk membantu Anda menganalisis sejumlah besar data semi-terstruktur. Solusi ini mengintegrasikan berbagai fitur IMCI yang dijelaskan dalam topik ini, seperti penyimpanan berorientasi kolom untuk data berformat JSON, kolom virtual, DDL instan, dan jumlah kolom maksimum yang diperluas dalam sebuah tabel.
Komputasi aliran merupakan teknologi pemrosesan data real-time yang menghitung dan menganalisis data secara langsung berdasarkan aliran data kontinu. Sebagai bentuk komputasi aliran ringan, komputasi aliran diperluas berfokus pada pemrosesan aliran data serta menyediakan hasil komputasi secara real-time. Komputasi ini bertujuan untuk meminimalkan penggunaan sumber daya komputasi dan mengurangi kompleksitas sistem. Dibandingkan dengan komputasi aliran tradisional, komputasi aliran diperluas lebih menekankan pada aspek ringan, respons cepat, dan otomatisasi.
Solusi komputasi aliran diperluas yang dikembangkan berdasarkan fitur IMCI dari PolarDB menggunakan pernyataan SQL untuk mendefinisikan logika pemrosesan aliran data sebagai ekspresi atau fungsi dalam skema tabel berorientasi kolom. Logika pemrosesan ini direkam sebagai kolom virtual. Kerangka kerja komputasi aliran diperluas secara otomatis menghitung data secara real-time berdasarkan aliran data bisnis dan menyimpan hasilnya secara persisten di tabel berorientasi kolom. Selama kueri, IMCI digunakan untuk membaca data yang telah dihitung. Proses komputasi aliran diperluas terintegrasi dengan fitur IMCI dari PolarDB. Anda hanya perlu mengeksekusi pernyataan DDL untuk mendefinisikan logika pemrosesan aliran data yang berbeda sebagai kolom virtual. Jika kebutuhan bisnis berubah, Anda cukup mengeksekusi pernyataan DDL untuk menambahkan atau memodifikasi kolom virtual.
Untuk menganalisis data semi-terstruktur dalam jumlah besar, Anda dapat menggunakan fungsi JSON dan atribut data berformat JSON untuk mendefinisikan logika pemrosesan aliran sebagai kolom virtual sesuai kebutuhan bisnis. Selanjutnya, buat IMCI pada kolom virtual tersebut. Dengan fitur IMCI dari PolarDB, sistem secara otomatis menghitung dan menyimpan data secara real-time berdasarkan aliran data kontinu, serta terus memperbarui tabel lebar besar. Saat menjalankan kueri, Anda dapat menggunakan IMCI untuk mengkueri data pada kolom virtual tertentu. Pendekatan ini mencegah pembacaan atau penguraian berulang pada semua data di kolom JSON, sehingga meningkatkan efisiensi kueri secara signifikan. Jika Anda menggunakan fungsi JSON untuk mengkueri data, pengoptimal PolarDB akan memeriksa apakah ada kolom virtual yang cocok berdasarkan fungsi JSON dan kolom JSON. Kolom virtual yang sesuai dipilih dan dikueri terlebih dahulu untuk meningkatkan kinerja kueri. Jika Anda perlu menambah, menghapus, atau memodifikasi atribut data berformat JSON sesuai dengan kebutuhan bisnis di sistem Anda, cukup gunakan fitur DDL instan untuk menambahkan atau menghapus kolom. Ini menghilangkan kebutuhan untuk menjalankan pekerjaan ETL seperti yang dilakukan di gudang data tradisional, memungkinkan Anda memodifikasi skema tabel secara instan. Dengan cara ini, Anda dapat merespons secara fleksibel terhadap perubahan kebutuhan bisnis tanpa biaya pemeliharaan tambahan, serta memastikan kelangsungan operasional bisnis. Jika data yang diperbarui jarang dikueri, Anda tidak perlu memodifikasi skema tabel. Sebagai alternatif, Anda dapat menggunakan fungsi JSON berorientasi kolom untuk mengurai data secara real-time pada setiap kueri, yang juga memenuhi sebagian besar kebutuhan bisnis.
Kesimpulannya, solusi komputasi aliran diperluas yang dikembangkan berdasarkan fitur IMCI dari PolarDB menggabungkan fleksibilitas database tradisional dengan efisiensi gudang data tradisional. Solusi ini sangat cocok untuk menganalisis sejumlah besar data semi-terstruktur.
Kasus penggunaan pelanggan
Platform streaming
Sebuah platform streaming merupakan salah satu platform video online paling populer di Cina. Platform ini menawarkan berbagai konten seperti film, drama TV, acara variety, dan streaming langsung. Pengguna dapat berlangganan sebagai pelanggan berbayar untuk mendapatkan pengalaman menonton yang lebih baik.
Berdasarkan jumlah pelanggan berlangganan yang besar, volume data transaksi terus berkembang pesat setiap hari. Data transaksi pelanggan disimpan secara terpisah di tabel real-time dan digunakan untuk mengimplementasikan fitur seperti kompensasi bisnis, verifikasi, pemantauan status pesanan secara real-time, manajemen pesanan otomatis, serta pemrosesan otomatis manfaat pelanggan.
Sistem database asli menggunakan sharding di MySQL untuk memproses data transaksi pelanggan. Database diimplementasikan dalam kluster MySQL dengan arsitektur yang terdiri dari satu node utama dan beberapa node baca saja. Seiring meningkatnya volume data transaksi, jumlah partisi dan node baca saja ditingkatkan untuk menskalakan kluster MySQL. Sinkronisasi data antar node dilakukan menggunakan log biner. Untuk menghadapi iterasi cepat, sejumlah besar data semi-terstruktur seperti data berformat JSON dihasilkan dan diproses dalam sistem database. Dengan pertumbuhan bisnis yang pesat, kueri konkurensi tinggi sering dilakukan pada data berformat JSON dalam tabel besar. Untuk menangani kueri tersebut, jumlah database dan partisi terus ditambahkan ke dalam arsitektur database yang ada. Hal ini mengakibatkan operasi O&M yang kompleks, biaya O&M yang lebih tinggi, serta potensi penurunan kinerja kueri.
Dalam hal ini, platform streaming memerlukan arsitektur database baru dengan operasi O&M yang disederhanakan guna mengurangi biaya dan meningkatkan efisiensi. Dengan dukungan dari Alibaba Cloud, arsitektur database baru ini mengadopsi solusi hybrid transactional/analytical processing (HTAP) all-in-one dari PolarDB. Solusi tersebut sepenuhnya memanfaatkan komputasi aliran diperluas dan penyimpanan berorientasi kolom untuk meningkatkan kinerja analisis terhadap sejumlah besar data berformat JSON, serta secara efektif menyederhanakan operasi O&M.
Platform e-commerce keuangan
Sebuah platform e-commerce keuangan dijalankan oleh perusahaan teknologi keuangan yang berbasis di Singapura dan didirikan pada tahun 2016. Platform ini menawarkan layanan keuangan konsumen di Asia Tenggara, mencakup pembayaran cicilan, pinjaman kredit, kartu kredit virtual, serta layanan e-commerce. Dengan jutaan pengguna di Indonesia, Filipina, Malaysia, Thailand, dan Vietnam, platform ini telah menjadi salah satu penyedia layanan keuangan konsumen terkemuka di wilayah tersebut.
Sistem bisnis pesanan platform dapat dibagi menjadi sistem pemrosesan transaksi dan sistem analisis data. Sistem pemrosesan transaksi menggunakan data berformat JSON untuk menyimpan berbagai atribut bisnis, sementara sistem analisis data bertugas menghitung dan menganalisis sejumlah besar atribut bisnis tersebut.
Pada sistem database asli, kluster MySQL digunakan untuk memproses transaksi bisnis, sedangkan kluster ClickHouse digunakan untuk menganalisis data bisnis. Apache Flink berfungsi untuk berlangganan aliran data MySQL, mengonversi data berformat JSON menjadi data terstruktur guna membangun tabel lebar besar, yang kemudian dimasukkan ke kluster ClickHouse secara real-time. Namun, karena kompleksitas arsitektur database yang ada, beberapa masalah dapat muncul, seperti kehilangan data selama pemrosesan, penundaan analisis data, dan kinerja kueri yang kurang optimal. Jika Anda perlu menambahkan, menghapus, atau memodifikasi atribut data berformat JSON sesuai dengan kebutuhan bisnis, logika pemrosesan Flink dan skema tabel ClickHouse harus diubah. Akan tetapi, ClickHouse tidak mendukung fitur DDL instan, sehingga memperpanjang waktu yang diperlukan untuk memodifikasi tabel besar dan memengaruhi kinerja kueri. Seiring dengan perkembangan bisnis, arsitek platform sangat memerlukan arsitektur database baru yang menawarkan stabilitas sistem, operasi O&M yang disederhanakan, analisis kinerja yang lebih baik, serta penghematan biaya.
Solusi HTAP cloud-native dari PolarDB, yang mengintegrasikan pemrosesan transaksi real-time dan analisis data real-time, merupakan pilihan terbaik. Dibandingkan dengan sistem database tradisional yang menggabungkan beberapa sistem seperti MySQL, Data Transmission Service (DTS), Apache Flink, dan ClickHouse, sistem database baru ini memiliki arsitektur sederhana yang sepenuhnya berbasis pada PolarDB. Pada arsitektur database baru ini, solusi komputasi aliran diperluas yang dikembangkan menggunakan fitur IMCI dari PolarDB digunakan sebagai pengganti Apache Flink untuk secara otomatis mengonversi data semi-terstruktur menjadi data terstruktur. Selain itu, fitur DDL instan digunakan untuk menyederhanakan operasi O&M, jumlah kolom maksimum dalam sebuah tabel telah diperluas untuk mendukung pertumbuhan bisnis yang cepat, dan penyimpanan berorientasi kolom meningkatkan kinerja analitik.