| <!-- |
| |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| |
| --> |
| |
| ## Java 原生接口 |
| |
| ### 依赖 |
| |
| * JDK >= 1.8 |
| * Maven >= 3.6 |
| |
| ### 安装方法 |
| |
| 在根目录下运行: |
| |
| ``` |
| mvn clean install -pl session -am -Dmaven.test.skip=true |
| ``` |
| |
| ### 在MAVEN中使用原生接口 |
| |
| ``` |
| <dependencies> |
| <dependency> |
| <groupId>org.apache.iotdb</groupId> |
| <artifactId>iotdb-session</artifactId> |
| <version>0.12.0</version> |
| </dependency> |
| </dependencies> |
| ``` |
| |
| ### 原生接口说明 |
| |
| 下面将给出Session对应的接口的简要介绍和对应参数: |
| |
| * 初始化Session |
| |
| ``` |
| Session(String host, int rpcPort) |
| Session(String host, String rpcPort, String username, String password) |
| Session(String host, int rpcPort, String username, String password) |
| ``` |
| |
| * 开启Session |
| |
| ``` |
| Session.open() |
| ``` |
| |
| * 关闭Session |
| |
| ``` |
| Session.close() |
| ``` |
| |
| * 设置存储组 |
| |
| ``` |
| void setStorageGroup(String storageGroupId) |
| ``` |
| |
| * 删除单个或多个存储组 |
| |
| ``` |
| void deleteStorageGroup(String storageGroup) |
| void deleteStorageGroups(List<String> storageGroups) |
| ``` |
| |
| * 创建单个或多个时间序列 |
| |
| ``` |
| void createTimeseries(String path, TSDataType dataType, |
| TSEncoding encoding, CompressionType compressor, Map<String, String> props, |
| Map<String, String> tags, Map<String, String> attributes, String measurementAlias) |
| |
| void createMultiTimeseries(List<String> paths, List<TSDataType> dataTypes, |
| List<TSEncoding> encodings, List<CompressionType> compressors, |
| List<Map<String, String>> propsList, List<Map<String, String>> tagsList, |
| List<Map<String, String>> attributesList, List<String> measurementAliasList) |
| ``` |
| |
| * 删除一个或多个时间序列 |
| |
| ``` |
| void deleteTimeseries(String path) |
| void deleteTimeseries(List<String> paths) |
| ``` |
| |
| * 删除一个或多个时间序列在某个时间点前或这个时间点的数据 |
| |
| ``` |
| void deleteData(String path, long time) |
| void deleteData(List<String> paths, long time) |
| ``` |
| |
| * 插入一个 Record,一个 Record 是一个设备一个时间戳下多个测点的数据。服务器需要做类型推断,可能会有额外耗时 |
| |
| ``` |
| void insertRecord(String deviceId, long time, List<String> measurements, List<String> values) |
| ``` |
| |
| * 插入一个 Tablet,Tablet 是一个设备若干行非空数据块,每一行的列都相同 |
| |
| ``` |
| void insertTablet(Tablet tablet) |
| ``` |
| |
| * 插入多个 Tablet |
| |
| ``` |
| void insertTablets(Map<String, Tablet> tablet) |
| ``` |
| |
| * 插入多个 Record。服务器需要做类型推断,可能会有额外耗时 |
| |
| ``` |
| void insertRecords(List<String> deviceIds, List<Long> times, |
| List<List<String>> measurementsList, List<List<String>> valuesList) |
| ``` |
| |
| * 插入一个 Record,一个 Record 是一个设备一个时间戳下多个测点的数据。提供数据类型后,服务器不需要做类型推断,可以提高性能 |
| |
| ``` |
| void insertRecord(String deviceId, long time, List<String> measurements, |
| List<TSDataType> types, List<Object> values) |
| ``` |
| |
| * 插入多个 Record。提供数据类型后,服务器不需要做类型推断,可以提高性能 |
| |
| ``` |
| void insertRecords(List<String> deviceIds, List<Long> times, |
| List<List<String>> measurementsList, List<List<TSDataType>> typesList, |
| List<List<Object>> valuesList) |
| ``` |
| |
| * 插入同属于一个device的多个 Record。 |
| |
| ``` |
| void insertRecordsOfOneDevice(String deviceId, List<Long> times, |
| List<List<String>> measurementsList, List<List<TSDataType>> typesList, |
| List<List<Object>> valuesList) |
| ``` |
| |
| * 原始数据查询。时间间隔包含开始时间,不包含结束时间 |
| |
| ``` |
| SessionDataSet executeRawDataQuery(List<String> paths, long startTime, long endTime) |
| ``` |
| |
| * 执行查询语句 |
| |
| ``` |
| SessionDataSet executeQueryStatement(String sql) |
| ``` |
| |
| * 执行非查询语句 |
| |
| ``` |
| void executeNonQueryStatement(String sql) |
| ``` |
| |
| ### 测试接口说明 |
| |
| * 测试 testInsertRecords,不实际写入数据,只将数据传输到 server 即返回。 |
| |
| ``` |
| void testInsertRecords(List<String> deviceIds, List<Long> times, List<List<String>> measurementsList, List<List<String>> valuesList) |
| ``` |
| 或 |
| |
| ``` |
| void testInsertRecords(List<String> deviceIds, List<Long> times, |
| List<List<String>> measurementsList, List<List<TSDataType>> typesList, |
| List<List<Object>> valuesList) |
| ``` |
| |
| * 测试 insertRecord,不实际写入数据,只将数据传输到 server 即返回。 |
| |
| ``` |
| void testInsertRecord(String deviceId, long time, List<String> measurements, List<String> values) |
| ``` |
| 或 |
| |
| ``` |
| void testInsertRecord(String deviceId, long time, List<String> measurements, |
| List<TSDataType> types, List<Object> values) |
| ``` |
| |
| |
| * 测试 insertTablet,不实际写入数据,只将数据传输到 server 即返回。 |
| |
| ``` |
| void testInsertTablet(Tablet tablet) |
| ``` |
| |
| ### 针对原生接口的连接池 |
| |
| 我们提供了一个针对原生接口的连接池(`SessionPool`),使用该接口时,你只需要指定连接池的大小,就可以在使用时从池中获取连接。 |
| 如果超过60s都没得到一个连接的话,那么会打印一条警告日志,但是程序仍将继续等待。 |
| |
| 当一个连接被用完后,他会自动返回池中等待下次被使用; |
| 当一个连接损坏后,他会从池中被删除,并重建一个连接重新执行用户的操作。 |
| |
| 对于查询操作: |
| |
| 1. 使用SessionPool进行查询时,得到的结果集是`SessionDataSet`的封装类`SessionDataSetWrapper`; |
| 2. 若对于一个查询的结果集,用户并没有遍历完且不再想继续遍历时,需要手动调用释放连接的操作`closeResultSet`; |
| 3. 若对一个查询的结果集遍历时出现异常,也需要手动调用释放连接的操作`closeResultSet`. |
| 4. 可以调用 `SessionDataSetWrapper` 的 `getColumnNames()` 方法得到结果集列名 |
| |
| 使用示例可以参见 `session/src/test/java/org/apache/iotdb/session/pool/SessionPoolTest.java` |
| |
| 或 `example/session/src/main/java/org/apache/iotdb/SessionPoolExample.java` |
| |
| |
| ### 示例代码 |
| |
| 浏览上述接口的详细信息,请参阅代码 ```session/src/main/java/org/apache/iotdb/session/Session.java``` |
| |
| 使用上述接口的示例代码在 ```example/session/src/main/java/org/apache/iotdb/SessionExample.java``` |
| |