全部产品
Search
文档中心

Hologres:Praktik Terbaik untuk Penulisan Data Batch ke Hologres

更新时间:Jul 02, 2025

Hologres adalah mesin gudang data real-time satu atap yang kompatibel dengan protokol PostgreSQL. Mendukung penulisan, pembaruan, dan kueri data dalam jumlah besar secara real-time dan offline dalam skenario terintegrasi. Topik ini menjelaskan cara memilih mode penulisan yang sesuai untuk berbagai skenario penulisan batch berdasarkan hasil pengujian kinerja menggunakan Spark untuk menulis data batch ke Hologres.

Untuk penulisan data real-time dan pembaruan, lihat Praktik Terbaik untuk Pengujian Kinerja pada Penulisan Data, Pembaruan Data, dan Kueri Poin untuk rencana dan hasil pengujian kinerja.

Perbandingan mode penulisan batch

Untuk skenario penulisan data batch, Hologres mendukung mode penulisan yang berbeda, termasuk mode COPY tradisional, mode impor streaming FIXED COPY yang dikembangkan berdasarkan protokol COPY, dan mode INSERT INTO VALUES yang mengonversi impor batch menjadi impor streaming.

Tabel berikut memberikan perbandingan rinci dari tiga mode penulisan.

Item perbandingan

COPY

FIXED COPY

INSERT INTO VALUES

Pengenalan

Impor batch berbasis COPY ke tabel tanpa kunci utama

Impor batch berbasis COPY ke tabel dengan kunci utama

Mode impor streaming yang dikembangkan berdasarkan protokol COPY

Mode impor streaming dasar

Skema tipikal

  • Menggunakan Spark untuk impor batch

  • Menggunakan Apache Flink untuk impor batch

  • Menggunakan Flink untuk impor

  • Menggunakan DataWorks Data Integration untuk impor

  • Menggunakan Spark untuk impor streaming

  • Menggunakan Flink untuk impor

  • Menggunakan DataWorks Data Integration untuk impor

  • Menggunakan Spark untuk impor streaming

Granularitas kunci

Kunci baris

Kunci tabel

Kunci baris

Kunci baris

Visibilitas data

Terlihat setelah operasi COPY selesai

Terlihat setelah operasi COPY selesai

Terlihat secara real-time

Terlihat secara real-time

Kinerja

Tinggi

Tinggi

Sedang

Sedang

Konsumsi sumber daya Hologres

Rendah

Rendah

Tinggi

Tinggi

Konsumsi sumber daya klien

Rendah

Tinggi

Rendah

Sedang

Kebijakan konflik kunci utama

Tidak tersedia

  • NONE

  • UPDATE: Mendukung pembaruan seluruh baris di V3.0.4 dan versi lebih baru, serta pembaruan seluruh baris dan pembaruan parsial di V3.1.1 dan versi lebih baru.

  • IGNORE: Didukung di V3.0.4 dan versi lebih baru.

  • NONE (kesalahan dikembalikan jika terjadi konflik)

  • UPDATE

  • IGNORE

  • NONE (kesalahan dikembalikan jika terjadi konflik)

  • UPDATE

  • IGNORE

Pilih mode penulisan batch

Dalam skenario penulisan data batch, karakteristik dari ketiga mode tersebut adalah sebagai berikut:

  • COPY: Mode COPY tradisional COPY, dengan kinerja penulisan optimal dan konsumsi sumber daya Hologres terendah.

  • FIXED COPY: Mode impor streaming yang dikembangkan berdasarkan protokol COPY. Mode ini hanya menghasilkan kunci baris, dan data terlihat secara real-time.

  • INSERT INTO VALUES: Mengonversi impor batch menjadi penulisan streaming tradisional. Mode ini tidak memiliki keunggulan yang jelas dalam skenario penulisan batch.

    Catatan

    Mode INSERT INTO VALUES tidak memiliki keunggulan yang jelas hanya dalam skenario penulisan batch. Namun, hanya mode ini yang memiliki kemampuan retraksi data (penghapusan), yang masih diperlukan dalam skenario seperti penulisan data log biner.

