范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

性能超越Clickhouse物联网场景中的毫秒级查询案例

  1 物联网应用场景简介
  物联网(Internet of Things,简称 IoT)是指通过各种信息传感、通信和 IT 技术来实时连接、采集、监管海量的传感设备,从而实现对现实世界的精确感知和快速响应,继而实现自动化、智能化管理。在查询 IoT 设备状态的场景下,吞吐量和时延是两个重要的性能指标。
  在工业物联网中,常见有以下几种设备时序数据的查询需求: 案例1:查询某个设备最近的记录 案例2:查询某个租户所有设备的最近一条记录 案例3:查询某个设备最近5分钟的统计信息 案例4:查询某个设备最近一天的秒级数据
  本教程通过一个工业物联网的案例,来演示 DolphinDB 的序列查询性能,并对比测试了 DolphinDB TSDB 引擎、OLAP 引擎,以及 ClickHouse MergeTree 引擎在上述查询案例上的时延指标。总体来说,DolphinDB TSDB 引擎的性能(时延)对比 DolphinDB OLAP 引擎和 ClickHouse MergeTree 引擎有显著优势。 2 案例数据准备2.1 数据集说明
  本教程参考了某工业物联网 SaaS 平台服务商的数据集,模拟并使用一份高度仿真的数据。该SaaS服务商的主要业务是监控各个地区的噪声情况。表结构如下:
  序号
  字段名称
  字段类型
  注释
  1
  tenantId   INT   租户ID   2
  deviceId   INT   设备ID   3
  soundPressureLevel   DOUBLE   声音分贝   4
  soundPowerLevel   DOUBLE   声音功率值   5
  ts   TIMESTAMP   数据采集时间戳   6
  date   DATE   日期   一行数据包含租户 ID、设备 ID、声压、噪声功率、采集时间戳和日期共计 6 列数据。每行记录占用 36 字节。该案例数据包含100 个租户,每个租户管理 100 个噪声监控设备,记录了从 2022-01-01 至 2022-01-12,12亿的噪声数据,共计 40G。 2.2 库表设计及数据模拟   使用 DolphinDB TSDB 引擎,创建一个名为 NoiseDB 的数据库,存储噪声数据。TSDB 引擎是 DolphinDB 自 2.00 版本起,专门为物联网场景设计研发的数据存储引擎,具备优秀的写入和序列查询性能。   在噪声监控的 SaaS 服务中,较为频繁的查询场景是以租户为维度,查询某一天某个设备的状态信息。因此设计 noise 表按日期、租户 ID 进行分区,可以有效利用分区剪枝。同时使用区分度较高的设备 ID 和数据采集时间戳作为排序键(查询索引),使查询时能够快速定位对应设备的数据,提升查询性能。具体实现脚本如下。 db1 = database(,VALUE,1000..2000) db2 = database(, VALUE, 2022.01.01..2022.12.30) // TSDB for iot dbNoise = database("dfs://NoiseDB",COMPO,[db1,db2], engine="TSDB") create table "dfs://NoiseDB"."noise"( tenantId INT, deviceId INT, soundPressureLevel INT, soundPowerLevel DOUBLE, ts TIMESTAMP, date DATE ) partitioned by tenantId, date sortColumns=[`deviceId,`ts]   库表创建完成后,模拟 2022-01-01 至 2022-01-12 的数据,具体代码详见附录 DolphinDB 脚本。   可以通过 SQL 查询验证下数据集大小: select count(*) from loadTable(database("dfs://NoiseDB"),"noise") where date between 2022.01.01:2022.01.102> 1260010000   导入完成后,每个分区下生成3个level 0 file,未满足自动合并条件(大于等于10个 levelFile),需要进行手动合并。 chunkIds = exec chunkId from getChunksMeta() where type=1 for (x in chunkIds) { triggerTSDBCompaction(x) }   完成后将案例数据导出数据至 csv 文件,以便后续导入 OLAP 引擎、ClickHouse。在 ClickHouse 中使用 OPTIMIZE TABLE noise 合并下 mergeTree。具体过程参照附录 ClickHouse 脚本。 3 SQL 查询   在 DolphinDB 中,可以使用 SQL 快速实现4个设备状态查询需求,并且代码十分简洁。 案例1:查询某个设备最近的100条记录: noise = loadTable(database("dfs://NoiseDB"),"noise") select * from noise where date=2022.01.01 and tenantId=1055 and deviceId=10067 order by ts desc limit 100 # timer(10) select ... Time elapsed: 24.33 ms   脚本的 where 条件语句中指定了分区列 date 和 tenantId 进行过滤,便于 DolphinDB 系统通过分区剪枝快读定位到对应的分区。同时指定了数据库的 sort key (deviceId) 作为过滤字段,利用 TSDB 的索引机制,可以快速定位到数据块,并按时间顺序取回最新的100条记录。平均一次查询耗时 2ms ,未命中缓存的首次查询耗时 14ms 。 案例2:查询某个租户所有设备最新状态 noise = loadTable(database("dfs://NoiseDB"),"noise") select * from noise where date=2022.01.01 and tenantId=1055 context by deviceId csort ts desc limit 1 # timer(10) select ... Time elapsed: 246.619 ms   该脚本在 where 条件语句中同样指定了分区列以快速定位到对应的数据分区。通过 context by 子句来根据设备 ID 将数据进行分组,每组数据通过 csort 子句按时间倒序排列(考虑到物联网存在消息乱序的情况,必须使用csort将数据按采集时间排序)。使用 limit 1 获取每个窗口内的最新的一条记录,从而获取该租户当日所有设备的最新状态。平均一次查询耗时 25ms ,首次查询耗时 121ms 。 案例3:查询某个设备5分钟内的噪声统计值 noise = loadTable(database("dfs://NoiseDB"),"noise") select min(ts) as startTs ,max(ts) as endTs ,max(soundPressureLevel) ,avg(soundPressureLevel) ,max(soundPowerLevel) ,avg(soundPowerLevel) from noise where date=2022.01.01 and tenantId=1055 and deviceId=10067 and ts between 2022.01.01T00:50:15.518:2022.01.01T00:55:15.518 group by tenantId, deviceId # timer(10) select ... Time elapsed: 22.168 ms   该脚本首先根据 where 指定的过滤条件定位并扫描数据块,取出对应时间段的数据,并按 tenantId, deviceId 进行聚合计算,以获取声音分贝、功率的统计值。平均一次查询耗时 2ms ,首次查询耗时 13ms 。 案例4:查询某个设备最近一天的明细数据 noise = loadTable(database("dfs://NoiseDB"),"noise") select * from noise where date=2022.01.01 and tenantId=1055 and deviceId=10067 order by ts # timer(10) select ... Time elapsed: 23.261 ms   该脚本首先根据 where 指定的过滤条件定位并扫描数据块,取出对应时间段的明细数据,并按采集时间排序。平均一次查询耗时 2ms ,首次查询耗时 16ms 。   注 :首次查询指未命中数据库缓存及操作系统缓存的查询。 4 对比测试   进一步测试 DolphinDB TSDB 引擎与 OLAP 引擎,以及 ClickHouse MergeTree 引擎在上述数据集的时序查询性能。测试过程中尽可能地保持环境变量相同,以保证科学有效。具体测试脚本详见附录。 4.1 测试环境测试机器配置   操作系统:CentOS 7   CPU: 2 cores   内存:10 G   磁盘:SSD 核心测试参数   对测试中影响性能的关键参数,保持对等一致。   软件信息   核心参数   库表设计   DolphinDB:2.00.6 单节点   memSize=8G TSDB引擎 / OLAP引擎   partitioned by tenantId, datesortColumns = [deviceId,ts]   ClickHouse:22.6.1 单节点   max_server_memory_usage=8GMergeTree引擎   partition by tenantId, dateorder by deviceId, ts   测试时,DolphinDB 和 ClickHouse 均采用单节点,并分配 8G 最大内存。在引擎方面,DolphinDB TSDB 引擎,ClickHouse MergeTree 引擎的内部实现都采用了 LSM-tree。并保持库表设计完全一致。 时间衡量标准   由于端到端的时间,容易受到网络抖动和客户端实现性能的影响,因此本次测试的测量时间设定为从查询引擎接收到请求至计算出结果为止。   4.2 测试结果   三者的具体测试结果为下表,表中数值为 平均 耗时/ 首次 查询耗时(单位 ms),平均耗时的计算逻辑为:   平均耗时 = ( 首次耗时 + 9次缓存命中耗时 )/ 10   测试用例   场景   DolphinDB TSDB   DolphinDB OLAP   ClickHouse   case1   查询某个设备最新100 条记录   2 / 14   34 / 51   14 / 150   case2   查询某个租户所有设备的最新状态   25 /121   62 / 170   73 / 400   case3   查询某个设备 5min的噪声统计值   2 / 13   15 / 136   12 / 82   case4   查询某个设备最近一天的明细数据   2 / 16   24 / 220   22 / 200   可以看出,OLAP 引擎和 ClickHouse 在不同的查询场景下性能各有其优势和劣势。   而 TSDB 引擎性能均优于 ClickHouse,在相对复杂的点查场景性能差距更大。在场景4下 ,DolphinDB TSDB 引擎比 ClickHouse 的性能高 12.5 倍,首次查询高13倍。在该场景中,TSDB 引擎需要读取对应设备的10000条记录,压缩后的存储大小约为90K。存储在6个连续的Block中,读取效率非常高效。而 ClickHouse 则是 scan 了该分区下1000000条记录的数据块,因此两者的首次查询性能差距较大,而缓存后的性能差距主要取决于两者在计算性能上的差别 。 5 总结   DolphinDB TSDB 引擎在物联网场景有着卓越的点查性能,可以以毫秒级延时迅速响应设备的状态信息,其性能更优于 ClickHouse 的 MergeTree 引擎。 6 附录跳转中...   跳转中...

