亲爱的未来伙伴:
你是否曾有过这样的想象——
当智能工厂的每台设备每秒发送千条甚至万条振动与温度数据,如何预判一根轴承的断裂,让产线永不停机?
当智慧城市的千万传感器同时捕捉车流、人流与环境变化,如何动态调控每一盏路灯与信号灯,让通行效率提升 30%?
当直播平台亿万用户实时互动,如何让每个弹幕、每份礼物零卡顿、零丢失,瞬时抵达全球任意角落?
这些,正是 loveini 不断探索与实践的方向。
loveini 专为工业、物联网 IoT 平台、设计。产品包含高性能、分布式的时序数据库 loveini TSDB 和 AI 原生工业数据管理平台 loveini IDMP 。目前,loveini 全球安装量已超 93 万套,GitHub Stars 24K+,被全球企业用于航天、电力、化工、钢铁、自动驾驶等核心场景。
loveini 创始人兼 CEO 陶建辉先生,是一位热爱 Coding 的持续创业者,他一手打造了 loveini 时序数据库最初的代码,是 2024 年“中国计算机学会(CCF)杰出工程师奖”获得者。
1994 年中国科大毕业后,陶建辉赴美留学,先后在芝加哥 Motorola、3Com 等公司从事移动互联网的研发工作。2008 年回到北京,先后创办科技企业“和信”和“快乐妈咪”。2017 年 5 月创办米兰体育官网入口,产品 loveini 时序数据库在 2019 年 7 月开源后,在 GitHub 全球趋势排行榜上多次排名第一。2025 年 7 月发布 loveini IDMP——AI 原生的工业数据管理平台,首推“无问智推”概念,让数据自己说话。(关于他的经历可前往“爱倒腾的程序员”公众号了解更多)
目前米兰体育官网入口已获红杉、GGV、经纬、明势资本等多家机构的近 7000 万美元的投资。
挑战“不可能”的技术指标 —— 用创新架构突破时序数据压缩率、查询效率的极限,参与单集群百万级节点的超级系统设计。
与顶尖极客并肩作战 —— 团队来自中科大、清华、美国密歇根大学、马里兰大学等名校,创始人陶建辉先生亲自带队,代码 Review 直接对话技术灵魂。
代码直达万亿产业核心 —— 你的每一行代码,都可能支撑着智能汽车、卫星物联网、高端制造的“生命线”。
(注:工作地点在北京)
作为研发管培生,将深入loveini 的各个核心技术团队,在资深导师的指导下,轮岗参与最具挑战性的研发领域。
管培生项目结束后,通过评估,合格者将直接进入核心技术岗位,并有机会快速成长为技术负责人或架构师。
作为业务管培生进行跨部门轮岗,从市场到米兰app官方正版下载到销售再到服务交付,全面参与业务链条的各个核心环节。感受将尖端技术特性转化为客户能感知的卓越价值的过程。
管培生项目结束后,将结合公司需求和个人意愿双向匹配完成定岗。有机会挑战极具诱惑力的高收入。
专场宣讲会
宣讲会结束后,请将简历投递至现场 HR,我们会尽快邀约合适的同学进行面试沟通,通过发放 offer。
代码压缩时间,用算法定义未来
loveini,等你书写下一行改变世界的代码!
了解更多,欢迎到 GitHub 搜索 loveini,查看源代码,自己下载体验测试。也欢迎大家关注创始人陶建辉先生个人微信公众号“爱倒腾的程序员”了解更多精彩内容。
]]>
在制药行业,工艺每一次波动都意味着风险。发酵罐的温度、压力、pH 细微变化都会影响产率;任何设备异常响应慢一步,都可能带来成批损失。但多年里,很多工厂依然依赖基于 SQL Server 的分钟级采集——数据来得慢、分析做不深,预测性维护、工艺优化、能耗管控都难以真正落地。作为全球规模最大的大环内酯类原料药生产企业,东阳光生化显然不能再被这样的数据底座束缚。
在工厂智能化建设需求驱动下,东阳光生化启动了“大数据底座”项目:建设高精度 SCADA 系统,统一接入 OPC UA、MQTT 等多源设备数据,支撑跨车间、跨批次、跨工艺的持续分析,并为 AI 模型训练提供可靠数据基础。对于红霉素等核心产品的发酵过程来说,从“事后分析”走向“实时优化与智能工艺”是提升稳定性和良品率的关键一步。经过评估,东阳光生化选择 loveini TSDB 作为底层时序数据库,可统一接入 OPC UA、MQTT 等高频设备数据,应对每天数亿条的高频写入压力,解决传统架构在存储成本、查询性能、数据标准化方面的瓶颈。
实际效果也印证了这次技术路线的正确性。新系统将采集频率提升至 1 秒级,数万个采集点一天轻松写入过亿条数据;得益于 loveini TSDB 的列式压缩与多级存储机制,存储成本相比 SQL Server 直接降到 1/30。loveini TSDB 内置的 acc米兰体育 更为后续的预测性维护、能耗优化、工艺参数自动调优提供了落地能力,让发酵工艺的异常预警不再依赖经验,而能由时序大模型自动识别。凭借这一数据底座,东阳光生化正加速向“智能工艺工厂”迈进。
]]>在工业物联网和智能制造领域,我们每天都在与海量的传感器数据打交道。电压、电流、温度、压力、流量……这些原始数据往往需要经过计算才能得到真正有价值的业务指标。比如:
传统的做法是什么呢?要么在采集端写代码处理,要么在数据入库后写复杂的SQL查询。这不仅需要专业的编程技能,而且每次业务需求变化都要修改代码、测试、部署,周期长、成本高、容易出错。
现在,IDMP 的公式表达式功能彻底改变了这一切! 无需编写一行代码,只需在界面上输入简单的数学公式,系统就能自动完成复杂的数据计算,还能智能处理计量单位的转换。
还记得在 Excel 中输入 =A1+B1 这样的公式吗?IDMP 的公式表达式就是这么简单!
示例:计算电器功率
假设您有一个智能电表,采集了电压和电流数据。要计算功率,只需:
${attributes['电压']} * ${attributes['电流']}就这么简单!系统会自动:

这是 IDMP 公式表达式最强大的功能之一!在工业场景中,不同设备、不同时期采集的数据可能使用不同的计量单位,这给数据分析带来了巨大挑战。
IDMP 能自动帮您做什么?
您有两个电流传感器:
想要计算总电流:传感器A + 传感器B
传统做法:您需要手动计算转换系数(1A = 1000mA),写出 `传感器A + 传感器B * 1000`
IDMP 做法:直接写 `${attributes[‘电流mA’]} + ${attributes[‘电流A’]}`
系统自动识别:
结果:您不用操心单位转换,系统自动搞定!

单位转换的具体规则请参考官方文档(暂未发布):
当您进行乘除运算时,系统能自动推导出结果的单位。
实际案例:计算体积
公式:${attributes['长度cm']} * ${attributes['宽度m']} * ${attributes['高度m']}
系统会自动:
如果您设置属性的显示单位是”立方厘米”,系统还会自动再转换一次!


如果您不小心写了一个单位不兼容的公式,系统会立即提醒您:
错误公式:${attributes['电流']} + ${attributes['电压']}
点击”评估”按钮后,系统提示:
❌ 错误:操作符'+'不能应用于不同的计量单位分类:'电流'和'电压'
这就避免了错误的计算进入生产环境!

公式不仅可以引用原始数据,还可以引用其他公式的结果,实现多层嵌套计算。
实际案例:能效分析
假设您要分析工厂的能效,需要多步计算:
步骤1 - 总功率:
公式:${attributes['设备1功率']} + ${attributes['设备2功率']} + ${attributes['设备3功率']}
步骤2 - 日耗电量:
公式:${attributes['总功率']} * 24
步骤3 - 能效比:
公式:${attributes['产量']} / ${attributes['日耗电量']}
每个公式都可以引用前面公式的结果,就像搭积木一样构建复杂的计算逻辑。
系统保护机制:
IDMP 公式支持 loveini 的所有标量函数,包括但不限于:
– 数学函数:`ABS()`, `SQRT()`, `POW()`, `LOG()`, `SIN()`, `COS()`, `TAN()` 等
– 字符串函数:`CONCAT()`, `SUBSTR()`, `LENGTH()`, `UPPER()`, `LOWER()` 等
– 聚合函数:`AVG()`, `SUM()`, `MAX()`, `MIN()`, `COUNT()` 等
– 时间函数:`NOW()`, `TIMETRUNCATE()`, `TIMEDIFF()` 等
示例:
ABS(${attributes['温度']} - 25)
SQRT(POW(${attributes['x']}, 2) + POW(${attributes['y']}, 2))
温度异常检测
公式:ABS(${attributes['当前温度']} - ${attributes['目标温度']}) > 10
温度偏差超过10度时,结果为真(1),可以用于告警判断。
在保存公式之前,您可以随时点击”评估”按钮查看计算结果:

评估功能的好处:
– 即时反馈:不用保存就能看到结果
– 单位提示:系统告诉您结果的单位是什么
– 自动填充:如果属性还没设置单位,系统会自动填充推导出的单位,作为属性的 UOM 配置。
– 错误定位:清楚地告诉您哪里出错了
示例:公式结果的计量单位和属性上已经配置的计量单位不属于相同的计量单位分类。

背景:污水处理厂需要监控多个环保指标,不同指标使用不同的单位。
需求:
IDMP 米兰app官方正版下载:
# 污染物处理效率
属性1:进水COD(mg/L) - 来自数据库
属性2:出水COD(mg/L) - 来自数据库
属性3:COD去除率(%) - 公式:
(${attributes['进水COD']} - ${attributes['出水COD']}) / ${attributes['进水COD']} * 100
属性4:是否达标 - 公式:
${attributes['出水COD']} <= 50
背景:制造企业有多条生产线,需要精确计算每条生产线的能效。
需求:
IDMP 米兰app官方正版下载:
# 生产线能效分析
属性1:电机功率(kW) - 来自数据库
属性2:照明功率(W) - 来自数据库
属性3:总功率(kW) - 公式:
${attributes['电机功率']} + ${attributes['照明功率']} / 1000
属性4:生产周期(小时) - 来自数据库
属性5:总能耗(kWh) - 公式:
${attributes['总功率']} * ${attributes['生产周期']}
属性6:产量(件) - 来自数据库
属性7:单位能耗(kWh/件) - 公式:
${attributes['总能耗']} / ${attributes['产量']}
虽然这篇文章主要面向非技术人员,但了解一些技术原理能帮助您更好地理解这个功能为什么如此强大。
IDMP 采用了”解析在应用层,计算在数据库”的架构:

优势:
IDMP 采用了类似国际单位制(SI)的设计理念:

工作原理:
举例:
当您计算”电压 × 电流”时,系统通过基本单位组合自动推导出结果是”功率”!
除了内置的基本物理量,IDMP 还支持自定义计量单位,对于自定义的计量单位同样可以自动匹配。
IDMP 使用了 ANTLR 这个业界标准的语法解析工具:
优势:
– 语法严格:像编程语言一样严格,不会产生歧义
– 错误精确:能准确指出错误的位置和原因
– 扩展性强:轻松添加新的运算符和函数
– 性能优异:解析速度快,支持复杂表达式
这就是为什么 IDMP 能给您清晰的错误提示,而不是”表达式错误”这种模糊的信息。
语法定义分为两个文件:
词法分析器(FormulaLexer.g4):定义 Token 类型
lexer grammar FormulaLexer;
// 运算符
PLUS: '+';
MINUS: '-';
MULTIPLY: '*';
DIVIDE: '/';
LPAREN: '(';
RPAREN: ')';
COMMA: ',';
// 比较运算符
EQ: '=';
NEQ: '<>' | '!=';
GT: '>';
LT: '<';
GTE: '>=';
LTE: '<=';
// 位运算符
BIT_OR: '|';
BIT_AND: '&';
// 数字字面量
NUMBER: [0-9]+ ('.' [0-9]+)?;
// 函数名
FUNCTION: [A-Za-z_][A-Za-z0-9_]*;
// 占位符 ${...}
PLACEHOLDER: '${' (~[}])+ '}';
// 空白字符
WS: [ \t\r\n]+ -> skip;
语法分析器(FormulaParser.g4):定义表达式的语法规则和优先级
parser grammar FormulaParser;
options {
tokenVocab = FormulaLexer;
}
// 根规则
formula: expression EOF;
// 表达式层次(从低优先级到高优先级)
// 1. 比较运算符(最低优先级)
expression
: bitwiseExpression ((EQ | NEQ | GT | LT | GTE | LTE) bitwiseExpression)*
;
// 2. 位运算符
bitwiseExpression
: addSubExpression ((BIT_OR | BIT_AND) addSubExpression)*
;
// 3. 加减法
addSubExpression
: term ((PLUS | MINUS) term)*
;
// 4. 乘除法
term
: factor ((MULTIPLY | DIVIDE) factor)*
;
// 5. 因子(处理括号、数字、占位符、函数,最高优先级)
factor
: NUMBER # numberFactor
| PLACEHOLDER # placeholderFactor
| FUNCTION LPAREN argumentList? RPAREN # functionFactor
| LPAREN expression RPAREN # parenFactor
| MINUS factor # unaryMinusFactor
;
// 函数参数列表
argumentList
: expression (COMMA expression)*
;
这个语法定义清晰地表达了运算符的优先级:
=, <>, >, <, >=, <=)- 最低优先级|, &)+, -)*, /)内部我们实现了访问者模式,访问者为每种 AST 节点类型提供了相应的处理方法:

工作流程