Jika Anda tidak memiliki persyaratan khusus untuk visibilitas data real-time, granularitas kunci, atau beban sumber data, Anda dapat memprioritaskan mode COPY untuk penulisan batch. Perlu dicatat bahwa ketika kunci tabel dihasilkan, tabel tidak dapat mendukung beberapa tugas penulisan data secara bersamaan.

  • Menggunakan Spark untuk penulisan batch: Kami merekomendasikan agar Anda meningkatkan instance Hologres Anda ke V2.2.25 atau lebih baru, dan mengatur parameter penulisan write.mode dari konektor ke auto (nilai default). Sistem akan secara otomatis memilih mode penulisan yang optimal.

  • Menggunakan Flink untuk penulisan batch: Anda perlu terlebih dahulu menentukan apakah akan menggunakan mode COPY atau mode FIXED COPY sesuai dengan pohon keputusan di bawah ini, lalu mengonfigurasi parameter berikut:

    • jdbccopywritemode: Atur parameter ini ke TRUE, yang berarti mode INSERT INTO VALUES tidak digunakan.

    • bulkload: TRUE menunjukkan mode COPY, dan FALSE menunjukkan mode FIXED COPY. Konfigurasikan parameter ini berdasarkan kebutuhan bisnis Anda.

Anda dapat memilih mode penulisan yang sesuai sesuai dengan pohon keputusan berikut.

Pengujian kinerja penulisan batch

Komponen open-source Hologres-Spark-Connector yang dikembangkan oleh Hologres digunakan dalam proses pengujian.

Persiapan

Siapkan lingkungan dasar

Anda perlu menyiapkan lingkungan berikut:

Penting

Instance Hologres dan klaster EMR Spark harus berada di wilayah yang sama dan menggunakan VPC yang sama.

  • Beli instance Hologres versi V2.2.25 atau lebih baru, dan buat database.

  • Buat klaster EMR Spark. Versi Spark harus lebih besar dari atau sama dengan 3.3.0. Untuk informasi lebih lanjut, lihat Buat Klaster.

  • Unduh paket Spark-Connector.

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

Informasi lingkungan berikut digunakan dalam topik ini.

Layanan

Versi

Spesifikasi

Hologres

V3.0.30

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

EMR Spark

EMR V5.18.1, Spark 3.5.3

8 core, 32 GB × 8 (1 node master dan 7 node inti)

Penting

Anda perlu mengaktifkan layanan OSS-HDFS.

Spark-Connector

1.5.2

Tidak tersedia

Siapkan data uji

  1. Siapkan data mentah.

    1. Masuk ke node master klaster EMR Spark. Untuk informasi lebih lanjut, lihat Masuk ke Node Master Klaster dengan Menghubungkan ke Instance ECS Tertentu.

    2. Klik TPC-H_Tools_v3.0.0.zip untuk mengunduh alat TPC-H, salin ke instance ECS node master, ekstrak, lalu masuk ke direktori TPC-H_Tools_v3.0.0/TPC-H_Tools_v3.0.0/dbgen.

    3. Jalankan kode berikut untuk menghasilkan file dataset uji 1 TB customer.tbl di direktori dbgen. Ukuran file tbl asli adalah 23 GB.

      ./dbgen -s 1000 -T c

      Tabel berikut memberikan informasi rinci tentang tabel pelanggan dalam dataset TPC-H 1 TB.

      Informasi tabel

      Deskripsi

      Jumlah bidang

      8

      Tipe bidang

      INT, BIGINT, TEXT, DECIMAL

      Jumlah baris data

      150.000.000

      Jumlah shard tabel

      40

  2. Impor data uji ke Spark.

    Jalankan perintah berikut untuk mengunggah file customer.tbl ke klaster Spark:

    hadoop fs -put customer.tbl <spark_resource>

    spark_resource menunjukkan jalur yang dikonfigurasikan untuk parameter Root Storage Directory of Cluster saat Anda membuat klaster EMR Spark.

  3. Buat tabel dengan format penyimpanan yang berbeda di Hologres. Contoh pernyataan SQL:

    Penyimpanan hibrid baris-kolom

    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'
    );

    Penyimpanan berorientasi kolom (dengan kunci utama)

    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'
    );

    Penyimpanan berorientasi kolom (tanpa kunci utama)

    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'
    );

    Penyimpanan berorientasi baris (dengan kunci utama)

    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'
    );

    Penyimpanan berorientasi baris (tanpa kunci utama)

    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

