You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Java在GridDB中创建时序容器并完成数据增查

使用GridDB Java API处理时序数据的完整流程

以下是满足你需求的分步实现方案,包含容器定义、数据插入与检索的标准做法:

1. 引入依赖

首先确保项目中引入GridDB Java客户端依赖,以Maven为例:

<dependency>
    <groupId>com.toshiba.mwcloud.gs</groupId>
    <artifactId>gs-client</artifactId>
    <version>4.6.0</version> <!-- 使用对应版本 -->
</dependency>

2. 连接GridDB集群

通过GridStoreFactory创建集群连接,核心参数包括集群地址、认证信息与集群名称:

import com.toshiba.mwcloud.gs.*;
import java.sql.Timestamp;
import java.util.Properties;

public class GridDBTimeSeriesExample {
    public static void main(String[] args) throws GSException {
        // 配置连接参数
        Properties props = new Properties();
        props.setProperty("notificationAddress", "239.0.0.1");
        props.setProperty("notificationPort", "31999");
        props.setProperty("clusterName", "myCluster");
        props.setProperty("user", "admin");
        props.setProperty("password", "admin");

        // 获取GridStore实例
        GridStore store = GridStoreFactory.getInstance().getGridStore(props);
        store.getContainerFactory().setDefaultContainerType(ContainerType.TIME_SERIES);

3. 创建TimeSeries容器

时序容器必须以TIMESTAMP类型字段作为主键,定义Schema时需指定时间戳字段为rowkey:

// 定义容器Schema
        RowSchema schema = RowSchema.builder()
                .addColumn("timestamp", Type.TIMESTAMP, true) // true表示设为主键(时序主键)
                .addColumn("temperature", Type.DOUBLE)
                .build();

        // 创建或获取TimeSeries容器
        String containerName = "sensorData";
        TimeSeries<Row> ts = store.putTimeSeries(containerName, schema);

4. 插入带时间戳的记录

将示例数据转换为GridDB的Row对象,调用put方法插入(支持单条或批量插入):

// 插入单条记录
        Row row1 = ts.createRow();
        row1.setTimestamp("timestamp", Timestamp.valueOf("2026-05-17 10:00:00"));
        row1.setDouble("temperature", 32.5);
        ts.put(row1);

        Row row2 = ts.createRow();
        row2.setTimestamp("timestamp", Timestamp.valueOf("2026-05-17 11:00:00"));
        row2.setDouble("temperature", 33.1);
        ts.put(row2);

        // 批量插入示例(可选,大数据量场景推荐)
        // List<Row> rows = new ArrayList<>();
        // rows.add(row1);
        // rows.add(row2);
        // ts.putAll(rows);

5. 检索存储的时序数据

可通过时间范围查询、SQL查询等方式检索数据,以下是常用的时间范围查询示例:

// 方式1:按时间范围精准查询
        Timestamp startTime = Timestamp.valueOf("2026-05-17 09:00:00");
        Timestamp endTime = Timestamp.valueOf("2026-05-17 12:00:00");
        Query<Row> query = ts.query(startTime, endTime);

        // 遍历查询结果
        RowSet<Row> rs = query.fetch();
        while (rs.hasNext()) {
            Row row = rs.next();
            System.out.printf("Timestamp: %s, Temperature: %.1f%n",
                    row.getTimestamp("timestamp"),
                    row.getDouble("temperature"));
        }

        // 方式2:使用SQL查询(支持复杂条件)
        // RowSet<Row> sqlRs = store.query("SELECT * FROM sensorData WHERE timestamp >= TIMESTAMP('2026-05-17 10:00:00')");
        // 处理结果逻辑同上

        // 关闭资源
        rs.close();
        store.close();
    }
}

关键注意事项

  • 时序容器的主键必须是TIMESTAMP类型,且每条记录的时间戳唯一,重复插入会覆盖原有记录
  • 插入数据时优先使用批量插入(putAll)提升性能,尤其是大数据量场景
  • 检索时优先使用时间范围查询,GridDB针对时序数据做了专门的索引优化,性能远高于全表扫描

内容的提问来源于stack exchange,提问作者Tarpinder Singh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.02 02:17:28