全部产品
Search
文档中心

Hologres:Praktik terbaik untuk kueri pasangan kunci-nilai

更新时间:Jun 23, 2025

Hologres menyediakan layanan analisis interaktif dan gudang data waktu nyata. Hologres mendukung puluhan miliar dataset serta kompatibel dengan sintaks SQL, memberikan latensi rendah kurang dari 10 milidetik untuk kueri titik pasangan kunci-nilai dan dapat menangani jutaan permintaan per detik (QPS). Topik ini menjelaskan praktik terbaik Hologres dalam skenario kueri titik, seperti pembuatan tabel dan pengkuerian data.

Buat tabel

Saat membuat tabel Hologres yang mendukung kueri titik pasangan kunci-nilai, perhatikan hal-hal berikut:

  • Bidang kunci harus ditentukan sebagai kunci utama.

  • Kunci utama harus sama dengan kunci pengelompokan.

  • Kondisi kueri dari kueri titik harus mencakup kunci distribusi. Secara default, kunci utama ditentukan sebagai kunci distribusi.

  • Tabel harus berupa tabel berorientasi baris.

  • Disarankan untuk terhubung ke instance Hologres menggunakan titik akhir virtual private cloud (VPC).

  • Jika bidang tabel bertipe TEXT, VARCHAR, atau CHAR tersedia, disarankan untuk menggunakan tipe TEXT daripada VARCHAR atau CHAR.

Sebagai contoh, Anda dapat mengeksekusi pernyataan berikut untuk membuat tabel bernama test_kv_table:

-- Buat tabel berorientasi baris bernama test_kv_table dan tentukan bidang kunci sebagai kunci utama.
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 mengimpor data ke dalam tabel, Anda dapat melakukan kueri titik pada data tersebut. Berikut adalah beberapa contoh pernyataan sampel yang dapat dieksekusi dalam berbagai skenario:

  • Kueri satu pasangan kunci-nilai sekaligus.

    select * from test_kv_table where key  = '1';
  • Kueri beberapa pasangan kunci-nilai sekaligus.

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

    Di Java, Anda dapat menggunakan objek PreparedStatement untuk mengkueri pasangan kunci-nilai, seperti yang ditunjukkan dalam contoh berikut.

    null
    • Disarankan untuk terhubung ke instance Hologres menggunakan titik akhir VPC.

    • Objek PreparedStatement meningkatkan performa kueri pasangan kunci-nilai.

    • Objek PreparedStatement dapat digunakan kembali sehingga tidak perlu membuat objek baru untuk setiap kueri.

    // Kueri beberapa pasangan kunci-nilai di mana nilai bidang kunci adalah bilangan bulat 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 Holo Client.

    Holo Client menggabungkan beberapa kueri menjadi satu pernyataan SQL untuk menyederhanakan pengembangan. Contoh kode berikut menunjukkan cara mengkueri data menggunakan Holo Client. Disarankan untuk menggunakan versi terbaru Holo Client yang dirilis di Maven Central Repository.

    <dependency>
      <groupId>com.alibaba.hologres</groupId>
      <artifactId>holo-client</artifactId>
      <version>{1.2.16.5}</version>
    </dependency>
    
    
    // Konfigurasikan parameter. Tentukan URL Java Database Connectivity (JDBC) dalam format jdbc:postgresql://host:port/db.
    HoloConfig config = new HoloConfig();
    config.setJdbcUrl(url);
    config.setUsername(username);
    config.setPassword(password);
    config.setReadThreadCount(10);// Tentukan jumlah maksimum thread baca konkuren yang diizinkan. Dalam contoh ini, maksimal 10 koneksi JDBC dapat digunakan pada satu waktu.
    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 kode Java

Kode sampel berikut menunjukkan cara mengkueri pasangan kunci-nilai di Java. Dalam contoh ini, tabel berorientasi baris bernama test_kv_table dibuat dan bidang kunci ditentukan sebagai kunci utama. Beberapa pasangan kunci-nilai dikueri sekaligus dan hasil kueri dikembalikan.

package test;

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

// Buat tabel berorientasi baris bernama test_kv_table dan tentukan bidang kunci sebagai kunci utama.
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 pasangan kunci-nilai di mana nilai bidang kunci adalah bilangan bulat 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");
                    }
                }
            }
        }
    }
// Kembalikan 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: Titik akhir instance Hologres. Anda dapat melihat titik akhir instance Hologres di bagian Network Information halaman detail instance di Konsol Hologres.

  • db: Nama database di instance Hologres.

  • user: ID AccessKey akun Alibaba Cloud Anda yang digunakan untuk mengakses instance Hologres. Anda dapat memperoleh ID AccessKey di halaman Pasangan AccessKey.

  • password: Rahasia AccessKey akun Alibaba Cloud Anda yang digunakan untuk mengakses instance Hologres.