All Products
Search
Document Center

Lindorm:Panduan Cepat

Last Updated:Jan 24, 2026

Topik ini menggunakan skenario kueri lintasan Internet of Vehicles (IoV) sebagai contoh untuk menunjukkan cara menggunakan SQL Lindorm GanosBase guna menulis titik lintasan yang dikumpulkan ke tabel lebar Lindorm dan melakukan kueri cepat terhadap data berdasarkan rentang spatio-temporal.

Prasyarat

  • LindormTable telah diaktifkan, dan versi mesin database adalah 2.6.5 atau yang lebih baru. Untuk informasi selengkapnya tentang cara melihat atau melakukan upgrade versi, lihat Panduan Versi LindormTable dan Pembaruan versi minor.

  • Lingkungan Java dengan JDK 1.8 atau versi yang lebih baru harus diinstal.

  • Alamat koneksi untuk SQL tabel lebar Lindorm telah diperoleh dan daftar putih telah dikonfigurasi. Untuk informasi selengkapnya, lihat Akses instans.

Prosedur

Untuk membuat tabel data spatio-temporal dan mengkueri lintasan berdasarkan rentang spatio-temporal, lakukan langkah-langkah berikut:

  1. Buat tabel data spatio-temporal dan tulis data

  2. Buat indeks spatio-temporal untuk meningkatkan efisiensi kueri

  3. Kueri data titik lintasan dalam rentang spatio-temporal tertentu

Buat tabel data spatio-temporal dan tulis data