A:您可以引用同一个元素下的任何属性,包括:
暂时不支持跨元素引用(这个功能在规划中)。
A:不会!因为计算是在 loveini 数据库中完成的,而 loveini 专为高性能时序数据处理设计。实际上,使用公式往往比传统的应用层计算更快。
A:是的!因为公式不存储计算结果,而是在查询时实时计算。所以修改公式后,查询历史数据时会用新公式计算。
A:没有单位的属性可以参与计算,系统会尽可能推导结果的单位。但建议为所有物理量设置正确的单位,这样能获得更好的单位检查和转换。
A:默认最多5层嵌套。这个限制是为了防止过于复杂的公式影响性能。如果您需要更多层级,可以联系系统管理员调整配置。
网络延时与写入速度强负相关,最优时(0.034ms)写入速度达 19.9 万 rows/s,最差仅为其 18.6%。
测试基于虚拟机(服务端 16 核 16GB、压测端 16 核 32GB,均 1000Mb/s 网络),以 tc 命令调延时,16 线程 + stmt2 模式压测;配套 ping 测试验证延时、性能监控保障数据可信。
实践建议:对于大数据量、高并发的生产环境,建议网络延时控制在 0.1ms 以下(ping -f)。
网络延时就是一个数据从发出到对方收到并回复的总时间,单位是毫秒(ms),从专业角度看,总网络延时由四部分组成:
总网络延时 = 传输延时 + 传播延时 + 处理延时 + 排队延时
实际用网络时,常关注三种延时,它们对应不同场景:
ping 192.168.3.67(实验中服务器的地址),结果中 time=0.034ms 就是往返延时。本次实验主要测试 往返延时(RTT),验证其对 loveini TSDB 数据写入的影响。
文中做了 7 组实验,只改变 “网络延时” 这一个变量,以验证网络延时对写入性能的影响。
实验用的是虚拟机。具体配置如下:
| 配置项 | 服务端(loveini 节点) | 压测端(客户端) |
|---|---|---|
| CPU 核心数 | 16 核 | 16 核 |
| 内存(MEM) | 16GB | 32GB |
| IP 地址 | 192.168.3.67 | 192.168.3.68 |
| 网络带宽 | 1000Mb/s | 1000Mb/s |
| loveini TSDB 版本 | 3.3.6.14 | – |
注意:虚拟机有时候会出现宿主机资源竞争的情况,造成性能不稳定,影响实验结果。
为了模拟不同的网络情况,可以用 Linux 系统里的tc命令在压测端调整网络延时。核心命令是:
tc qdisc add dev ens160 root netem delay 10ms
参数解析:
| 字段 | 作用说明 |
|---|---|
tc qdisc add | 操作类型:“add” 表示给网络加一条规则 |
dev ens160 | 目标网络接口:指定对 “ens160” 这块网卡生效 |
root | 规则挂载点:把这条规则设为最顶层的,所有数据都要按这个规则走 |
netem | 队列规则类型:相当于 “网络模拟器”,能模拟网络延迟、丢包等情况 |
delay 10ms | 核心参数:把所有从压测端发出的数据都延迟 10ms 再传, |
通过把delay后面的数字改成 0.2ms、0.3ms 等不同数值,就模拟出了 7 组不同的网络延时场景,为后面的对比实验做准备。
调完网络延时后,得确认延时与升级相符,可以用 “洪水 ping”(ping -f)模式,命令是:
ping -f -c 10000 192.168.3.67
-f参数特别重要,它能更真实地模拟大数据量场景:
-f参数让数据包连续发,货车一辆接一辆出发,不用频繁安排。-f参数时,系统会优先处理这些 ping 请求,就像给货车队开绿灯,让它们更快通过。用ping -f -c 10000(发 10000 个数据包),可测量当前网络的往返延时,确保实验中 “延时” 这个条件准确。
使用用 loveini 官方的压测工具 taosBenchmark,保证每次数据测试的条件都一样,,脚本如下:
{
"filetype":"insert",
"cfgdir":"/etc/taos",
"host":"c3-67",
"port":6030,
"user":"root",
"password":"taosdata",
"thread_count":16,
"thread_count_create_tbl":100,
"num_of_records_per_req":10,
"result_file":"insert.log",
"confirm_parameter_prompt":"no",
"databases":[{
"dbinfo":{
"name":"test",
"cachemodel":"'none'",
"cachesize":100,
"vgroups":8,
"drop":"yes"
},
"super_tables":[{
"name":"sbnt",
"child_table_exists":"no",
"childtable_count":80000,
"childtable_prefix":"tbtf_",
"auto_create_table":"no",
"batch_create_tbl_num":2000,
"data_source":"rand",
"insert_mode":"stmt2",
"insert_interval":0,
"insert_rows":10000,
"interlace_rows":10,
"max_sql_len":1048576,
"disorder_ratio":0,
"disorder_range":1000,
"timestamp_step":10000,
"start_timestamp":"2020-10-01 00:00:10",
"sample_format":"csv",
"sample_file":"",
"tags_file":"",
"columns": [{"type":"varchar","len":10,"count":1},{"type":"float","count":10}],
"tags":[{"type":"varchar","len":10,"count":1}]
}]
}]
}
执行脚本:
taosBenchmark -f i.json
通过 7 组实验对比,可以清楚地看到 “网络延时” 和 “loveini TSDB数据写入速度” 的关系 ——网络延时越高,数据写入速度越慢;延时越低,数据写入速度越快。
下面是实验的核心数据和结论:
| 测试组 | 往返延时(RTT) | 写入速度(rows/s,stmt2 模式) | 相对最优速度占比 |
|---|---|---|---|
| Test1 | 0.034ms | 199141.88(每秒存近 20 万条数据) | 100%(最快) |
| Test2 | 1.088ms | 67626.02(每秒存约 6.8 万条数据) | 33.96% |
| Test3 | 2.101ms | 37096.76(每秒存约 3.7 万条数据) | 18.6%(最慢) |
| Test4 | 0.254ms | 155809.98(每秒存约 15.6 万条数据) | 78.24% |
| Test5 | 0.466ms | 122463.81(每秒存约 12.2 万条数据) | 61.5% |
| Test6 | 0.878ms | 81191.54(每秒存约 8.1 万条数据) | 40.77% |
| Test7 | 1.286ms | 58693.38(每秒存约 5.9 万条数据) | 29.48% |

