如何向Apache IoTDB批量插入时序数据并模拟大量数据?是否自带模拟工具?
Apache IoTDB批量插入与数据模拟指南
一、快速批量插入时序数据
1. Session API批量写入
IoTDB的Session API提供了高效的批量插入方法,其中insertTablets适合同设备同测点的批量数据(性能最优),insertRecords支持跨设备批量插入:
// 初始化Session连接 Session session = new Session("localhost", 6667, "root", "root"); session.open(); // 构造单设备批量数据(insertTablets示例) String deviceId = "root.sg.device001"; List<String> measurements = Arrays.asList("temperature", "humidity"); List<TSDataType> types = Arrays.asList(TSDataType.FLOAT, TSDataType.FLOAT); List<Long> timestamps = Arrays.asList(1690000000000L, 1690000001000L, 1690000002000L); List<List<Object>> values = Arrays.asList( Arrays.asList(25.3f, 62.1f), Arrays.asList(25.5f, 61.8f), Arrays.asList(25.7f, 61.5f) ); // 批量插入 session.insertTablet(deviceId, measurements, types, timestamps, values); session.close();
2. CSV离线导入
使用IoTDB自带的CSV导入工具,适合大文件离线批量导入:
# Linux/macOS ./import-csv.sh -c config/import_csv.properties # Windows import-csv.bat -c config/import_csv.properties
在配置文件中指定CSV路径、目标存储组、数据格式等参数,即可自动完成批量导入。
3. MQTT/HTTP批量推送
针对实时流式批量场景,可通过MQTT客户端批量发送消息,或调用HTTP批量接口提交数据,IoTDB会自动解析并批量写入。
二、模拟大量时序数据
1. 自定义脚本生成
用Python/Java编写脚本生成模拟数据,结合Session API插入,适合按需定制数据规则:
from iotdb.Session import Session import random import time session = Session("localhost", 6667, "root", "root") session.open() device_prefix = "root.sim.device" measurements = ["temperature", "humidity", "pressure"] start_ts = int(time.time() * 1000) # 生成1000个设备,每个设备1000条数据 for dev_idx in range(1000): device_id = f"{device_prefix}{dev_idx}" timestamps = [] values_list = [] for ts_offset in range(1000): ts = start_ts + ts_offset * 1000 temp = 20 + random.uniform(-5, 5) humi = 40 + random.uniform(-10, 10) press = 1013 + random.uniform(-20, 20) timestamps.append(ts) values_list.append([temp, humi, press]) session.insert_tablet(device_id, measurements, ["FLOAT", "FLOAT", "FLOAT"], timestamps, values_list) session.close()
2. 第三方工具生成
使用TSBS(Time Series Benchmark Suite)等专业时序数据生成工具,生成符合IoTDB格式的数据集后导入。
三、IoTDB自带的数据模拟方式
IoTDB内置了DataGenerator工具,无需额外软件即可生成并插入模拟数据:
1. 命令行启动
在IoTDB的bin目录下执行:
# Linux/macOS ./datagen.sh -c config/datagen.properties # Windows datagen.bat -c config/datagen.properties
通过配置文件datagen.properties自定义生成规则:
# IoTDB连接配置 iotdb.host=localhost iotdb.port=6667 iotdb.username=root iotdb.password=root # 数据生成规则 storage.group.count=10 device.per.storage.group=100 measurement.per.device=5 data.type=FLOAT start.timestamp=2024-01-01 00:00:00 end.timestamp=2024-01-02 00:00:00 interval=1000 # 采样间隔(毫秒)
2. Java API调用
在代码中直接调用内置生成器,灵活控制数据生成逻辑:
import org.apache.iotdb.db.tool.generator.DataGenerator; import org.apache.iotdb.db.tool.generator.GeneratorConfig; public class BuiltInSimulator { public static void main(String[] args) { GeneratorConfig config = new GeneratorConfig(); config.setStorageGroupCount(5); config.setDevicePerStorageGroup(50); config.setMeasurementPerDevice(3); config.setStartTimestamp("2024-01-01 00:00:00"); config.setEndTimestamp("2024-01-01 01:00:00"); config.setInterval(1000); DataGenerator generator = new DataGenerator(config); generator.generateAndInsert(); } }
内容的提问来源于stack exchange,提问作者NKZ
相关产品推荐
相关产品推荐