Hubungkan ke LindormTable menggunakan Lindorm-cli dan tulis data

  1. Hubungkan ke LindormTable. Contoh ini menggunakan Lindorm-cli untuk menghubungkan dari client yang dideploy pada Linux.

    Untuk informasi selengkapnya tentang cara menggunakan koneksi JDBC, lihat Gunakan API Java SQL tabel lebar Lindorm untuk menghubungkan dan menggunakan LindormTable.

    1. Unduh Lindorm-cli.

    2. Ekstrak paket Lindorm-cli.

    3. Dapatkan alamat koneksi dan jalankan perintah berikut untuk menghubungkan ke tabel lebar Lindorm.

      ./lindorm-cli -url <jdbc url> -username <username> -password <password>

      Parameter

      Nilai contoh

      Cara memperoleh

      jdbc url

      jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060

      Alamat koneksi untuk SQL tabel lebar Lindorm. Untuk informasi selengkapnya tentang cara memperoleh alamat tersebut, lihat Akses instans.

      username

      root

      Anda dapat melihat username di sistem manajemen kluster Lindorm. Jika Anda lupa password, Anda dapat mengubahnya di sistem manajemen kluster. Untuk informasi selengkapnya, lihat Ubah password pengguna.

      password

      root

      Hasil berikut dikembalikan:

      Connected to jdbc:lindorm:table:url=http://ld-bp17j28j2y7pm****-proxy-lindorm-pub.lindorm.rds.aliyuncs.com:30060
      lindorm-cli version: 1.0.15
  2. Buat tabel data spatio-temporal dengan salah satu dari dua cara berikut.

    Tabel data spatio-temporal menyimpan titik lintasan. Titik lintasan mencakup informasi bujur (x), lintang (y), dan waktu (t). Di Lindorm GanosBase, Anda dapat menyimpan data x dan y dengan salah satu dari dua cara. Tabel berikut menjelaskan metode penyimpanan dan fiturnya:

    Metode penyimpanan

    Fitur

    Gunakan tipe data spasial Geometry(Point) untuk menyimpan data x dan y dalam satu kolom.

    Kinerja tinggi.

    Gunakan koordinat titik reguler untuk menyimpan data x dan y dalam kolom terpisah.

    Menyimpan data historis dalam dua kolom terpisah, x dan y, menyebabkan penurunan kinerja.

    • Gunakan tipe data spasial Geometry(Point) untuk menyimpan data x dan y dalam satu kolom. Pernyataan untuk membuat tabel data spatio-temporal adalah sebagai berikut:

      CREATE TABLE gps_data (id int, g geometry(point), t timestamp, ship_name varchar, PRIMARY KEY(id, t));

      Parameter

      Deskripsi

      g

      Kolom spasial. Tipe data spasialnya adalah Geometry(Point).

      t

      Kolom waktu. Tipe data yang didukung adalah Time, Timestamp, atau Long. Jika Anda menggunakan tipe Long, waktu direpresentasikan sebagai stempel waktu UNIX dalam milidetik.

      ship_name

      Kolom nama. Misalnya, nama kapal yang menghasilkan titik data spatio-temporal.

      PRIMARY KEY(id, t)

      Kunci primer, yang terdiri dari id dan t.

    • Gunakan koordinat titik reguler untuk menyimpan data x, y, dan t dalam tiga kolom terpisah. Pernyataan untuk membuat tabel data spatio-temporal adalah sebagai berikut:

      CREATE TABLE gps_data_point (id int, x double, y double, t timestamp, ship_name varchar, PRIMARY KEY(id, t));
  3. Tulis data titik lintasan satu per satu dengan salah satu dari dua cara berikut.

    • Gunakan fungsi spatio-temporal ST_MakePoint untuk membuat data titik lintasan. Misalnya, ST_MakePoint(119.073544,25.3244) merepresentasikan titik lintasan dengan bujur 119.073544 dan lintang 25.3244.

      INSERT INTO gps_data (id, g, t, ship_name) VALUES (1,ST_MakePoint(119.073544,25.3244), '2021-01-01 10:00:00', 'ship001');
      INSERT INTO gps_data (id, g, t, ship_name) VALUES (1,ST_MakePoint(119.073544,25.3244), '2021-01-01 10:05:03', 'ship001');
      INSERT INTO gps_data (id, g, t, ship_name) VALUES (1,ST_MakePoint(119.073544,25.324382), '2021-01-01 10:08:32', 'ship001');
      INSERT INTO gps_data (id, g, t, ship_name) VALUES (1,ST_MakePoint(119.073536,25.324418), '2021-01-01 10:10:22', 'ship001');
      INSERT INTO gps_data (id, g, t, ship_name) VALUES (2,ST_MakePoint(19.07352,25.34), '2021-01-01 08:20:21', 'ship002');
      INSERT INTO gps_data (id, g, t, ship_name) VALUES (2,ST_MakePoint(19.07352,25.33), '2021-01-01 08:22:20', 'ship002');
      Catatan
      • Untuk informasi selengkapnya tentang fungsi spatio-temporal ST_MakePoint, lihat ST_MakePoint.

      • Anda juga dapat menggunakan fungsi spatio-temporal ST_GeomFromText untuk membuat data titik lintasan. Format titik lintasan menggunakan standar Well-known Text (WKT). Namun, fungsi ST_GeomFromText memiliki kinerja penulisan yang lebih rendah dibandingkan fungsi ST_MakePoint. Untuk informasi selengkapnya tentang fungsi spatio-temporal ST_GeomFromText, lihat ST_GeomFromText.

    • Gunakan koordinat titik reguler.

      INSERT INTO gps_data_point (id, x, y, t, ship_name) VALUES (1, 119.073544, 25.3244, '2021-01-01 10:00:00', 'ship001');
      INSERT INTO gps_data_point (id, x, y, t, ship_name) VALUES (1, 119.073544, 25.3244, '2021-01-01 10:05:03', 'ship001');
      INSERT INTO gps_data_point (id, x, y, t, ship_name) VALUES (1, 119.073544, 25.324382, '2021-01-01 10:08:32', 'ship001');
      INSERT INTO gps_data_point (id, x, y, t, ship_name) VALUES (1, 119.073536, 25.324418, '2021-01-01 10:10:22', 'ship001');
      INSERT INTO gps_data_point (id, x, y, t, ship_name) VALUES (2, 19.07352, 25.34, '2021-01-01 08:20:21', 'ship002');
      INSERT INTO gps_data_point (id, x, y, t, ship_name) VALUES (2, 19.07352, 25.33, '2021-01-01 08:22:20', 'ship002');
  4. Opsi: Tulis data titik lintasan secara batch dengan salah satu dari dua cara berikut.

    • Gunakan fungsi spatio-temporal ST_MakePoint.

      UPSERT INTO gps_data (id, g, t, ship_name) VALUES(1,ST_MakePoint(119.073544,25.3244), '2021-01-01 10:00:00', 'ship001'),(1,ST_MakePoint(119.073544,25.3244), '2021-01-01 10:05:03', 'ship001'),(1,ST_MakePoint(119.073544,25.324382), '2021-01-01 10:08:32', 'ship001'),(1,ST_MakePoint(119.073536,25.324418), '2021-01-01 10:10:22', 'ship001'),(2,ST_MakePoint(19.07352,25.34), '2021-01-01 08:20:21', 'ship002'),(2,ST_MakePoint(19.07352,25.33), '2021-01-01 08:22:20', 'ship002');
    • Gunakan koordinat titik reguler.

      UPSERT INTO gps_data_point (id, x, y, t, ship_name) VALUES(1, 119.073544, 25.3244, '2021-01-01 10:00:00', 'ship001'),(1, 119.073544, 25.3244, '2021-01-01 10:05:03', 'ship001'),(1, 119.073544, 25.324382, '2021-01-01 10:08:32', 'ship001'),(1, 119.073536, 25.324418, '2021-01-01 10:10:22', 'ship001'),(2, 19.07352, 25.34, '2021-01-01 08:20:21', 'ship002'),(2, 19.07352, 25.33, '2021-01-01 08:22:20', 'ship002');
  5. Gunakan pernyataan SELECT untuk mengkueri data yang telah ditulis.

    • Gunakan fungsi spatio-temporal ST_AsText untuk mengonversi data spatio-temporal ke format teks yang mudah dibaca manusia.

      SELECT id, ST_AsText(g) AS position, ship_name FROM gps_data;

      Hasil berikut dikembalikan:

      +----+------------------------------+-----------+
      | id |           position           | ship_name |
      +----+------------------------------+-----------+
      | 1  | POINT (119.073544 25.3244)   | ship001   |
      | 1  | POINT (119.073544 25.3244)   | ship001   |
      | 1  | POINT (119.073544 25.324382) | ship001   |
      | 1  | POINT (119.073536 25.324418) | ship001   |
      | 2  | POINT (19.07352 25.34)       | ship002   |
      | 2  | POINT (19.07352 25.33)       | ship002   |
      +----+------------------------------+-----------+
    • Gunakan koordinat titik reguler.

      SELECT * FROM gps_data_point;

      Hasil berikut dikembalikan:

      +----+-------------------------------+------------+-----------+-----------+
      | id |               t               |     x      |     y     | ship_name |
      +----+-------------------------------+------------+-----------+-----------+
      | 1  | 2021-01-01 10:00:00 +0000 UTC | 119.073544 | 25.3244   | ship001   |
      | 1  | 2021-01-01 10:05:03 +0000 UTC | 119.073544 | 25.3244   | ship001   |
      | 1  | 2021-01-01 10:08:32 +0000 UTC | 119.073544 | 25.324382 | ship001   |
      | 1  | 2021-01-01 10:10:22 +0000 UTC | 119.073536 | 25.324418 | ship001   |
      | 2  | 2021-01-01 08:20:21 +0000 UTC | 19.07352   | 25.34     | ship002   |
      | 2  | 2021-01-01 08:22:20 +0000 UTC | 19.07352   | 25.33     | ship002   |
      +----+-------------------------------+------------+-----------+-----------+

