Jika Anda mengalami kueri lambat saat menggunakan database PolarDB for MySQL, Anda dapat menggunakan Data Transmission Service (DTS) untuk menyinkronkan data produksi dari database tersebut ke kluster Alibaba Cloud Elasticsearch secara real-time. Setelah itu, Anda dapat mencari dan menganalisis data yang telah disinkronkan di dalam kluster. Solusi ini cocok untuk skenario di mana Anda memerlukan performa tinggi sinkronisasi real-time dari database relasional.
Informasi latar belakang
Layanan cloud berikut digunakan:
DTS adalah layanan transmisi data yang mengintegrasikan migrasi data, langganan data, dan sinkronisasi data real-time. Anda dapat menggunakan DTS untuk menyinkronkan data yang dihasilkan oleh pernyataan SQL berikut: INSERT, DELETE, dan UPDATE. Untuk informasi lebih lanjut, lihat DTS dan Gambaran Umum Skenario Sinkronisasi Data.
PolarDB adalah layanan database relasional generasi berikutnya yang dikembangkan oleh Alibaba Cloud. Ini kompatibel dengan mesin database MySQL, PostgreSQL, dan Oracle. Kluster PolarDB dapat menyediakan ruang penyimpanan maksimum hingga 100 TB dan dapat diskalakan hingga maksimum 16 node. PolarDB memberikan performa unggul dalam penyimpanan dan komputasi untuk memenuhi berbagai kebutuhan perusahaan. Untuk informasi lebih lanjut, lihat Gambaran Umum PolarDB for MySQL.
Elasticsearch adalah mesin pencarian dan analitik real-time terdistribusi berbasis Lucene. Ini memungkinkan Anda menyimpan, menanyakan, dan menganalisis sejumlah besar dataset secara mendekati real-time. Dalam banyak kasus, ini digunakan sebagai mesin dasar atau teknologi untuk mengakomodasi kueri kompleks dan performa aplikasi tinggi. Untuk informasi lebih lanjut, lihat Apa itu Alibaba Cloud Elasticsearch?
Tindakan pencegahan
DTS tidak menyinkronkan perubahan data yang dihasilkan oleh operasi DDL. Jika operasi DDL dilakukan pada tabel di database sumber selama sinkronisasi data, Anda harus melakukan operasi berikut: Hapus tabel dari tugas sinkronisasi data, hapus indeks untuk tabel dari kluster Elasticsearch, dan tambahkan tabel ke tugas sinkronisasi data lagi. Untuk informasi lebih lanjut, lihat Hapus Objek dari Tugas Sinkronisasi Data dan Tambahkan Objek ke Tugas Sinkronisasi Data.
Jika Anda ingin menambahkan kolom ke tabel sumber, modifikasi pemetaan indeks yang sesuai dengan tabel tersebut. Kemudian, lakukan operasi DDL terkait pada tabel sumber, jeda tugas sinkronisasi data, dan mulai tugas tersebut lagi.
DTS menggunakan sumber daya baca dan tulis dari sumber dan tujuan selama sinkronisasi data penuh awal. Hal ini dapat meningkatkan beban pada sumber dan tujuan. Jika performa sumber atau tujuan tidak optimal, spesifikasi rendah, atau volume data besar, sumber atau tujuan mungkin menjadi tidak tersedia. Misalnya, DTS menggunakan sejumlah besar sumber daya baca dan tulis dalam kasus berikut: sejumlah besar kueri SQL lambat dilakukan pada sumber, satu atau lebih tabel tidak memiliki kunci utama, atau deadlock terjadi pada tujuan. Untuk mencegah masalah ini, evaluasi dampak sinkronisasi data pada performa sumber dan tujuan sebelum memulai sinkronisasi. Kami merekomendasikan agar Anda menyinkronkan data selama jam non-puncak. Sebagai contoh, Anda dapat menyinkronkan data ketika utilisasi CPU sumber dan tujuan kurang dari 30%.
Jika Anda menyinkronkan data penuh selama jam puncak, sinkronisasi mungkin gagal. Dalam hal ini, mulai ulang tugas sinkronisasi.
Jika Anda menyinkronkan data inkremental selama jam puncak, latensi sinkronisasi data mungkin terjadi.
Proses
Untuk menyinkronkan data, ikuti langkah-langkah berikut:
Buat Persiapan: Tambahkan data yang akan disinkronkan ke database PolarDB for MySQL sumber, buat kluster Alibaba Cloud Elasticsearch, dan aktifkan fitur Auto Indexing untuk kluster Elasticsearch.
Buat dan Jalankan Tugas Sinkronisasi Data: Buat dan jalankan tugas sinkronisasi data di konsol DTS. Kemudian, data penuh dan inkremental disinkronkan secara otomatis.
Langkah 1: Buat persiapan
Dalam contoh ini, kluster PolarDB for MySQL 8.0.1 Edisi Perusahaan dan kluster Alibaba Cloud Elasticsearch V7.10 telah disiapkan.
Siapkan database sumber dan data yang akan disinkronkan
Buat kluster PolarDB for MySQL 8.0.1 Edisi Perusahaan. Untuk informasi lebih lanjut, lihat Beli Kluster Edisi Perusahaan.
Aktifkan fitur binary logging untuk kluster PolarDB for MySQL. Untuk informasi lebih lanjut, lihat Aktifkan Binary Logging.

