Conecte-se ao LindormTSDB a partir de uma aplicação Java com o driver JDBC do Lindorm. Este tutorial aborda a instalação do driver, o estabelecimento da conexão e a execução de operações básicas de criação, inserção e consulta.
Pré-requisitos
Antes de começar, verifique se você tem:
JDK V1.8 ou posterior instalado
Endereço IP do cliente adicionado à lista de permissões da instância Lindorm — consulte Configure whitelists
Endpoint do LindormTSDB disponível — consulte Visualize endpoints
Etapa 1: Instalar o driver
Escolha um dos métodos de instalação a seguir.
Baixar o JAR manualmente
Baixe o pacote JAR lindorm-all-client no Maven Central. Selecione a versão adequada às suas necessidades. Por exemplo, para instalar a versão 2.1.5, baixe lindorm-all-client-2.1.5.jar e adicione-o ao classpath do projeto.
Adicionar a dependência Maven (recomendado)
Adicione a seguinte dependência ao arquivo pom.xml:
<dependency>
<groupId>com.aliyun.lindorm</groupId>
<artifactId>lindorm-all-client</artifactId>
<version>2.2.1.3</version>
</dependency>
Especifique a versão conforme os requisitos do projeto.
Etapa 2: Conectar ao LindormTSDB
O formato da URL JDBC para o LindormTSDB é:
jdbc:lindorm:tsdb:url=http://<endpoint>:<port>
|
Parâmetro |
Descrição |
Exemplo |
|
|
Endpoint do LindormTSDB obtido no console do Lindorm |
|
|
|
Porta do LindormTSDB |
|
Para obter a lista completa de parâmetros de URL, consulte URL of the JDBC driver.
Etapa 3: Criar tabela, inserir dados e executar consulta
O exemplo a seguir conecta-se ao LindormTSDB, cria uma tabela de séries temporais no banco de dados padrão, insere linhas em lote e consulta dados por intervalo de tempo.
import java.sql.*;
class Test {
public static void main(String[] args) {
// Replace with your LindormTSDB endpoint and port.
String url = "jdbc:lindorm:tsdb:url=http://ld-bp12pt80qr38p****-proxy-tsdb-pub.lindorm.rds.aliyuncs.com:8242";
Connection conn = null;
try {
conn = DriverManager.getConnection(url);
try (Statement stmt = conn.createStatement()) {
// Create a time series table in the default database.
// device_id and region are TAG columns (dimensions for filtering).
stmt.execute("CREATE TABLE sensor1 (device_id VARCHAR TAG, region VARCHAR TAG, time TIMESTAMP, temperature DOUBLE, humidity DOUBLE, PRIMARY KEY(device_id))");
// Insert multiple rows in a single batch to reduce round trips.
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:00',12.1,45)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:10',13.2,47)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1260','north-cn','2021-04-22 15:33:20',10.6,46)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:00',18.1,44)");
stmt.addBatch("INSERT INTO sensor1(device_id, region, time, temperature, humidity) values('F07A1261','south-cn','2021-04-22 15:33:10',19.7,44)");
stmt.executeBatch();
stmt.clearBatch();
}
// Always specify a time range to limit the amount of data scanned.
try (PreparedStatement pstmt = conn.prepareStatement(
"SELECT device_id, region, time, temperature, humidity FROM sensor1 WHERE time >= ? AND time <= ?")) {
pstmt.setTimestamp(1, Timestamp.valueOf("2021-04-22 15:33:00"));
pstmt.setTimestamp(2, Timestamp.valueOf("2021-04-22 15:33:20"));
try (ResultSet rs = pstmt.executeQuery()) {
while (rs.next()) {
String device_id = rs.getString("device_id");
String region = rs.getString("region");
Timestamp time = rs.getTimestamp("time");
Double temperature = rs.getDouble("temperature");
Double humidity = rs.getDouble("humidity");
System.out.printf("%s %s %s %f %f\n", device_id, region, time, temperature, humidity);
}
}
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
Se a consulta for bem-sucedida, a saída será semelhante a:
F07A1261 south-cn 2021-04-22 15:33:00.0 18.100000 44.000000
F07A1261 south-cn 2021-04-22 15:33:10.0 19.700000 44.000000
F07A1260 north-cn 2021-04-22 15:33:00.0 12.100000 45.000000
F07A1260 north-cn 2021-04-22 15:33:10.0 13.200000 47.000000
F07A1260 north-cn 2021-04-22 15:33:20.0 10.600000 46.000000
Mapeamento de tipos de dados
Os tipos SQL do LindormTSDB correspondem aos tipos Java da seguinte forma:
|
Tipo LindormTSDB |
Tipo Java |
Getter JDBC |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Solução de problemas
Falha na conexão
Verifique se o IP do cliente está na lista de permissões da instância.
Confirme se o endpoint e a porta estão corretos na URL JDBC.
Certifique-se de que a instância Lindorm está em execução e o mecanismo de séries temporais está ativado.
Consulta sem retorno de dados
Confirme se o intervalo de tempo na cláusula
WHEREcorresponde aos timestamps dos dados inseridos.Verifique se o nome da tabela e os nomes das colunas estão corretos.
**Lentidão em executeBatch()**
Ajuste o tamanho do lote com base na carga de trabalho e no volume de dados.
Próximos passos
URL of the JDBC driver — lista completa de parâmetros da URL JDBC
Supported API operations and methods — cobertura da API JDBC para o LindormTSDB
SQL reference — sintaxe SQL completa do LindormTSDB