Topik ini terutama menguji kinerja impor di bawah mode yang berbeda.

  1. Masuk ke node master klaster EMR Spark (untuk metode masuk, lihat Masuk ke Node Master Klaster dengan Menghubungkan ke Instance ECS Tertentu), unggah paket Spark-Connector yang diunduh, lalu jalankan perintah berikut untuk masuk ke antarmuka baris perintah (CLI) spark-sql.

    Catatan

    Dengan menyesuaikan nilai parameter spark.sql.files.maxPartitionBytes, Anda dapat mengontrol konkurensi Spark membaca file HDFS. Konkurensi dalam contoh ini adalah 40.

    # Masuk ke CLI 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 menunjukkan jalur root tempat paket hologres-connector-spark-3.x-1.5.2-jar-with-dependencies.jar berada.

  2. Jalankan pernyataan SQL berikut di CLI spark-sql untuk menulis data dengan membuat tabel sementara.

    Karena parameter perlu disesuaikan berkali-kali selama proses pengujian untuk menguji kinerja penulisan mode yang berbeda, tabel sementara digunakan dalam contoh ini.

    Catatan

    Dalam skenario bisnis nyata, Anda dapat langsung menggunakan katalog untuk memuat tabel Hologres, yang lebih nyaman.

    -- 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

    Deskripsi

    spark_resources

    Jalur yang dikonfigurasikan untuk parameter Root Storage Directory of Cluster saat Anda membuat klaster EMR Spark.

    Anda dapat masuk ke Konsol EMR on ECS, klik ID klaster target, dan dapatkan jalur penyimpanan root klaster di bagian Cluster Information tab Basic Information.

    hologres_vpc_endpoint

    Endpoint jenis jaringan VPC dari instance Hologres.

    Anda dapat masuk ke Konsol Hologres, klik ID instance target, dan dapatkan endpoint VPC di bagian Informasi Jaringan halaman Detail Instance. Sebagai contoh, endpoint VPC di wilayah China (Hangzhou) berformat <Instance ID>-cn-hangzhou-vpc-st.hologres.aliyuncs.com:80.

    database_name

    Nama database dalam instance Hologres.

    accesskey_id

    ID AccessKey dengan izin baca pada database Hologres yang sesuai.

    accesskey_secret

    Rahasia AccessKey dengan izin baca pada database Hologres yang sesuai.

    table_name

    Nama tabel tujuan Hologres.

    write.mode

    Mode penulisan. Nilai yang valid:

    • auto: Nilai default, menunjukkan bahwa konektor secara otomatis memilih mode optimal.

    • insert: Gunakan mode INSERT INTO VALUES.

    • stream: Gunakan mode FIXED COPY untuk penulisan streaming.

    • bulk_load: Gunakan mode COPY untuk impor batch ke tabel tanpa kunci utama.

    • bulk_load_on_conflict: Gunakan mode COPY untuk impor batch ke tabel dengan kunci utama.

    write.insert.thread_size

    Konkurensi penulisan, hanya efektif saat menggunakan mode INSERT INTO VALUES.

    write.insert.batch_size

    Ukuran penulisan batch, hanya efektif saat menggunakan mode INSERT INTO VALUES.

    write.on_conflict_action

    INSERT_OR_REPLACE (default): Perbarui pada konflik kunci utama.

    INSERT_OR_IGNORE: Abaikan pada konflik kunci utama.

    Untuk informasi parameter lebih lanjut, lihat Parameter.