Buat akun dan database bernama
test_polardb. Untuk informasi lebih lanjut, lihat Buat dan Kelola Akun Database dan Operasi Manajemen Database.Di dalam database
test_polardb, buat tabel bernamaproductdan sisipkan data ke dalam tabel tersebut.Buat tabel
CREATE TABLE `product` ( `id` bigint(32) NOT NULL AUTO_INCREMENT, `name` varchar(32) NULL, `price` varchar(32) NULL, `code` varchar(32) NULL, `color` varchar(32) NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARACTER SET=utf8;Sisipkan data uji ke dalam tabel
INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (1,'mobile phone A','2000','amp','golden'); INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (2,'mobile phone B','2200','bmp','white'); INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (3,'mobile phone C','2600','cmp','black'); INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (4,'mobile phone D','2700','dmp','red'); INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (5,'mobile phone E','2800','emp','silvery');
Siapkan kluster Elasticsearch tujuan
Buat kluster Alibaba Cloud Elasticsearch V7.10. Untuk informasi lebih lanjut, lihat Buat Kluster Alibaba Cloud Elasticsearch.
Aktifkan fitur Auto Indexing untuk kluster Elasticsearch. Untuk informasi lebih lanjut, lihat Konfigurasikan File YML.

Langkah 2: Buat dan jalankan tugas sinkronisasi data
Klik Create Task.
Di halaman yang muncul, buat dan konfigurasikan tugas sinkronisasi data sesuai petunjuk.
Untuk informasi tentang parameter yang terlibat dalam langkah-langkah berikut, lihat Sinkronkan Data dari Kluster PolarDB for MySQL.
Konfigurasikan sumber dan tujuan. Di bagian bawah halaman, klik Test Connectivity and Proceed.

Konfigurasikan objek dari mana Anda ingin menyinkronkan data.

Konfigurasikan pengaturan lanjutan. Dalam contoh ini, pengaturan lanjutan default digunakan.
Di sublangkah Data Verification, pilih Apply _routing Policy to No Tables.
CatatanJika kluster Elasticsearch tujuan adalah versi 7.X, Anda harus memilih Terapkan Kebijakan _routing ke Tidak Ada Tabel.
Setelah konfigurasi selesai, simpan tugas sinkronisasi data, lakukan pra-pemeriksaan pada tugas, dan beli instance DTS untuk memulai tugas sinkronisasi data.
Setelah instance DTS dibeli, tugas sinkronisasi data mulai berjalan. Anda dapat melihat kemajuan sinkronisasi data tugas di halaman Sinkronisasi Data. Setelah data penuh disinkronkan, Anda dapat melihat data penuh di kluster Elasticsearch.

Langkah 3: (Opsional) Verifikasi hasil sinkronisasi data
Masuk ke konsol Kibana kluster Elasticsearch.
Untuk informasi lebih lanjut, lihat Masuk ke Konsol Kibana.
Di pojok kiri atas konsol Kibana, pilih . Di halaman yang muncul, klik tab Console.
Verifikasi hasil sinkronisasi data penuh.
Jalankan perintah berikut:
GET /product/_searchJika perintah berhasil dijalankan, hasil berikut dikembalikan:
{ "took" : 3, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 5, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "product", "_type" : "product", "_id" : "3", "_score" : 1.0, "_source" : { "id" : 3, "name" : "mobile phone C", "price" : "2600", "code" : "cmp", "color" : "black" } }, { "_index" : "product", "_type" : "product", "_id" : "5", "_score" : 1.0, "_source" : { "id" : 5, "name" : "mobile phone E", "price" : "2800", "code" : "emp", "color" : "silvery" } }, { "_index" : "product", "_type" : "product", "_id" : "4", "_score" : 1.0, "_source" : { "id" : 4, "name" : "mobile phone D", "price" : "2700", "code" : "dmp", "color" : "red" } }, { "_index" : "product", "_type" : "product", "_id" : "2", "_score" : 1.0, "_source" : { "id" : 2, "name" : "mobile phone B", "price" : "2200", "code" : "bmp", "color" : "white" } }, { "_index" : "product", "_type" : "product", "_id" : "1", "_score" : 1.0, "_source" : { "id" : 1, "name" : "mobile phone A", "price" : "2000", "code" : "amp", "color" : "golden" } } ] } }Verifikasi hasil sinkronisasi data inkremental.
Eksekusi pernyataan berikut untuk menyisipkan catatan data ke tabel sumber:
INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (6,'mobile phone F','2750','fmp','white');Setelah catatan data disinkronkan, jalankan perintah
GET /product/_search.Jika perintah berhasil dijalankan, hasil berikut dikembalikan:
{ "took" : 439, "timed_out" : false, "_shards" : { "total" : 5, "successful" : 5, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 6, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "product", "_type" : "product", "_id" : "3", "_score" : 1.0, "_source" : { "id" : 3, "name" : "mobile phone C", "price" : "2600", "code" : "cmp", "color" : "black" } }, { "_index" : "product", "_type" : "product", "_id" : "5", "_score" : 1.0, "_source" : { "id" : 5, "name" : "mobile phone E", "price" : "2800", "code" : "emp", "color" : "silvery" } }, { "_index" : "product", "_type" : "product", "_id" : "4", "_score" : 1.0, "_source" : { "id" : 4, "name" : "mobile phone D", "price" : "2700", "code" : "dmp", "color" : "red" } }, { "_index" : "product", "_type" : "product", "_id" : "2", "_score" : 1.0, "_source" : { "id" : 2, "name" : "mobile phone B", "price" : "2200", "code" : "bmp", "color" : "white" } }, { "_index" : "product", "_type" : "product", "_id" : "6", "_score" : 1.0, "_source" : { "code" : "fmp", "color" : "white", "price" : "2750", "name" : "mobile phone F", "id" : 6 } }, { "_index" : "product", "_type" : "product", "_id" : "1", "_score" : 1.0, "_source" : { "id" : 1, "name" : "mobile phone A", "price" : "2000", "code" : "amp", "color" : "golden" } } ] } }
> Management > Dev Tools