Hubungkan ke LindormTable menggunakan Java JDBC dan tulis data

Seperti halnya tipe data lainnya di Lindorm SQL, Anda dapat menulis data spatio-temporal dengan mengikat parameter dalam kueri parameterisasi. Kode Java berikut menunjukkan contoh cara menulis data spatio-temporal menggunakan kueri parameterisasi dengan antarmuka PreparedStatement dalam Konektivitas Basis Data Java (JDBC).

// Buat koneksi.
Connection connection = DriverManager.getConnection(url, properties);
final String tableName = "testtbl"
// Buat tabel.
try (Statement stmt = conn.createStatement()) {
    stmt.execute("create table " + tableName +
        "(p1 int, c1 varchar, c2 geometry(point), constraint primary key (p1))");
}

// Pernyataan kueri parameterisasi untuk menulis data.
final String upsertSql = "upsert into " + tableName + "(p1,c1,c2) values (?,?,ST_MakePoint(?,?))";

// Siapkan pernyataan.
try (PreparedStatement preparedStatement = conn.prepareStatement(upsertSql)) {
  // Ikat parameter yang sesuai dengan placeholder.
  preparedStatement.setInt(1, 0);
  preparedStatement.setString(2, "name");
  preparedStatement.setDouble(3, 5.0);
  preparedStatement.setDouble(4, 5.0);
  // Jalankan operasi penulisan.
  preparedStatement.executeUpdate();
}

