All Products
Search
Document Center

Elasticsearch:Gunakan DTS untuk menyinkronkan data dari PolarDB for MySQL ke Alibaba Cloud Elasticsearch

Last Updated:May 22, 2026

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 kluster tersebut. Solusi ini cocok untuk skenario yang memerlukan kinerja tinggi dalam sinkronisasi real time dari database relasional.

Informasi latar belakang

Layanan cloud berikut digunakan:

  • Data Transmission Service (DTS): Layanan aliran data yang mengintegrasikan migrasi data, langganan data, dan sinkronisasi data real time. DTS mendukung penyinkronan operasi INSERT, DELETE, dan UPDATE. Untuk informasi selengkapnya, lihat Data Transmission Service (DTS) dan Ikhtisar skenario sinkronisasi data.

  • PolarDB adalah layanan database relasional generasi berikutnya yang dikembangkan oleh Alibaba Cloud. Layanan ini kompatibel dengan mesin database MySQL, PostgreSQL, dan Oracle. Sebuah kluster PolarDB dapat menyediakan ruang penyimpanan hingga maksimum 100 TB dan dapat diskalakan hingga maksimum 16 node. PolarDB memberikan kinerja unggul dalam penyimpanan dan komputasi untuk memenuhi berbagai kebutuhan perusahaan. Untuk informasi selengkapnya, lihat Ikhtisar PolarDB for MySQL.

  • Elasticsearch adalah mesin pencarian dan analitik terdistribusi berbasis Lucene yang bersifat real time. Elasticsearch memungkinkan Anda menyimpan, mengkueri, dan menganalisis jumlah dataset besar dalam waktu nyaris real time. Dalam kebanyakan kasus, Elasticsearch digunakan sebagai mesin dasar atau teknologi untuk menangani kueri kompleks dan kinerja aplikasi tinggi. Untuk informasi selengkapnya, lihat Apa itu Alibaba Cloud Elasticsearch?

Peringatan

  • DTS tidak menyinkronkan perubahan data yang dihasilkan oleh operasi DDL. Jika operasi DDL dilakukan pada tabel di database sumber selama proses sinkronisasi data, Anda harus melakukan langkah-langkah berikut: hapus tabel tersebut dari tugas sinkronisasi data, hapus indeks untuk tabel tersebut dari kluster Elasticsearch, lalu tambahkan kembali tabel tersebut ke tugas sinkronisasi data. Untuk informasi selengkapnya, lihat Hapus objek dari tugas sinkronisasi data dan Tambahkan objek ke tugas sinkronisasi data.

  • Jika Anda ingin menambahkan kolom ke tabel sumber, ubah pemetaan indeks yang sesuai dengan tabel tersebut. Kemudian, lakukan operasi DDL terkait pada tabel sumber, jeda tugas sinkronisasi data, lalu mulai kembali tugas tersebut.

  • Saat DTS melakukan sinkronisasi data penuh, sumber daya baca dan tulis pada kedua database (sumber dan tujuan) akan dikonsumsi, sehingga beban database meningkat. Jika database Anda memiliki kinerja buruk, spesifikasi rendah, atau beban kerja berat—misalnya, database sumber memiliki banyak kueri SQL lambat atau tabel tanpa primary key, atau terjadi deadlock di database tujuan—beban database dapat meningkat hingga berpotensi menyebabkan ketidaktersediaan layanan. Sebelum menyinkronkan data, evaluasi kinerja database sumber dan tujuan Anda. Lakukan sinkronisasi data selama jam sepi ketika utilisasi CPU kedua database berada di bawah 30%.

    • Jika tugas sinkronisasi data penuh gagal selama jam sibuk, Anda dapat me-restart tugas tersebut.

    • Jika Anda melakukan sinkronisasi data inkremental selama jam sibuk, latensi sinkronisasi data dapat terjadi.

Proses

Untuk menyinkronkan data, lakukan langkah-langkah berikut:

  1. Lakukan 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 tersebut.

  2. Buat dan jalankan tugas sinkronisasi data: Buat dan jalankan tugas sinkronisasi data di Konsol DTS. Setelah itu, data penuh dan inkremental akan disinkronkan secara otomatis.

