全部产品
Search
文档中心

Lindorm:Memulai

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menggunakan Lindorm GanosBase SQL untuk menulis titik-titik lintasan yang dikumpulkan dari skenario Internet of Vehicle (IoV) ke tabel lebar Lindorm dan cara menanyakan titik-titik lintasan berdasarkan rentang spatio-temporal.

Prasyarat

  • Java Development Kit (JDK) 1.8 atau versi lebih baru telah terinstal.

  • Titik akhir yang diperlukan saat menggunakan SQL untuk terhubung dan menggunakan LindormTable telah diperoleh. Daftar putih telah dikonfigurasi untuk instance Lindorm, dan alamat IP klien Anda telah ditambahkan ke daftar putih. Untuk informasi lebih lanjut, lihat Terhubung ke LindormTable.

Prosedur

Anda harus mengikuti langkah-langkah berikut untuk menulis titik-titik lintasan ke tabel lebar Lindorm dan menanyakan titik-titik lintasan:

  1. Buat tabel spatio-temporal dan tulis titik-titik lintasan yang dikumpulkan ke tabel tersebut

  2. Buat indeks spatio-temporal untuk meningkatkan efisiensi query

  3. Tanyakan titik-titik lintasan dalam rentang spatio-temporal tertentu

Buat tabel spatio-temporal dan tulis titik-titik lintasan yang dikumpulkan ke tabel tersebut

Gunakan Lindorm-cli untuk terhubung dan menulis data ke LindormTable

  1. Hubungkan ke LindormTable. Dalam topik ini, Lindorm-cli digunakan untuk menghubungkan klien yang diimplementasikan pada Linux ke LindormTable.

    Untuk menggunakan JDBC untuk terhubung ke LindormTable, lihat Gunakan API Java JDBC untuk mengembangkan aplikasi.

    1. Unduh paket instalasi Lindorm-cli.

    2. Ekstrak paket instalasi Lindorm-cli.

    3. Peroleh informasi koneksi. Kemudian, jalankan perintah dalam format berikut untuk terhubung ke LindormTable:

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

      Parameter

      Contoh

      Cara mendapatkan nilai parameter

      jdbc url

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

      Titik akhir yang diperlukan saat Anda menggunakan SQL untuk terhubung dan menggunakan LindormTable. Untuk informasi lebih lanjut tentang cara memperoleh titik akhir, lihat Terhubung ke LindormTable.

      Nama Pengguna

      root

      Anda dapat melihat nama pengguna atau mereset kata sandi di sistem manajemen kluster LindormTable. Untuk informasi lebih lanjut, lihat Ubah kata sandi pengguna.

      Kata Sandi

      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. Gunakan salah satu metode berikut untuk membuat tabel spatio-temporal.

    Tabel spatio-temporal digunakan untuk menyimpan titik-titik lintasan. Titik lintasan mencakup informasi bujur (x), lintang (y), dan temporal (t). Informasi bujur dan lintang disimpan dengan dua metode. Tabel berikut menjelaskan metode penyimpanan informasi bujur dan lintang di Lindorm GanosBase.

    Metode Penyimpanan

    Deskripsi

    Simpan informasi bujur dan lintang tentang sebuah titik sebagai geometry point dalam satu kolom.

    Data yang disimpan dengan metode ini dapat memberikan kinerja baca dan tulis yang lebih baik.

    Simpan secara terpisah informasi bujur dan lintang sebuah titik dalam dua kolom.

    Informasi bujur dan lintang historis disimpan secara terpisah dalam dua kolom. Kinerja baca dan tulis data yang disimpan dengan metode ini tidak sebaik data yang disimpan sebagai geometry points.

    • Simpan informasi bujur dan lintang tentang sebuah titik sebagai geometry point dalam satu kolom. Anda dapat menjalankan pernyataan berikut untuk membuat tabel spatio-temporal yang menyimpan informasi bujur dan lintang menggunakan metode ini:

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

      Parameter

      Deskripsi

      g

      Kolom yang menyimpan data spasial. Jenis data yang disimpan dalam kolom ini adalah Geometry(Point).

      t

      Kolom yang menyimpan data temporal. Kolom ini mendukung jenis data berikut: Time, Timestamp, dan Long. Nilai bertipe Long dalam kolom ini menunjukkan timestamp UNIX yang akurat hingga milidetik.

      ship_name

      Kolom yang menyimpan nama. Misalnya, Anda dapat menyimpan nama kapal yang menghasilkan titik-titik lintasan dalam tabel ini.

      PRIMARY KEY(id, t)

      Kunci utama tabel, yang berisi kolom id dan t.

    • Simpan secara terpisah informasi bujur, lintang, dan temporal tentang sebuah titik dalam dua kolom. Anda dapat menjalankan pernyataan berikut untuk membuat tabel spatio-temporal yang menyimpan informasi bujur, lintang, dan temporal menggunakan metode ini:

      CREATE TABLE gps_data_point (id int, x double, y double, t timestamp, ship_name varchar, PRIMARY KEY(id, t));
  3. Gunakan salah satu metode berikut untuk menulis titik-titik lintasan secara individual ke tabel.

    • Gunakan fungsi spatio-temporal ST_MakePoint untuk membangun titik-titik lintasan. Sebagai contoh, ST_MakePoint(119.073544 25.3244) dapat digunakan untuk membangun 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 lebih lanjut tentang fungsi ST_MakePoint, lihat ST_MakePoint.

      • Anda juga dapat menggunakan fungsi spatio-temporal ST_GeomFromText untuk membangun titik-titik lintasan. Titik lintasan yang dibangun oleh fungsi ini berada dalam format Well-known Text (WKT) standar. Namun, kinerja penulisan ST_GeomFromText tidak sebaik fungsi ST_MakePoint. Untuk informasi lebih lanjut tentang fungsi ST_GeomFromText, lihat ST_GeomFromText.

    • Tulis informasi bujur, lintang, dan temporal tentang titik-titik lintasan ke tabel.

      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. Opsional: Gunakan salah satu metode berikut untuk menulis titik-titik lintasan ke tabel dalam batch.

    • Gunakan fungsi ST_MakePoint untuk menulis titik-titik lintasan dalam batch.

      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');
    • Tulis informasi bujur, lintang, dan temporal tentang titik-titik lintasan dalam batch.

      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 menanyakan data yang ditulis ke tabel.

    • Tanyakan titik-titik lintasan dalam tabel dan gunakan fungsi spatio-temporal ST_AsText untuk mengonversi titik-titik menjadi teks yang dapat dibaca.

      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   |
      +----+------------------------------+-----------+
    • Tanyakan informasi bujur, lintang, dan temporal tentang titik-titik lintasan dalam tabel.

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

