All Products
Search
Document Center

Hologres:Praktik terbaik untuk penulisan batch

Last Updated:Mar 13, 2026

Hologres adalah mesin gudang data real-time terpadu yang kompatibel dengan protokol PostgreSQL. Layanan ini mendukung penulisan, pembaruan, dan kueri data dalam jumlah besar baik dalam skenario real-time maupun offline. Topik ini menjelaskan cara memilih mode penulisan optimal untuk penulisan batch ke Hologres berdasarkan pengujian kinerja dan hasil penulisan data dari Spark ke Hologres.

Untuk informasi mengenai rencana dan hasil pengujian kinerja penulisan dan pembaruan data real-time, lihat Praktik terbaik untuk uji stres dalam skenario penulisan data, pembaruan, dan kueri titik.

Perbandingan mode penulisan batch

Hologres mendukung berbagai mode penulisan data batch, termasuk mode COPY tradisional, mode impor stream FIXED COPY berbasis protokol COPY, serta mode INSERT INTO VALUES yang mengonversi impor batch menjadi penulisan stream.

Tabel berikut memberikan perbandingan mendetail ketiga mode penulisan tersebut.

Item perbandingan

COPY

FIXED COPY

INSERT INTO VALUES

Pengantar

Impor batch ke tabel tanpa primary key menggunakan COPY

Impor batch ke tabel dengan primary key menggunakan COPY

Mode impor stream yang dikembangkan berdasarkan protokol COPY

Mode impor stream dasar

Skenario khas

  • Impor batch Spark

  • Impor batch Flink open source

  • Impor Flink

  • Impor integrasi data DataWorks

  • Impor stream Spark

  • Impor Flink

  • Impor integrasi data DataWorks

  • Impor stream Spark

Granularitas kunci

Kunci baris

Kunci tabel

Kunci baris

Kunci baris

Visibilitas data

Tampak setelah operasi COPY selesai

Tampak setelah operasi COPY selesai

Visibilitas real-time

Visibilitas real-time

Kinerja

Tinggi

Tinggi

Bahasa Tiongkok

Sedang

Konsumsi resource Hologres

Rendah

Rendah

Tinggi

Tinggi

Konsumsi resource klien

Rendah

Tinggi

Rendah

Sedang

Kebijakan yang didukung untuk konflik primary key

Tidak berlaku

  • NONE

  • UPDATE: Pembaruan seluruh baris didukung mulai V3.0.4. Pembaruan parsial didukung mulai V3.1.1.

  • IGNORE: Didukung mulai V3.0.4.

  • NONE (Kesalahan dilaporkan jika terjadi konflik)

  • UPDATE

  • IGNORE

  • NONE (Kesalahan dilaporkan jika terjadi konflik)

  • UPDATE

  • IGNORE

Memilih mode penulisan batch

Daftar berikut menjelaskan fitur-fitur ketiga mode penulisan data batch:

  • Mode COPY: Mode COPY tradisional memberikan kinerja penulisan terbaik dan konsumsi resource Hologres terendah.

  • Mode FIXED COPY: Ini adalah mode impor stream berbasis protokol COPY. Mode ini hanya membuat kunci baris dan menyediakan visibilitas data real-time.

  • Mode INSERT INTO VALUES: Mode ini mengonversi impor batch menjadi penulisan stream tradisional dan tidak lagi memiliki keunggulan signifikan dalam skenario penulisan batch.

    Catatan

    Kurangnya keunggulan signifikan pada mode INSERT bersifat spesifik untuk skenario penulisan batch. Namun, karena hanya mode INSERT yang mendukung retraksi data (penghapusan), mode ini tetap diperlukan untuk skenario seperti penulisan data binary logging.

Jika Anda tidak memiliki persyaratan khusus terkait visibilitas data real-time, granularitas kunci (kunci tabel mencegah penulisan konkuren dari beberapa tugas), atau beban pada sumber data, prioritaskan mode COPY untuk penulisan batch.

  • Untuk penulisan batch Spark, upgrade instans Hologres Anda ke V2.2.25 atau versi yang lebih baru. Atur parameter write.mode penulisan konektor ke auto, yang merupakan nilai default. Sistem akan secara otomatis memilih mode penulisan optimal.

  • Untuk penulisan batch Flink, gunakan pohon keputusan di bawah ini untuk menentukan apakah akan menggunakan mode COPY atau mode FIXED COPY, lalu konfigurasikan parameter berikut.

    • jdbccopywritemode: Atur parameter ini ke TRUE untuk mencegah penggunaan mode INSERT.

    • bulkload: Atur parameter ini ke TRUE untuk mode COPY atau FALSE untuk mode FIXED COPY sesuai kebutuhan Anda.