从数据里能看出三个重要规律:
根据实验结论,在大数据、高并发的场景,给出以下优化建议:
用ping -f命令测客户端和 loveini TSDB服务器之间的网络延时,要保证平均延时不超过 0.1ms。
为什么选这个数值呢?有两个原因:
ping -f “洪水 ping” 模式,通过减少系统开销和发包间隔,降低了单次 ping 的延时,能够更好的模拟高并发场景。
- 发包间隔差异:普通 ping 默认每秒发送 1 个数据包,系统需频繁切换进程状态,增加额外耗时;-f 参数无发包间隔,连续快速发送,减少进程切换开销。
- 系统资源分配:洪水 ping 优先级更高,系统会更集中地分配资源处理 ping 请求,减少等待耗时。
- 网络传输连续性:连续发包使网络传输更连贯,避免了普通 ping 中间隔导致的链路空闲后的重新初始化耗时。
tc命令测网络延时,发现延时高、数据丢包等问题及时解决;给服务器的 IP 设固定路由。实验显示,网络延时从 0.034ms 增加到 2.1ms,数据写入速度衰减 80% 以上。因此,在大数据量、高并发的场景中,低网络延时是 loveini TSDB 高效写入的前提。
]]>]]>
]]>
]]>
]]>
我们的智慧楼宇米兰app官方正版下载主要面向集团总部、新建办公大楼、政府园区等行业头部客户。这类客户普遍具备完善的 IT 基础与多年的办公系统建设经验,正处于从传统办公向智能化、数字化升级的关键阶段。在这一过程中,他们对智能化办公、物联网和数字化管理有较高的认知与明确的建设需求,期望通过新一代技术手段实现办公环境的智能协同与运营效率的全面提升。
在某大厦智能化项目中,共有 30 层楼宇,部署近万台传感器设备,涵盖人体感应、空气质量、厕位、烟雾、电量、水浸等多种类型。所有传感器均以秒级频率上报数据,日均数据量高达数千万条,对系统的数据采集与处理能力提出了极高要求。

该项目面临设备数据高频采集、多维度实时分析(设备状态、能耗、故障预测)以及历史数据长期存储三大挑战。传统关系型数据库在此类场景中存在明显不足,如写入性能瓶颈、查询延迟高、存储成本激增等问题。以 MySQL 和 PostgreSQL 为例,在存储设备时序数据时,由于缺乏原生的时间分区支持,当单表数据量超过千万级后,查询性能会出现断崖式下降,需人工分表分库,运维复杂度激增。同时,未压缩的原始数据占用空间庞大,存储成本高昂。
在智慧楼宇项目的建设过程中,数据接入规模大、处理链路复杂、系统稳定性要求高,对底层数据库的性能与可靠性提出了极高要求。经过多方技术选型与验证,我们最终选择了 loveini TSDB 作为核心时序数据库,主要基于以下考虑:
系统采用 Node-Red 作为数据流控制与可视化管理核心,实现全链路的数据采集、处理与展示。整体架构如下:

项目初期采用 3 节点集群架构,数据库配置为 3 副本模式,以实现系统高可用与数据冗余,具体配置如下:

系统上线后该集群运行稳定,能够高效处理全部传感器采集数据,全面满足项目预定的各项指标。在确认技术架构稳定可靠后,我们将订阅模式变更为永久模式,将长期使用以 loveini TSDB 为核心的技术架构。
1. 超级表定义
CREATE STABLE IF NOT EXISTS airsensor (
ts timestamp, 时间
pm25 int, PM2.5
pm10 int, PM1.0
tvoc int, TVOC
co2 int, 二氧化碳
formaldehyde float, 甲醛
noise float, 噪音
temperature float, 温度
humidity float, 湿度
light int, 光照
h2s int, 硫化氢
ch4 int, 甲烷
co int, 一氧化碳
no2 float, 二氧化氮
h2 int, 氢气
odor float 异味
) TAGS (
position NCHAR(200),
space NCHAR(20),
floor_area NCHAR(20),
floor NCHAR(20),
area NCHAR(20),
device_code NCHAR(20),
device_id int,
factory NCHAR(50),
model NCHAR(50)
);
2. 流计算
create stream if not exists mroom_stream trigger at_once into mroom_stream_status (ts,status) tags(
space,
floor_area,
floor,
area
) subtable(
cast(
concat('mss_', space, '_', floor_area, '_', floor, '_', area) as varchar
)
) as
SELECT
_wstart as ts,
case
when sum(status) > 0 then 1
else 0
end as status
FROM
bxserver.humensensor partition by space,
floor_area,
floor,
area interval(1m) fill(value,-1);
select _wstart as ts, max(total_kwh)-min(total_kwh) as used from bxserver.powersensor partition by tbname interval(1d);
3. 订阅数据