Langkah 1: Lakukan persiapan

Dalam contoh ini, disiapkan kluster PolarDB for MySQL 8.0.1 Edisi Perusahaan dan kluster Alibaba Cloud Elasticsearch V7.10.

Siapkan database sumber dan data yang akan disinkronkan

  1. Buat kluster PolarDB for MySQL 8.0.1 Edisi Perusahaan. Untuk informasi selengkapnya, lihat Beli kluster Edisi Perusahaan.

  2. Fitur binary logging telah diaktifkan untuk kluster PolarDB for MySQL. Untuk informasi selengkapnya, lihat Aktifkan binary logging.

    image

  3. Buat akun dan database bernama test_polardb. Untuk informasi selengkapnya, lihat Buat dan kelola akun database dan Kelola database.

  4. Di database test_polardb, buat tabel bernama product dan masukkan data.

    • 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;
    • Masukkan 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

  1. Buat kluster Alibaba Cloud Elasticsearch V7.10. Untuk informasi selengkapnya, lihat Buat kluster Alibaba Cloud Elasticsearch.

  2. Aktifkan fitur Auto Indexing untuk kluster Elasticsearch tersebut. Untuk informasi selengkapnya, lihat Konfigurasi file YML.

    image

Langkah 2: Buat dan jalankan tugas sinkronisasi data

  1. Login ke halaman daftar tugas sinkronisasi data DTS (versi baru).

  2. Klik Create Task.

  3. Pada halaman yang muncul, buat dan konfigurasikan tugas sinkronisasi data sesuai petunjuk.

    Untuk informasi mengenai parameter yang terlibat dalam langkah-langkah berikut, lihat Sinkronisasi data dari kluster PolarDB for MySQL.

    1. Konfigurasikan database sumber dan tujuan, lalu klik Test Connectivity and Proceed.

      image

    2. Konfigurasikan objek yang akan disinkronkan datanya.

      image

    3. Konfigurasikan pengaturan advanced. Dalam contoh ini, pengaturan advanced default digunakan.

    4. Pada halaman Database/Table/Column Settings, klik Set All to Non-_routing Policy.

      Jika kluster Elasticsearch tujuan menjalankan versi 7.x, Anda harus mengatur kebijakan perutean ke non-routing untuk semua tabel.

  4. Setelah konfigurasi selesai, simpan tugas sinkronisasi data, lakukan pre-check pada tugas tersebut, dan beli instans DTS untuk memulai tugas sinkronisasi data.

    Setelah instans DTS dibeli, tugas sinkronisasi data mulai berjalan. Anda dapat melihat progres sinkronisasi data tugas tersebut di halaman Data Synchronization. Setelah data penuh tersinkronisasi, Anda dapat melihat data penuh tersebut di kluster Elasticsearch.

    image

Langkah 3 (Opsional): Verifikasi hasil sinkronisasi data

  1. Login ke Konsol Kibana kluster Elasticsearch tersebut.

    Untuk informasi selengkapnya, lihat Login ke Konsol Kibana.

  2. Di halaman Kibana, buka 菜单.png > Management > Dev Tools. Di Console, jalankan perintah berikut.

  3. Verifikasi hasil sinkronisasi data penuh.

    Jalankan perintah berikut:

    GET /product/_search

    Jika perintah berhasil dijalankan, hasil berikut akan 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"
            }
          }
        ]
      }
    }
  4. Verifikasi hasil sinkronisasi data inkremental.

    1. Jalankan pernyataan berikut untuk memasukkan catatan data ke tabel sumber:

      INSERT INTO `test_polardb`.`product` (`id`,`name`,`price`,`code`,`color`) VALUES (6,'mobile phone F','2750','fmp','white');
    2. Setelah sinkronisasi data inkremental selesai, jalankan kembali perintah GET /product/_search untuk melihat hasilnya.

      Jika perintah berhasil dijalankan, hasil berikut akan 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"
              }
            }
          ]
        }
      }