Skenario pengujian

Skema pengujian

Opsi yang tersedia

Format penyimpanan tabel

  • Penyimpanan berorientasi baris

  • Penyimpanan berorientasi kolom

  • Penyimpanan hibrid baris-kolom

Metode pembaruan data

  • Tulis Append Only ke tabel tanpa kunci utama

  • Tulis pertama kali ke tabel kosong dengan kunci utama

  • Pembaruan seluruh baris ke tabel dengan kunci utama

Metode penulisan data

  • insert (INSERT INTO VALUES)

  • stream (FIXED COPY)

  • bulk_load (Impor berbasis COPY ke tabel tanpa kunci utama)

  • bulk_load_on_conflict (Impor berbasis COPY ke tabel dengan kunci utama)

Hasil pengujian

Hasil pengujian mencakup bidang berikut.

Bidang

Deskripsi

Durasi total eksekusi pekerjaan

Durasi eksekusi total pekerjaan Spark.

Bidang ini menunjukkan waktu yang diperlukan untuk menyelesaikan operasi INSERT di CLI spark-sql pada node master klaster EMR Spark. Gambar berikut menunjukkan cara mendapatkan waktu.image

Durasi rata-rata penulisan data

Rata-rata waktu yang dihabiskan hanya untuk penulisan data, tidak termasuk waktu untuk penjadwalan klaster Spark, pembacaan data, dan redistribusi data.

Anda dapat menjalankan pernyataan SQL berikut di HoloWeb Konsol Hologres untuk mendapatkan konkurensi Shard (count) 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';

Parameter:

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

  • end_time: Waktu akhir penulisan data, seperti 2025-04-11 15:10:00.

  • hologres_table_name: Nama tabel tujuan Hologres, seperti test_table_column.

Beban Hologres

Pemanfaatan CPU instance Hologres.

Anda dapat mendapatkan pemanfaatan CPU di halaman Monitoring Information instance di Konsol Hologres.

Spark Load

Beban Node EMR.

Anda dapat masuk ke Konsol EMR on ECS, klik ID klaster, lalu klik tab Monitoring and Diagnostics. Kemudian, klik tab Metric Monitoring, dan konfigurasikan parameter berikut:

  • Dashboard: Pilih HOST.

  • nodeGroupId: Pilih ID grup node inti klaster.

  • hostname: Pilih setiap node inti.

  • Select Time: Pilih periode waktu ketika penulisan data dilakukan di Spark.

Kemudian kueri metrik CPU utilization, yang merupakan beban Spark.

Tabel berikut memberikan hasil pengujian rinci.

Format penyimpanan

Kunci utama

Mode penulisan

Durasi total eksekusi pekerjaan

Durasi rata-rata penulisan data

Beban Hologres

Beban Spark

Penyimpanan berorientasi kolom

Tidak ada kunci utama

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 kunci utama

Abaikan

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 kunci utama

Ganti

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%

Penyimpanan berorientasi baris

Tidak ada kunci utama

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 kunci utama

Abaikan

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 kunci utama

Ganti

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%

Penyimpanan hibrid baris-kolom

Dengan kunci utama

Abaikan

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 kunci utama

Ganti

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

Pemetaan mode penulisan adalah sebagai berikut:

  • insert: INSERT INTO VALUES

  • stream: FIXED COPY

  • bulk_load: Impor berbasis COPY ke tabel tanpa kunci utama

  • bulk_load_on_conflict: Impor berbasis COPY ke tabel dengan kunci utama