小罗巅峰真的是全方位的巅峰,满级的六边形战士吗?先来看什么是所谓的六边形这个名词最早出自于实况足球系列游戏,随着实况足球系列的不断更新,球员能力划分越来越细,为了让玩家能够直观的感受球员实力和特点,konami公司将球员的能力做石家庄周边,哪的红叶最好看?抱犊寨停车坐爱枫林晚,霜叶红于二月花。历经秋风的洗练,太行山上栌叶金黄枫叶赤红。山林尽染,灿如云锦。为大家盘点石家庄周边市民周末赏红叶的好去处,大家一起观看万山红遍,层林尽染吧!1中国有哪些性价比高的一本大学?所谓性价比高指的是分不高,但是好就业。选择学校和专业确实很痛苦,个人推荐如下一985这几所985高校实力非常强劲就业率保研率起薪都非常不错,唯一的缺点就是区位不是太好,且基本都是工桂林有哪些地方是本地人不会去,外地人旅游经常去的景点?作为一个桂林人,我觉得桂林没有哪些地方是本地人不会去,外地人旅游经常去的景点!因为桂林处处都是景点,景在城中,城在景中,任何一个景点的存在都有着他特殊意义和值得去的理由!如果你来到为什么感觉中国汉字在国际普及不起来?为什么英语目前依旧是国际语言的主流?世界对国家的认知决定这个国家对世界的影响力,过去英国人主导世界,当下美国人主导世界英语当然主导世界语言,当中国夠强在世界的话语权占主要地位能主导世界的相当领域,那时汉语将是世界最美中国三大男高音廖昌永阎维文戴玉强,这样排名对吗?廖昌永是男中音。中国三大男高音一般指美声唱法的戴玉强莫华伦和魏松廖昌永同样是美声唱法,但是男中音阎维文更偏重的是民族唱法,也没有更明确的是高音还是中音。不对,这是常识性错误。廖昌永如果已经获得美国国籍,还可以改回中国国籍吗?当你获得美国国籍就是自动放弃中国国籍,如果你真的放弃了中国国籍,那我只能说那是你的损失,你将后悔一辈子,作为一名中国人一直是我们的骄傲,走到哪里我们都可以堂堂正正说我们是中国人,中四千以内有什么好看的机械表?四千元以内其实也有很多好看的机械表,而且比较实用,功能简单能满足基本日常需求。那怎么样的千元手表算靠谱呢,你是如何理解的?价格合适颜值不错工艺过关还是说将这三者集于一身的手表才算得什么人不能出国旅游?如果在信用良好的情况下,在职业的公检法的公务人员,还是军人是不允许出国旅游的谢谢邀请。说到出国旅游,其实现在随着物质生活条件越来越好,很多朋友已经不满足只在国内旅游了,也会有更多的48岁许晴撞上46岁俞飞鸿,同样是一身黑色,谁更好看?许晴最让人难一忘记的形象是笑傲江湖中的任盈盈,她把任盈盈江湖女郎的江湖气,英灵气及美丽动人柔情侠义演的活灵活现,让人难忘怀。所以她俩相比依然觉得许晴好看,我是许晴的忠实粉,她的那一坐标武汉,30岁年收入多少正常?我是1992年人,眼看就要30岁了,作为新武汉人(2018年大学生落户),勉强能在武汉生活下去,我以自身的收入和支出情况,来回答下这个问题,解析下真实的武汉收入。2018年研究生毕
这五句简单的话,藏着人生的智慧来源人民日报1hr没有任何一朵花一开始便是花很多人追求目标时,常常希望一蹴而就。殊不知,越是急于求成,越容易过犹不及。只要一步一步攀登,哪怕步子再小,也是在向上的路上。无论曾经是怎辽宁大将缺阵,韩德君郭艾伦李晓旭休战让杨鸣抓狂,杨鸣不该惨败在姚明连任篮协主席后,王芳也成为篮协第一副主席,本届的篮协也就4位副主席,这应该是辽宁球迷最高兴的事情,至于能不能接班姚明,完全可以尽情幻想了,只是辽宁队打浙江的大名单严重不妙,韩红旗派出所开展捂住养老钱包,谨防养老诈骗宣传活动阳光讯(记者梁萌通讯员宁静)老年人辛辛苦苦积攒下来的养老钱来之不易,更不能进了骗子的口袋。为切实提高老年人的反诈意识和识骗防骗能力,守护好养老钱,近日,公安灞桥分局红旗派出所开展捂你是因为看见才相信还是因为相信才看见?头条创作挑战赛今天在樊登读书听到了一本书叫本质,里面提到的所谓成功人士的共同点里有一个点。就是他们在成功之前,在奋斗的过程中,就能秉持的一个百折不挠的态度。这个态度的来源不是别的,有关系,我就压你一头!竞争一直伴随你我左右。从出生到结束每个人都逃离不了这个死循环。很简单的一个例子,在某单位上班的A和B,每个人对A说话都客客气气,做错事,也不会受到斥责,只是一份检讨了事。属于在单位既然选择了卫校,那就要选一门养得活自己的专业不是每个暴风雨后都会出现彩虹,但至少万里晴空。对于我们来说,每次失败都有它的意义。只要守住我们那份坚持,美丽的天空终会出现一条属于我们的彩虹!当初中毕业后,或者因为在高中学文化课学走自己的路,伴着刚刚好的孤独2022年12月16日星期四小雨,看完作者麦子奇恰到好处的孤独这本书对我的收获与感想,关于亲情,朋友,人生旅途的过路者从这几点我将展开说说我的个人看法与观点孤独之前是迷茫,孤独之后坦然的心,最美坦然的心,最美淡忘过去的不如意人生之事,不如意事十有八九,且不去看那些含着金汤勺出生的名门贵族,在我们普通人之中,没有谁的人生是可以顺风顺水,曾经肯定会有一些黯淡,但珍惜当下的每一西藏旅行全攻略线路规划,注意事项,时间安排和准备工作用整整18天,完整的走了川藏南线(318线)和阿里南线。西藏不是不可企及的远方,也绝不是轻易能说走就走的旅行。至此已经更完了整个西藏旅行的行程。前文内容请移步本号合集天上西藏,云上以今日之国力,我军若收复藏南能否长期驻守?近日,中印在藏南达旺实际控制线附近发生激烈冲突,越线挑衅,企图制造事端的印军遭到了我军毫不留情的迎头痛击,大败而逃。俄罗斯卫星通讯社报道印军至少有6人受伤,印度媒体则宣称受伤人数为朱婷刚到意甲2个月就拿大奖!特意发视频感谢,国外球迷大赞朱婷如果说何为巨星,那就是无论到什么地方都能发挥自己的价值,朱婷无疑是世界体坛的巨星。从官宣加盟意甲联赛斯坎迪奇俱乐部开始,意甲联赛的关注度直线上升,斯坎迪奇也成为意甲联赛夺冠热门之一