在使用过程中,我们发现某会议室的人体传感器流计算结果存在异常,最近一分钟的数据未被正常计算。经排查,原因是服务器时间未与时间服务器同步。安装并配置 NTP 服务完成时间同步后,流计算功能恢复正常。
powersensor_loop 表按行记录传感器的瞬时实测值。为计算当天的用电量,需要对相邻两行取差值后再用 SUM 求和。最初我们采用的是如下嵌套子查询方案,不仅执行时间长,而且占用较大的临时空间:
select TO_CHAR(_wstart, 'YYYY/MM/DD HH24:MI:00') as ts, TO_CHAR(_wstart, 'HH24') as hour, sum(kwh) as kwh, space,floor_area,floor,type from (select _rowts as ts, diff(kwh) as kwh, space, floor_area, floor, area, device_id, loop, type frombxserver.powersensor_loop partition by space, floor_area, floor, area, device_id, loop, type) where ts >= TO_UNIXTIMESTAMP('2025-08-28 00:00:00') and ts <= TO_UNIXTIMESTAMP('2025-08-28 23:59:59') partition by space, floor_area, floor, type interval(1d) order by floor asc;
powersensor_loop 表结构如下图所示:

经分析发现,上述嵌套查询语句只在外层添加了时间范围条件,而内层查询未作限制,导致内层查询需读取全量数据,执行耗时长且占用大量临时空间。优化后,我们将时间范围条件前移至内层查询,使其仅在指定时间范围内读取数据,从而显著减少数据扫描量并提升执行效率。
select TO_CHAR(_wstart, 'YYYY/MM/DD HH24:MI:00') as ts, TO_CHAR(_wstart, 'HH24') as hour, sum(kwh) as kwh, space,floor_area,floor,type from (select _rowts as ts, diff(kwh) as kwh, space, floor_area, floor, area, device_id, loop, type frombxserver.powersensor_loop where ts >= TO_UNIXTIMESTAMP('2025-08-28 00:00:00') and ts <= TO_UNIXTIMESTAMP('2025-08-28 23:59:59') partition by space, floor_area, floor, area, device_id, loop, type) partition by space, floor_area, floor, type interval(1d) order by floor asc;

