全部产品
Search
文档中心

Hologres:Praktik terbaik untuk skenario kueri Key/Value

更新时间:Feb 05, 2026

Hologres adalah gudang data real-time yang mengintegrasikan serving dan analitik. Hologres mendukung dataset besar dengan lebih dari puluhan miliar catatan serta menyediakan layanan kueri titik Key/Value berlatensi rendah (di bawah 10 ms) dengan kapasitas lebih dari satu juta permintaan per detik (QPS) menggunakan SQL. Topik ini menjelaskan praktik terbaik untuk skenario kueri titik, mencakup pembuatan tabel dan metode kueri.

Buat tabel

Saat membuat tabel untuk skenario kueri titik, pertimbangkan poin-poin berikut:

  • Tetapkan bidang yang digunakan sebagai kunci dalam kueri titik Key/Value sebagai primary key.

  • Pastikan primary key sesuai dengan clustering key.

  • Tetapkan kolom yang digunakan dalam kondisi kueri sebagai distribution key. Secara default, primary key berfungsi sebagai distribution key.

  • Tetapkan storage class tabel ke row store.

  • Gunakan nama domain VPC saat menghubungkan ke instans Hologres Anda.

  • Untuk kolom bertipe TEXT, VARCHAR, atau CHAR, gunakan tipe TEXT alih-alih VARCHAR atau CHAR.

Contoh berikut menunjukkan cara membuat tabel tersebut:

-- Buat tabel berorientasi baris bernama test_kv_table dan tetapkan kolom key sebagai primary key
begin;
create table test_kv_table(
  key text primary key,
  value text
);
call set_table_property('test_kv_table', 'orientation', 'row');
call set_table_property('test_kv_table', 'clustering_key', 'key');
call set_table_property('test_kv_table', 'distribution_key', 'key');
commit;

Kueri data

Setelah Anda mengimpor data ke dalam tabel, Anda dapat melakukan kueri titik dengan salah satu metode berikut:

  • Kueri satu kunci:

    select * from test_kv_table where key = '1';
  • Kueri beberapa kunci sekaligus:

    select * from test_kv_table where key in ('1', '2', '3');
  • Kueri data menggunakan Java

    Contoh Java berikut menggunakan prepared statement untuk kueri Key/Value:

    Catatan
    • Gunakan nama domain VPC untuk menghubungkan ke Hologres.

    • Penggunaan prepared statement meningkatkan performa kueri.

    • Gunakan kembali prepared statement alih-alih membuat yang baru untuk setiap kueri.

    // Kueri beberapa kunci dengan nilai dari 1 hingga 100
    private static void testKV(Connection conn) throws Exception {
            String sql = "select * from test_kv_table where key = ?";
            try (PreparedStatement stmt = conn.prepareStatement(sql)) {
                for (int i = 0; i < 100; ++i) {
                    stmt.setString(1, Integer.toString(i));
                    long begin = System.currentTimeMillis();
                    try (ResultSet rs = stmt.executeQuery()) {
                    long cost = System.currentTimeMillis() - begin;
                        while(rs.next()) {
                            System.out.println("data => " + rs.getObject(1).toString() + " " + rs.getObject(2).toString() + " latency => [" + cost + "]ms");
                        }
                    }
                }
            }
        }
  • Kueri data menggunakan HoloClient

    HoloClient menyederhanakan pengembangan dengan menggabungkan beberapa kueri menjadi satu pernyataan SQL. Gunakan versi terbaru yang dipublikasikan di Maven, seperti pada contoh berikut:

    <dependency>
      <groupId>com.alibaba.hologres</groupId>
      <artifactId>holo-client</artifactId>
      <version>{1.2.16.5}</version>
    </dependency>
    
    
    // Konfigurasi parameter. Format URL adalah jdbc:postgresql://host:port/db
    HoloConfig config = new HoloConfig();
    config.setJdbcUrl(url);
    config.setUsername(username);
    config.setPassword(password);
    config.setReadThreadCount(10); // Konkurensi baca; menggunakan hingga 10 koneksi JDBC
    try (HoloClient client = new HoloClient(config)) {
        // create table t0(id int not null, name0 text, address text, primary key(id))
        TableSchema schema0 = client.getTableSchema("t0");
        
        Get get = Get.newBuilder(schema).setPrimaryKey("id", 0).build(); // where id=0;
        client.get(get).thenAcceptAsync((record)->{
            // lakukan sesuatu setelah mendapatkan hasil
        });
        Get get1 = Get.newBuilder(schema).setPrimaryKey("id", 1).build(); // where id=1;
        client.get(get1).thenAcceptAsync((record)->{
            // lakukan sesuatu setelah mendapatkan hasil
        });
    } catch(HoloClientException e){
    }

Contoh penggunaan Java

Contoh lengkap Java berikut menunjukkan cara membuat tabel berorientasi baris bernama test_kv_table yang menggunakan kolom key sebagai primary key, melakukan kueri beberapa kunci, dan mencetak hasilnya:

package test;

import org.postgresql.jdbc.PgConnection;
import java.sql.*;

// Buat tabel berorientasi baris bernama test_kv_table dan tetapkan kolom key sebagai primary key
public class TestPointQuery {

    private static void init(Connection conn) throws Exception {
        try (Statement stmt = conn.createStatement()) {
            stmt.execute("drop table if exists test_kv_table;");
            stmt.execute("begin;");
            stmt.execute("create table if not exists test_kv_table(key text primary key, value text);");
            stmt.execute("call set_table_property('test_kv_table', 'orientation', 'row');");
            stmt.execute("call set_table_property('test_kv_table', 'shard_count', '20');");
            stmt.execute("end;");
            stmt.execute("insert into test_kv_table select i, i from generate_series(1, 10000)i");
        }
    }
// Kueri beberapa kunci dengan nilai dari 1 hingga 100
    private static void testKV(Connection conn) throws Exception {
        String sql = "select * from test_kv_table where key = ?";
        try (PreparedStatement stmt = conn.prepareStatement(sql)) {
            for (int i = 0; i < 100; ++i) {
                stmt.setString(1, Integer.toString(i));
                long begin = System.currentTimeMillis();
                try (ResultSet rs = stmt.executeQuery()) {
                long cost = System.currentTimeMillis() - begin;
                    while(rs.next()) {
                        System.out.println("data => " + rs.getObject(1).toString() + " " + rs.getObject(2).toString() + " latency => [" + cost + "]ms");
                    }
                }
            }
        }
    }
// Cetak hasil kueri
    public static void main(String[] args) throws Exception {
        Class.forName("org.postgresql.Driver").newInstance();
        String host = "";
        String db = "";
        String user = "";
        String password = "";
        String url = "jdbc:postgresql://" + host + "/" + db;

        try (PgConnection conn = (PgConnection) DriverManager.getConnection(url, user, password)) {
            System.out.println("inisialisasi test_kv_table untuk pengujian");
            init(conn);
            System.out.println("jalankan pengujian pada test_kv_table");
            testKV(conn);
        }
    }
}

Deskripsi parameter:

  • host: Nama domain instans Hologres Anda. Anda dapat menemukan nama domain ini di bagian Network Information pada halaman detail instans di Konsol Hologres.

  • db: Nama database di instans Hologres Anda.

  • user: ID AccessKey Akun Alibaba Cloud Anda. Anda dapat memperoleh ID ini di halaman AccessKey Management.

  • password: Rahasia AccessKey Akun Alibaba Cloud Anda.