Gunakan pohon keputusan berikut untuk memilih mode penulisan yang sesuai untuk skenario penulisan batch Anda.

image

Pengujian kinerja penulisan batch

Pengujian ini menggunakan konektor open source Hologres-Spark-Connector yang dikembangkan oleh Hologres.

Persiapan

Siapkan lingkungan dasar

Siapkan lingkungan berikut:

Penting

Instans Hologres dan kluster EMR-Spark harus berada di wilayah yang sama dan menggunakan VPC yang sama.

  • Aktifkan instans Hologres V2.2.25 atau versi yang lebih baru dan buat database.

  • Buat kluster EMR-Spark yang menjalankan Spark V3.3.0 atau versi yang lebih baru. Untuk informasi selengkapnya, lihat Buat kluster.

  • Unduh paket Spark-Connector.

    Anda dapat mengunduh paket JAR konektor hologres-connector-spark-3.x dari Maven Central Repository. Paket ini diperlukan agar Spark dapat membaca dan menulis data ke Hologres.

Konteks lingkungan untuk topik ini adalah sebagai berikut:

Layanan

Versi

Spesifikasi

Hologres

V3.0.30

64 Core, 256 GB (1 CU = 1 core dan 4 GB memori)

EMR-Spark

EMR-5.18.1, Spark-3.5.3

8 Core, 32 GB × 8 (1 Node master, 7 node core)

Penting

Anda harus mengaktifkan layanan OSS-HDFS.

Spark-Connector

1.5.2

Tidak berlaku

Siapkan data uji

  1. Siapkan data mentah.

    1. Login ke node master kluster EMR-Spark. Untuk informasi selengkapnya, lihat Metode untuk menghubungkan ke instans ECS.

    2. Klik TPC-H_Tools_v3.0.0.zip untuk mengunduh tool TPC-H. Salin paket tersebut ke instans ECS pada node master kluster, ekstrak paketnya, lalu navigasikan ke direktori TPC-H_Tools_v3.0.0/TPC-H_Tools_v3.0.0/dbgen.

    3. Jalankan kode berikut untuk menghasilkan file set data uji customer.tbl berukuran 1 TB di direktori dbgen. Ukuran file .tbl mentah adalah 23 GB.

      ./dbgen -s 1000 -T c

      Tabel berikut menjelaskan tabel customer dalam dataset uji TPC-H 1 TB.

      Informasi tabel

      Deskripsi

      Volume data suatu bidang

      8

      Tipe bidang

      INT, BIGINT, TEXT, DECIMAL

      Jumlah baris

      150.000.000

      Jumlah shard tabel

      40

  2. Impor data uji ke Spark.

    Jalankan perintah berikut untuk mengunggah file customer.tbl ke kluster Spark.

    hadoop fs -put customer.tbl <spark_resource>

    spark_resource adalah Root Path of Cluster Storage yang Anda tentukan saat membuat kluster EMR-Spark.

  3. Buat tabel dengan format penyimpanan berbeda di Hologres. Perintah SQL-nya adalah sebagai berikut:

    Columnar dan row-oriented

    CREATE TABLE test_table_mixed (
        C_CUSTKEY BIGINT PRIMARY KEY,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'column,row'
    );

    Columnar (dengan primary key)

    CREATE TABLE test_table_column (
        C_CUSTKEY BIGINT PRIMARY KEY,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'column'
    );

    Columnar (tanpa primary key)

    CREATE TABLE test_table_column_no_pk (
        C_CUSTKEY BIGINT,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'column'
    );

    Row-oriented (dengan primary key)

    CREATE TABLE test_table_row (
        C_CUSTKEY BIGINT PRIMARY KEY,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'row'
    );

    Row-oriented (tanpa primary key)

    CREATE TABLE test_table_row_no_pk (
        C_CUSTKEY BIGINT,
        C_NAME TEXT,
        C_ADDRESS TEXT,
        C_NATIONKEY INT,
        C_PHONE TEXT,
        C_ACCTBAL DECIMAL(15, 2),
        C_MKTSEGMENT TEXT,
        C_COMMENT TEXT
    )
    WITH (
        orientation = 'row'
    );

Pengujian kinerja

Konfigurasi pengujian

