Topik ini menjelaskan format ekspresi perutean dan cara mengonfigurasi algoritma perutean untuk tabel logis.
Informasi latar belakang
Anda dapat mengonfigurasi algoritma perutean untuk tabel logis guna menanyakan data dari tabel fisik tertentu yang sesuai dengan tabel logis berdasarkan bidang perutean. Dengan pendekatan ini, Anda tidak perlu melakukan perhitungan manual atau beralih di antara tabel fisik, sehingga mengurangi overhead perutean.
Untuk informasi lebih lanjut, lihat Algoritma Perutean.
Skenario
- Menanyakan data dari table shards.
- Mengubah data dari table shards.
- Mengekspor data dari table shards.
Format ekspresi
Data Management (DMS) memungkinkan Anda mendefinisikan algoritma perutean untuk menanyakan table shards menggunakan ekspresi Groovy. Format ekspresi perutean serupa dengan yang digunakan dalam kode aplikasi.
Anda dapat menentukan bidang perutean dalam format berikut: #Bidang Perutean#. Contoh: #shardKey#.
Prosedur
Contoh berikut menunjukkan cara mengonfigurasi algoritma perutean untuk operasi modulo sederhana.
Buat tabel logis dalam database logis. Untuk informasi lebih lanjut, lihat Tabel Logis.
Setelah tabel logis dikonfigurasi, temukan database logis pada halaman Pencarian Global. Kemudian, klik Query di kolom Tindakan untuk masuk ke halaman Konsol SQL.
CatatanAnda juga dapat memilih di bilah navigasi atas. Lalu, pilih database logis dari daftar drop-down untuk masuk ke halaman Konsol SQL.
Di pojok kanan atas halaman yang muncul, klik ikon
untuk masuk ke halaman daftar tabel.Temukan tabel logis yang telah dibuat. Lalu, klik Configure Algorithm di kolom Algoritma Perutean.
Di halaman yang muncul, klik Create. Di kotak dialog Buat Algoritma, konfigurasikan parameter Algorithm Type, Modulo Operation, Table Partitioning Field, dan Modulus.
Dalam contoh ini, Modulo Operation on One Column dipilih sebagai Tipe Algoritma, Simple Modulo Operation dipilih sebagai Operasi Modulo, id dipilih sebagai Bidang Partisi Tabel, dan parameter Modulus disetel ke 4. Ekspresi algoritma perutean adalah
#id#%4.CatatanOperasi modulo sederhana hanya dapat dilakukan pada bidang numerik.
Operasi hashing modular dapat dilakukan pada bidang numerik dan string.
Klik Save.
Setelah algoritma perutean dikonfigurasi, tanyakan data dalam tabel logis dan jalankan pernyataan INSERT. Sistem akan menyisipkan data ke dalam table shard yang sesuai berdasarkan hasil yang dihitung menggunakan algoritma perutean.
Sebagai contoh, jika Anda menyisipkan baris data dengan nilai kolom ID sebesar 9, hasil peruteannya adalah 1 dan baris data tersebut dimasukkan ke dalam table shard bernama logic_table_01.
Contoh ekspresi perutean
Berikut adalah contoh ekspresi perutean, dengan user_id sebagai bidang dalam tabel logis.
Perutean Berdasarkan Pembagian Tabel
Operasi Modulo Sederhana
Operasi modulo pada bidang numerik:
#user_id#%100Operasi modulo sekunder:
#user_id#%10000%100Operasi modulo pada kode hash Java dari bidang numerik:
Math.abs(#user_id#.hashCode())%100
Operasi Modulo pada Bidang String
Penghashan string numerik:
Math.abs(#user_id#.toString().hashCode())%100Penghashan string:
Math.abs(#user_id#.hashCode())%100CobarHash:
Math.abs(cobarHash(#column#,start, end)).intdiv(8)CobarOldHash:
Math.abs(cobarOldHash(#column#, len)).intdiv(8)
Perutean Berdasarkan Pembagian Database
Route data ke tabel dengan nama yang sama di database yang berbeda:
'schema_prefix_'+(#user_id#%10)+'.table_name'Route data ke database dan tabel yang ditentukan
'schema_prefix_'+(#user_id#%100)+'.table_name_prefix_'+(#user_id#%1000)Route data ke table shard yang sama di setiap database shard:
'schema_prefix_'+lastSwapZero(String.valueOf((#user_id#%1024).intdiv(128),4)+'.table_name_prefix_'+lastSwapZero(String.valueOf((#user_id#%128)),4)Route data ke database yang namanya ditentukan dengan membagi integer yang dibentuk oleh karakter keenam belas dan ketujuh dari bidang EXTEND_ID dengan 2 dan ke tabel yang namanya ditentukan oleh integer yang dibentuk oleh karakter keenam belas dan ketujuh dari bidang EXTEND_ID:
'schema_prefix_'+substring(#EXTEND_ID#,16,18).toLong().intdiv(2)+'.table_name_prefix_'+substring(#EXTEND_ID#,16,18)
Perutean Berdasarkan Tanggal
Route data ke tabel yang sama pada hari yang sama setiap bulan:
dayOfMonth(#time#)Perutean Berdasarkan Karakter Ketiga Terakhir dari Bidang String
Integer.valueOf(substring(#ip_id#,-3,-2))*10: Jika nilai indeks nama tabel bertambah sebesar 10, integer yang dikonversi dari karakter ketiga terakhir dari bidang ip_id dikalikan dengan 10. Jika nilai indeks nama tabel bertambah sebesar 1, integer yang dikonversi dari karakter ketiga terakhir dari bidang ip_id tidak dikalikan dengan 10.Metode Perutean Kompleks Lainnya
Route data menggunakan fungsi yang didefinisikan pengguna (UDF):
String func(String arg){ return arg.hashCode()%10;} 'table_name_'+func(#user_id#)+'_other_'func(#user_id#)CatatanGunakan jeda baris antara fungsi dan ekspresi.
DMS mendukung fungsi routing
CRC32(java.util.zip.CRC32).
Fungsi bawaan umum
cobarOldHash
cobarHash
weekOfYear
dayOfYear
dayOfMonth
dayOfWeek
substring
last4swap
lastSwapZero