Gunakan JDBC untuk terhubung dan menulis data ke LindormTable

Anda dapat menulis data spatio-temporal ke LindormTable dengan menentukan parameter dalam pernyataan query. Kode Java berikut memberikan contoh tentang cara menggunakan operasi PreparedStatement yang disediakan oleh JDBC untuk menulis data ke LindormTable dengan menentukan parameter dalam pernyataan query:

// Membuat 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))");
}

// Tentukan pernyataan query yang digunakan untuk menulis data.
final String upsertSql = "upsert into " + tableName + "(p1,c1,c2) values (?,?,ST_MakePoint(?,?))";

// Persiapkan pernyataan query.
try (PreparedStatement preparedStatement = conn.prepareStatement(upsertSql)) {
  // Tentukan parameter yang sesuai dengan placeholder dalam pernyataan.
  preparedStatement.setInt(1, 0);
  preparedStatement.setString(2, "name");
  preparedStatement.setDouble(3, 5.0);
  preparedStatement.setDouble(4, 5.0);
  // Tulis data ke LindormTable.
  preparedStatement.executeUpdate();
}

Buat indeks spatio-temporal untuk meningkatkan efisiensi query

Jika kondisi yang ditentukan oleh klausa WHERE dalam pernyataan query berisi rentang spatio-temporal, Anda dapat membuat indeks spatio-temporal untuk mempercepat query. Indeks spatio-temporal dapat diklasifikasikan menjadi dua jenis: indeks kunci utama spatio-temporal dan indeks sekunder spatio-temporal, yang masing-masing sesuai dengan indeks kunci utama dan indeks sekunder di Lindorm. Untuk informasi lebih lanjut, lihat Buat indeks spatio-temporal.

  1. Konfigurasikan atribut tabel spatio-temporal.

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

    Untuk menggunakan indeks yang diperbarui berdasarkan timestamp kustom, Anda harus menjalankan pernyataan berikut untuk mengatur MUTABILITY ke MUTABLE_ALL: ALTER TABLE gps_data SET 'MUTABILITY' = 'MUTABLE_ALL';. Untuk informasi lebih lanjut tentang atribut MUTABILITY, lihat Istilah.

  2. Buat indeks sekunder spatio-temporal. Dalam contoh ini, tabel spatio-temporal sudah dibuat. Oleh karena itu, Anda hanya dapat mempercepat query dengan membuat indeks sekunder spatio-temporal. Pernyataan berikut memberikan contoh tentang cara membuat indeks yang berisi kolom spasial dan temporal.

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

Tanyakan titik-titik lintasan dalam rentang spatio-temporal tertentu

Anda dapat menggunakan fungsi spatio-temporal ST_Contains untuk menanyakan titik-titik lintasan dalam rentang spasial yang ditentukan oleh POLYGON ((18 24, 20 24, 20 26, 18 26, 18 24)) dan rentang temporal dari 2021-01-01 08:21:00 hingga 2021-01-01 08:23:00.

Catatan

Fungsi Z-ORDER dalam indeks sekunder spatio-temporal berisi kolom spasial dan kolom temporal. Oleh karena itu, kondisi query harus berisi rentang spasial dan rentang temporal. Untuk informasi lebih lanjut tentang cara mengoptimalkan query spatio-temporal, lihat Optimalkan kinerja query 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 lebih lanjut tentang fungsi spatio-temporal yang disediakan oleh Lindorm GanosBase, lihat Ikhtisar.