Pengujian ini terutama mengukur kinerja impor dalam mode berbeda.

  1. Login ke node master kluster EMR-Spark. Untuk informasi selengkapnya, lihat Metode untuk menghubungkan ke instans ECS. Kemudian, unggah paket Spark-Connector yang telah diunduh dan jalankan perintah berikut untuk masuk ke antarmuka interaktif spark-sql.

    Catatan

    Anda dapat menyesuaikan parameter spark.sql.files.maxPartitionBytes untuk mengontrol konkurensi Spark saat membaca file HDFS. Dalam pengujian ini, konkurensi diatur ke 40.

    # Masuk ke antarmuka interaktif spark-sql
    
    spark-sql --jars <path>/hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar \
    --conf spark.executor.instances=40 \
    --conf spark.executor.cores=1 \
    --conf spark.executor.memory=4g \
    --conf spark.sql.files.maxPartitionBytes=644245094

    path adalah path root tempat file hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar berada.

  2. Di antarmuka interaktif spark-sql, jalankan pernyataan SQL berikut untuk menulis data dengan membuat tabel sementara.

    Tabel sementara dibuat karena Anda perlu menyesuaikan parameter beberapa kali untuk menguji kinerja penulisan dalam mode berbeda.

    Catatan

    Dalam praktiknya, Anda dapat langsung menggunakan Catalog untuk memuat tabel Hologres, yang menyederhanakan proses.

    -- Buat tabel sementara dalam format CSV.
    CREATE TEMPORARY VIEW csvtable (
      c_custkey BIGINT,
      c_name STRING,
      c_address STRING,
      c_nationkey INT,
      c_phone STRING,
      c_acctbal DECIMAL(15, 2),
      c_mktsegment STRING,
      c_comment STRING)
    USING csv OPTIONS (
      path "<spark_resources>/customer.tbl", sep "|"
    );
    
    CREATE TEMPORARY VIEW hologresTable (
      c_custkey BIGINT,
      c_name STRING,
      c_address STRING,
      c_nationkey INT,
      c_phone STRING,
      c_acctbal DECIMAL(15, 2),
      c_mktsegment STRING,
      c_comment STRING)
    USING hologres OPTIONS (
      jdbcurl "jdbc:postgresql://<hologres_vpc_endpoint>/<database_name>",
      username "<accesskey_id>", 
      password "<accesskey_secret>", 
      table "<table_name>",
      direct_connect "false",
      write.mode "auto",
      write.insert.thread_size "3",
      write.insert.batch_size "2048"
    );
    
    INSERT INTO hologresTable SELECT * FROM csvTable;

    Tabel berikut menjelaskan parameter-parameter tersebut.

    Nama Parameter

    Deskripsi

    spark_resources

    Root Path of Cluster Storage yang Anda konfigurasi saat membuat kluster EMR-Spark.

    Anda dapat masuk ke Konsol EMR pada ECS, mengklik ID kluster tujuan, lalu memperoleh jalur akar penyimpanan kluster di bagian Cluster Information pada halaman Basic Information.

    hologres_vpc_endpoint

    Domain Name VPC instans Hologres.

    Anda dapat login ke Konsol Manajemen Hologres, klik ID instans tujuan, lalu dapatkan nama domain untuk VPC yang ditentukan di bagian informasi jaringan halaman produk. Misalnya, format VPC Endpoint di wilayah China (Hangzhou) adalah <ID Instans>-cn-hangzhou-vpc-st.hologres.aliyuncs.com:80.

    database_name

    Nama database di instans Hologres.

    accesskey_id

    ID AccessKey yang memiliki izin baca pada database Hologres yang sesuai.

    accesskey_secret

    Rahasia AccessKey yang memiliki izin baca pada database Hologres yang sesuai.

    table_name

    Nama tabel tujuan di Hologres tempat Anda ingin menulis data.

    write.mode

    Mode penulisan. Nilai yang valid:

    • auto: Nilai default. Konektor memilih mode optimal.

    • insert: Menulis data menggunakan metode INSERT INTO VALUES.

    • stream: Menulis data dalam mode stream menggunakan FIXED COPY.

    • bulk_load: Impor batch data ke tabel tanpa primary key menggunakan mode COPY.

    • bulk_load_on_conflict: Impor batch data ke tabel dengan primary key menggunakan mode COPY.

    write.insert.thread_size

    Konkurensi penulisan. Parameter ini hanya berlaku saat Anda menggunakan mode INSERT.

    write.insert.batch_size

    Ukuran batch penulisan. Parameter ini hanya berlaku saat Anda menggunakan mode INSERT.

    write.on_conflict_action

    INSERT_OR_REPLACE (default): Memperbarui data jika terjadi konflik primary key.

    INSERT_OR_IGNORE: Mengabaikan data jika terjadi konflik primary key.

    Untuk informasi selengkapnya, lihat Deskripsi parameter.

Skenario pengujian

Skenario pengujian

Skenario yang tersedia

Format penyimpanan tabel

  • Row-oriented

  • Columnar

  • Columnar dan row-oriented

Metode pembaruan data

  • Penulisan append-only ke tabel tanpa primary key

  • Penulisan awal ke tabel kosong dengan primary key

  • Pembaruan seluruh baris ke tabel dengan primary key

