Saat menggunakan Mesin komputasi Spark untuk mengakses Tablestore, Anda dapat memanfaatkan SQL E-MapReduce atau pemrograman DataFrame guna menjalankan komputasi kompleks dan menganalisis data secara efisien.
Fitur
Untuk komputasi batch, Tablestore pada Spark menyediakan fitur optimasi inti berikut:
-
Pemilihan indeks: Memilih indeks yang tepat merupakan kunci efisiensi kueri data. Pilih indeks yang paling sesuai berdasarkan kondisi filter Anda untuk meningkatkan performa kueri. Tablestore menyediakan global secondary indexes dan search indexes.
CatatanUntuk informasi lebih lanjut tentang global secondary indexes dan search indexes, lihat A deep dive into massive structured data storage technology: Tablestore storage and indexing engines.
-
Pemangkasan partisi tabel: Fitur ini mencocokkan partisi logis (Splits) dengan kondisi filter dan memfilter Splits yang tidak valid, sehingga mengurangi volume data yang ditransfer dari sisi server.
-
Projection dan filter pushdown: Fitur ini mendorong kolom proyeksi dan kondisi filter ke sisi server, sehingga mengurangi volume data yang ditransfer dari setiap partisi.
-
Spesifikasi ukuran Split dinamis: Anda dapat menyesuaikan volume data dan jumlah partisi dalam setiap partisi logis (Split). Setiap Split dipetakan ke partisi Resilient Distributed Dataset (RDD), yang dapat mempercepat eksekusi tugas Spark.
CatatanAnda dapat menggunakan API ComputeSplitsBySize untuk memperoleh partisi logis (Splits). API ini membagi tabel secara logis menjadi Splits dengan ukuran perkiraan tertentu dan mengembalikan titik pemisahan serta petunjuk lokasi untuk Splits tersebut. Mesin komputasi biasanya menggunakan informasi ini untuk perencanaan eksekusi, seperti perencanaan konkurensi.
Untuk komputasi aliran, Tablestore pada Spark memanfaatkan teknologi Data Change Capture (CDC) berbasis Tunnel Service guna mengimplementasikan konsumsi dan komputasi aliran mini-batch pada Spark. Fitur ini juga menyediakan semantik konsistensi at-least-once. Dalam komputasi aliran, setiap partisi dipetakan ke partisi RDD. Dengan memperluas partisi tabel, Anda dapat mencapai penskalaan throughput data secara linear.
Metode penggunaan
Anda dapat memilih antara metode SQL E-MapReduce dan pemrograman DataFrame untuk mengakses Tablestore dengan Spark, tergantung pada skenario penggunaan Anda.
-
Metode SQL E-MapReduce
Metode ini menggunakan pernyataan SQL standar untuk mengoperasikan dan mengakses data bisnis. Metode ini mudah digunakan dan memungkinkan migrasi logika bisnis yang sudah ada secara mulus.
-
Metode DataFrame
Metode ini memerlukan pengetahuan pemrograman tertentu, namun memungkinkan Anda menggabungkan komponen untuk mengimplementasikan logika bisnis yang kompleks. Metode ini cocok untuk skenario yang kompleks dan fleksibel.
Metode akses data
Tablestore menyediakan dua metode akses data untuk komputasi batch Spark: kueri KV pada tabel data atau global secondary indexes, dan kueri search index. Kedua metode ini mendukung pembacaan dan penulisan cepat data terstruktur dalam volume besar serta menyediakan kemampuan kueri dan analisis yang kaya.
Perbedaan antara kedua metode akses data tersebut adalah sebagai berikut:
-
Metode kueri KV efisien ketika kondisi filter berada pada kolom kunci primer. Namun, metode ini tidak cocok untuk skenario di mana kondisi filter sering berubah atau melibatkan banyak kolom non-kunci primer. Metode kueri KV tidak mendukung kueri geografis.
-
Metode kueri search index cocok untuk skenario akses data berikut:
CatatanSearch indexes didasarkan pada inverted indexes dan penyimpanan kolom. Fitur ini mampu menangani kueri kompleks untuk data besar serta menyediakan kemampuan kueri dan analisis yang mirip dengan Elasticsearch, seperti pencarian teks lengkap, pencarian fuzzy, kueri geografis, dan agregasi statistik.
-
Skenario analitik data real-time dengan volume data kecil dan persyaratan latensi tinggi.
-
Kondisi filter melibatkan banyak kolom non-kunci primer yang tidak termasuk dalam kunci primer global secondary index atau tabel data.
-
Kondisi filter sangat selektif, di mana kondisi pada satu kolom saja dapat memfilter sebagian besar data.
Sebagai contoh, dalam
select * from table where col = 1000;, `col` adalah kolom non-kunci primer, dan kondisi `col = 1000` dapat memfilter sebagian besar data. -
Kondisi kueri mencakup kueri geografis.
-
Gambar berikut menggunakan pernyataan SQL select * from table where col1 like 'A%' or col2 = 'a'; untuk menggambarkan dua metode kueri tersebut.
-
Saat mengakses data menggunakan search index, search index pada `col1` menemukan satu baris dengan nilai `'Ali%'`: `pk1 = 1`. Search index pada `col2` menemukan dua baris dengan nilai `'a'`: `pk1 = 1` dan `pk1 = 2`. Operasi union kemudian dilakukan pada hasil antara untuk memperoleh hasil akhir yang memenuhi kondisi:
pk1 = 1, col1 = 'Alibaba Cloud', col2 = 'a'. -
Saat mengakses data menggunakan metode kueri KV, kueri dilakukan pada tabel data Tablestore. Tabel data hanya dapat dikueri berdasarkan kunci primer. Jika kolom filter dalam pernyataan SQL bukan kunci primer tabel data, diperlukan pemindaian tabel penuh.
Karena `col1` bukan kunci primer tabel data, Tablestore melakukan pemindaian tabel penuh untuk menemukan baris dengan nilai `'Ali%'`. Demikian pula, karena `col2` bukan kunci primer, Tablestore melakukan pemindaian tabel penuh lainnya untuk menemukan dua baris dengan nilai `'a'`. Operasi union kemudian dilakukan pada hasil antara.
Dalam kasus ini, Anda juga dapat membuat tabel indeks dengan `col1` dan `col2` sebagai kunci primer untuk mendukung kueri tersebut. Namun, pendekatan ini kurang fleksibel.