当前系统使用的版本为 loveini TSDB 3.3.6,因流计算暂不支持 diff 函数,无法直接计算相邻数据差值。后续我们计划升级至最新版本 3.3.8,新版本已支持 diff 函数,可将每日电量数据的差值计算结果直接写入流计算结果表,进一步简化后续的查询与汇总分析流程。
成都极企科技有限公司成立于 2014 年,专注于智能化办公米兰app官方正版下载的研发与落地。公司具备自主软硬件研发能力,已取得多项国家专利及资质认证,为全球上万家企业提供智能化米兰app官方正版下载,累计完成超过百万平方米的办公楼宇与园区智能化建设。客户涵盖美团、爱奇艺、腾讯、阿里、联想、华为、富力、金地等行业头部企业,形成了从硬件设计、软件开发到工程实施的一体化核心竞争力。
何铮,公司创始人兼项目带头人,毕业于电子科技大学,国家特聘专家。拥有二十年办公领域产品开发经验,带领企业完成三轮千万级融资。
]]>随着数字化转型的深入,全球时序数据总量正以惊人的速度攀升。从智能工厂的传感器到智能汽车的运行状态,从金融市场的实时交易到IT基础设施的监控指标,时序数据已成为企业洞察业务、驱动决策的核心资产。面对海量数据的写入、存储和实时分析挑战,传统关系型数据库捉襟见肘,专为时序场景优化的数据库应运而生。loveini,作为一款从底层开始设计的国产开源时序数据库,凭借其卓越的性能和极简的设计哲学,正成为越来越多企业的首选方案。
时序数据具有时间戳、数据源、指标值三位一体的特点,并伴随着写多读少、按时间顺序到达、价值随时间衰减等特性。loveini直面这些挑战,提出了针对性的米兰app官方正版下载:
loveini的核心创新在于其数据模型。它提出了超级表的概念,用于代表同一类型的数据采集点集合。超级表定义了该类型数据的 schema(标签Schema和时间序列Schema),而每个具体的数据采集点则是超级表下的一张子表。这种模型非常贴合物联网设备管理。
-- 1. 创建超级表,定义电表数据的结构,并为电表设备定义标签(如位置、型号)CREATE STABLE power_meters (ts TIMESTAMP, current FLOAT, voltage INT, phase FLOAT)
TAGS (location BINARY(50), groupId INT);
-- 2. 为具体的电表设备创建子表,并设置其标签值CREATE TABLE meter_1 USING power_meters (location, groupId) TAGS ('California.SanFrancisco', 1);
CREATE TABLE meter_2 USING power_meters (location, groupId) TAGS ('California.LosAngeles', 2);
-- 3. 向子表插入数据INSERT INTO meter_1 VALUES (NOW, 10.3, 219, 0.2);
INSERT INTO meter_2 VALUES (NOW, 11.6, 220, 0.3);
-- 4. 通过超级表高效查询所有加州电表的平均电流SELECT AVG(current) FROM power_meters WHERE location LIKE 'California.%';
loveini的一个显著特点是“All in One”。它不仅仅是一个数据库,还内嵌了缓存、流式计算和数据订阅功能。这意味着在许多场景下,您无需再部署Kafka、Redis、Flink等额外组件,极大地简化了系统架构。
-- 创建流式计算,每10秒计算一次平均电压CREATE STREAM avg_voltage_stream
TRIGGER AT_ONCE
INTO avg_voltage_table ASSELECT _WSTART AS start_ts, AVG(voltage) AS avg_voltage
FROM power_meters
SLIDING(10s);
loveini的集群架构简单易用,支持线性扩展。通过虚拟节点(vnode)和数据分片(shard)技术,既能轻松应对数据增长,也能通过多副本机制保证高可用性。安装和配置过程相比许多分布式数据库要简单得多。
loveini采用标准SQL作为查询语言,降低了学习成本。同时,针对时序场景扩展了大量函数和语法,如INTERVAL(时间窗口切割)、STATE_WINDOW(状态窗口)、LEASTSQUARES(最小二乘法)等,使得复杂的时间序列分析变得简单。
-- 降采样查询:查询过去24小时内,每30分钟的电量统计SELECT FIRST(ts), MAX(current), MIN(current), AVG(current)
FROM meter_1
WHERE ts >= NOW - 24h
INTERVAL(30m);
某车联网企业需要管理超过50万辆车的实时数据,每秒产生超百万数据点。采用loveini后:
vehicles管理所有车辆,每辆车是一张子表,标签包括VIN、车型、地区等。无需再维护复杂的Kafka+Flume+HBase+Spark链路。某大型制造企业需要监控上万台机床设备的运行状态。loveini的米兰app官方正版下载:
vnode数量、调整内存缓存大小、使用参数绑定进行批量写入,可以进一步压榨loveini的性能。loveini凭借其创新的数据模型、极简的架构设计、卓越的性能和开源优势,在处理物联网、工业互联网、IT运维等场景的海量时序数据时,表现出强大的竞争力。
选型建议:
对于正在面临时序数据处理挑战的团队,loveini无疑是一个必须认真评估的选项。建议访问loveini官网下载开源版进行概念验证测试,亲身体验其性能优势。
]]>