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

在GridDB中选择时间序列还是集合容器实现高效互联网数据用量通知?

选型建议:GridDB时间序列容器vs集合容器(互联网用量通知项目)

核心选型结论

针对你的互联网数据用量通知项目,优先选择Time-Series Container(时间序列容器),完全匹配业务场景需求,性能表现远优于Collection Container。

适配核心需求的原因分析

1. 实时通知需求适配

  • 时间序列容器原生按timestamp做有序存储与索引,针对单设备或全设备的用量时序查询(比如近5分钟用量激增)、未发送通知的时序数据筛选,速度比集合容器快数倍。
  • 结合GridDB的CONTINUOUS QUERY特性,可实时监控用量阈值(比如单设备1分钟用量超过1GB),直接触发通知逻辑,完美契合实时推送需求。

2. 高吞吐量性能保障

  • 互联网用量数据属于高并发写入的时序数据,时间序列容器针对时序写入做了批量优化,支持高吞吐量的连续数据写入,不会像集合容器那样因为通用索引导致写入性能瓶颈。
  • 时序查询时,容器会按时间分片读取数据,避免全表扫描,在高数据量场景下(比如百万级设备的日用量数据),查询延迟能控制在毫秒级。

数据模型适配说明

你的InternetDataUsage模型完全符合时间序列容器的要求:

  • timestamp作为主键(TIMESTAMP类型),是时间序列容器的必填字段
  • 其他字段(usage、device_id、notification_sent)作为时序关联的度量或标签,可直接映射为容器的列

代码示例

创建时间序列容器

import com.toshiba.mwcloud.gs.Container;
import com.toshiba.mwcloud.gs.ContainerInfo;
import com.toshiba.mwcloud.gs.GridStore;
import com.toshiba.mwcloud.gs.GridStoreFactory;
import com.toshiba.mwcloud.gs.TimeSeries;

import java.util.Properties;

public class InternetDataUsageSetup {
    public static void main(String[] args) throws Exception {
        // 连接GridDB集群
        Properties props = new Properties();
        props.setProperty("notificationAddress", "239.0.0.1:31999");
        props.setProperty("clusterName", "myCluster");
        props.setProperty("user", "admin");
        props.setProperty("password", "admin");

        GridStore store = GridStoreFactory.getInstance().getGridStore(props);

        // 定义时间序列容器结构
        ContainerInfo info = new ContainerInfo();
        info.setName("InternetDataUsage");
        info.setType(Container.Type.TIME_SERIES);
        info.addColumn("timestamp", Long.class); // TIMESTAMP类型对应Long
        info.addColumn("usage", Long.class);
        info.addColumn("device_id", String.class);
        info.addColumn("notification_sent", Boolean.class);
        info.setTimeSeriesColumn("timestamp"); // 指定时间戳列

        // 创建容器(如果不存在)
        TimeSeries<InternetDataUsage> ts = store.putContainer(info, InternetDataUsage.class);

        store.close();
    }

    // 对应数据模型的POJO类
    public static class InternetDataUsage {
        private long timestamp;
        private long usage;
        private String device_id;
        private boolean notification_sent;

        // Getter和Setter方法
        public long getTimestamp() { return timestamp; }
        public void setTimestamp(long timestamp) { this.timestamp = timestamp; }
        public long getUsage() { return usage; }
        public void setUsage(long usage) { this.usage = usage; }
        public String getDevice_id() { return device_id; }
        public void setDevice_id(String device_id) { this.device_id = device_id; }
        public boolean isNotification_sent() { return notification_sent; }
        public void setNotification_sent(boolean notification_sent) { this.notification_sent = notification_sent; }
    }
}

实时监控用量的连续查询示例

// 在连接GridDB后,创建连续查询监控用量激增
String query = "SELECT device_id, usage, timestamp FROM InternetDataUsage WHERE usage > 1073741824 AND notification_sent = false";
// 每1分钟执行一次查询,触发回调
store.createContinuousQuery(query, 60, (q, rs) -> {
    while (rs.hasNext()) {
        InternetDataUsage data = rs.next(InternetDataUsage.class);
        // 这里执行通知推送逻辑,比如调用短信/API推送
        System.out.println("触发通知:设备" + data.getDevice_id() + "用量超过1GB,时间戳:" + data.getTimestamp());
        
        // 更新通知状态
        data.setNotification_sent(true);
        store.put(data);
    }
});

高吞吐量写入示例

// 批量写入1000条用量数据
TimeSeries<InternetDataUsage> ts = store.getTimeSeries("InternetDataUsage", InternetDataUsage.class);
List<InternetDataUsage> batchData = new ArrayList<>();
long currentTime = System.currentTimeMillis();

for (int i = 0; i < 1000; i++) {
    InternetDataUsage data = new InternetDataUsage();
    data.setTimestamp(currentTime + i * 1000); // 每秒一条数据
    data.setUsage((long) (Math.random() * 2000000000)); // 随机用量
    data.setDevice_id("device_" + (i % 100)); // 模拟100个设备
    data.setNotification_sent(false);
    batchData.add(data);
}

ts.putAll(batchData); // 批量写入,提升吞吐量

内容的提问来源于stack exchange,提问作者Waqar Kabir

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 12:45:13