Metode penulisan

  • insert (INSERT INTO VALUES)

  • stream (FIXED COPY)

  • bulk_load (impor COPY ke tabel tanpa primary key)

  • bulk_load_on_conflict (impor COPY ke tabel dengan primary key)

Hasil pengujian

Hasil pengujian mencakup bidang-bidang berikut:

Bidang

Deskripsi

Total durasi pekerjaan

Waktu proses total pekerjaan Spark.

Ini adalah waktu yang diperlukan untuk mengeksekusi operasi penulisan data INSERT di antarmuka interaktif spark-sql pada node kluster EMR-Spark. Gambar berikut menunjukkan cara mendapatkan nilai ini:image

Durasi rata-rata penulisan data

Durasi rata-rata hanya untuk pekerjaan penulisan, tidak termasuk waktu penjadwalan kluster Spark, pembacaan data, atau redistribusi data.

Anda dapat menjalankan perintah SQL berikut di halaman HoloWeb pada Konsol Manajemen Hologres untuk mendapatkan konkurensi shard (jumlah) dan durasi rata-rata penulisan data (avg_duration_ms, dalam milidetik).

SELECT
    COUNT(*), AVG(duration) AS avg_duration_ms
FROM
    hologres.hg_query_log
WHERE
    query_start >= '<start_time>' AND query_start <= '<end_time>'
    AND query LIKE '%<test_table_column>%' AND command_tag = 'COPY';

Tabel berikut menjelaskan parameter-parameter tersebut.

  • start_time: Waktu mulai penulisan data. Contoh: 2025-04-11 15:00:00.

  • end_time: Waktu selesai penulisan data. Contoh: 2025-04-11 15:10:00.

  • hologres_table_name: Nama tabel tujuan di Hologres. Contoh: test_table_column.

Beban Hologres

Pemanfaatan CPU instans Hologres.

Anda dapat melihat pemanfaatan CPU di halaman Monitoring Information instans di Konsol Manajemen Hologres.

Beban Spark

Beban node EMR.

Anda dapat membuka Konsol EMR pada ECS, klik ID kluster tujuan, lalu buka tab Monitoring and Diagnostics > Metric Monitoring. Pilih parameter berikut:

  • Pada Dashboard, pilih HOST.

  • Atur nodeGroupId ke ID node core di kluster tujuan.

  • Atur hostname ke masing-masing node core.

  • Atur Select Time ke rentang waktu saat operasi penulisan data dilakukan di Spark.

Kemudian, kueri metrik CPU utilization. Inilah beban Spark.

Tabel berikut menunjukkan hasil pengujian secara detail.

Format penyimpanan

Primary key

Mode penulisan

Total durasi pekerjaan

Durasi rata-rata penulisan data

Hologres load

Spark load

Columnar

Tanpa primary key

insert

241,61 detik

232,70 detik

92%

15%

stream

228,11 detik

222,34 detik

100%

36%

bulk_load

88,72 detik

57,16 detik

97%

47%

Dengan primary key

ignore

insert

190,96 detik

172,60 detik

90%

14%

stream

149,60 detik

142,16 detik

100%

14%

bulk_load_on_conflict

115,96 detik

42,92 detik

60%

75%

Dengan primary key

replace

insert

600,40 detik

574,31 detik

91%

5%

stream

550,29 detik

540,32 detik

100%

5%

bulk_load_on_conflict

188,05 detik

109,77 detik

93%

78%

Row-oriented

Tanpa primary key

insert

132,38 detik

123,79 detik

94%

22%

stream

114,41 detik

103,81 detik

100%

17%

bulk_load

68,20 detik

41,22 detik

98%

32%

Dengan primary key

ignore

insert

190,48 detik

170,49 detik

89%

15%

stream

185,46 detik

172,48 detik

85%

14%

bulk_load_on_conflict

117,81 detik

47,69 detik

58%

75%

Dengan primary key

replace

insert

177,97 detik

170,78 detik

93%

15%

stream

142,44 detik

130,16 detik

100%

20%

bulk_load_on_conflict

137,69 detik

65,18 detik

92%

78%

Columnar dan row-oriented

Dengan primary key

ignore

insert

172,19 detik

158,74 detik

86%

16%

stream

150,63 detik

149,76 detik

100%

12%

bulk_load_on_conflict

128,83 detik

42,09 detik

59%

79%

Dengan primary key

replace

insert

690,37 detik

662,00 detik

92%

5%

stream

625,84 detik

623,08 detik

100%

4%

bulk_load_on_conflict

202,07 detik

121,58 detik

93%

80%

Catatan

Mode penulisan berkorespondensi dengan hal berikut:

  • insert: INSERT INTO VALUES

  • stream: FIXED COPY

  • bulk_load: Impor COPY ke tabel tanpa primary key

  • bulk_load_on_conflict: Impor COPY ke tabel dengan primary key