Buat indeks spatio-temporal untuk meningkatkan efisiensi query

Jika klausa WHERE dalam pernyataan kueri berisi rentang spatio-temporal, Anda dapat membuat indeks spatio-temporal untuk mempercepat kueri. Indeks spatio-temporal diklasifikasikan menjadi indeks kunci primer spatio-temporal dan indeks sekunder spatio-temporal. Ini sesuai dengan indeks kunci primer dan indeks sekunder di Lindorm. Untuk informasi selengkapnya, lihat Buat indeks spatio-temporal.

  1. Atur properti tabel data spatio-temporal.

    ALTER TABLE gps_data SET 'MUTABILITY'='MUTABLE_LATEST';
    ALTER TABLE gps_data SET 'CONSISTENCY'='strong';
    Catatan

    Jika Anda menggunakan indeks yang memungkinkan pembaruan data pada stempel waktu apa pun, Anda harus mengatur properti MUTABILITY ke MUTABLE_ALL. Jalankan ALTER TABLE gps_data SET 'MUTABILITY' = 'MUTABLE_ALL';. Untuk informasi selengkapnya tentang klasifikasi Mutability, lihat Konsep dasar.

  2. Buat indeks sekunder spatio-temporal. Dalam contoh ini, tabel data spatio-temporal sudah dibuat. Oleh karena itu, Anda hanya perlu membuat indeks sekunder spatio-temporal untuk mempercepat kueri data. Contoh berikut membuat indeks pada kolom spasial dan waktu.

    CREATE INDEX idt ON gps_data (Z-ORDER(g,t));

Kueri data titik lintasan dalam rentang spatio-temporal tertentu

Gunakan fungsi spatio-temporal ST_Contains untuk mengkueri data titik lintasan dengan rentang spasial POLYGON ((18 24, 20 24, 20 26, 18 26, 18 24)) dan rentang waktu dari pukul 08:21 hingga 08:23 pada 1 Januari 2021.

Catatan

Karena fungsi Z-ORDER dalam indeks sekunder spatio-temporal mencakup kolom g dan t, kondisi kueri harus mencakup rentang untuk kedua kolom g dan t. Untuk informasi tentang cara mengoptimalkan kueri spatio-temporal, lihat Penyetelan kinerja untuk kueri spatio-temporal.

SELECT id,t,ST_AsText(g),ship_name FROM gps_data WHERE ST_Contains(ST_GeomFromText('POLYGON ((18 24, 20 24, 20 26, 18 26, 18 24))'),g) AND t>'2021-01-01 08:21:00' AND t<'2021-01-01 08:23:00';

Hasil berikut dikembalikan:

+----+-------------------------------+------------------------+-----------+
| id |               t               |     "ST_AsText"(g)     | ship_name |
+----+-------------------------------+------------------------+-----------+
| 2  | 2021-01-01 08:22:20 +0000 UTC | POINT (19.07352 25.33) | ship002   |
+----+-------------------------------+------------------------+-----------+
Catatan

Untuk informasi selengkapnya tentang fungsi spatio-temporal, lihat Pengantar fungsi spatio-temporal.