随着物联网迅速崛起,智能设备广泛普及,各类联网传感器正以前所未有的速度推动着我们走向智能时代。这些智能设备不仅实现了自动化、远程控制和实时监测,还产生了庞大且多样化的数据资源。这些数据涵盖传统的温度、湿度等遥感传感数据,同时也包含大量的地理位置信息、音频、视频等多种数据类型。这些物联网数据蕴含着巨大潜力,但也伴随一个至关重要的挑战:如何高效、安全地存储、管理和处理这些信息。数据的价值并不仅仅体现在存储本身,而在于如何从中提炼出有价值的信息。度能团队基于自身长期对时序数据存储管理的技术积累,不仅扩展了对空间属性维度的数据管理和分析应用能力,打造了时空数据管理平台产品,还通过多源时空数据管理及服务发布的能力,广泛应用于工业、园区、水务、智慧城市、数字孪生、物联网、GIS等私有化场景,为业务应用系统筑造时空数据服务底座。本文聚焦物联网数据的发展趋势,重点探讨数据存储关键技术要点。
智能领域的重要角色:时序数据
联网设备迅猛发展推动大量时序数据应运而生。时序数据在智能设备领域即提供了设备状态和行为的关键洞察,通过设备传感器记录了诸如温度、湿度等重要感应数据。与其同时,时序数据正在广泛应用于金融、气象、生产制造等不同领域。
▌1.1 时序数据五大特点
时序数据具有五大特点,第一,时间顺序性作为时序数据主要特征,数据点按照时间先后顺序进行排列,这种顺序性使时序数据在分析过程中有一定规律。第二,时序数据的数据点采集频率取决于设备传感器工作频率,因此数据点之间通常存在一定时间间隔,这种频率性可以揭示出数据采集的速率和节奏。第三,时序数据可能表现出明显时序趋势,即数据值在较长时间跨度内逐渐上升或下降。这一趋势有助于我们理解数据的演变和发展。第四,时序数据在较长时间跨度上可能呈现出重复的模式和周期性,这种呈现可以揭示出某种规律性,对于预测和决策制定至关重要。第五,时序数据中常常包含噪音和异常值,这些干扰因素可能影响数据的准确性和可靠性,因此需要特别处理。如图1所示,基于这些特点,我们可以为时序数据定义特殊语义度量、字段和标签,从而构建核心时间序列概念。
▲ 图1 时序数据
▌1.2 时序数据常见问题与挑战
时序数据通常以大规模和高频率方式产生。例如传感器数据,由于数据量庞大,需要低成本存储方案,以确保高效地保存大量时序数据,但同时需保持成本效益。在数据分布式存储时,多台服务器共同承担数据存储,常常会面临数据倾斜的问题,即数据在分布上不均匀,导致一些节点或分区负载过重,需要有效解决这一问题以确保系统性能稳定性。时序数据在实际存储和查询时,实际写入/查询的数据大小可能存在比程序要求写入查询数据更大的情况,既读写放大,在这个过程中会产生额外存储和计算成本,如何有效减少读写放大对降低数据处理成本至关重要。查询时的随机IO也是时序数据难点之一,有效减少查询时的随机IO对于提高查询性能至关重要。这些技术难点构成了打造高性能、低成本的时序数据存储系统关键挑战。
▌1.3 四大时序数据技术多维度解决数据管理痛点
时间索引技术是一种关键数据管理方法,用于加速和优化时间序列数据的查询。它通过对数据按时间进行排序、分区以及采用特定索引结构来实现,从而使在时间范围内迅速定位和检索数据成为可能。这种索引结构极大地提升了查询性能,有效减少读写的随机IO。此外,时序压缩技术采用多种方法和策略,以降低存储占用。其中一种关键方法是 Delta-of-delta (二阶差分编码)编码,通过存储实际数据值,连续数据点之间的变化,从而有效减少数据存储需求。针对不同数据点类型,也可以采用诸如Simple8b、Gorilla等压缩后,再通过 Snappy、LZ4和 Zstd 等压缩算法,以减小实际数据存储空间的占用。存储空间越连续、紧凑,就意味着实际存储查询时,可以最大程度减少读写IO成本。
▲图2 时序数据抽象架构
在预聚合技术方面,高频率生成的原始时序数据不仅按照指定时间窗口进行聚合,形成更大时间粒度数据点,极大减少了数据点数量,还显著降低了存储需求,在长期数据保留和成本控制方面至关重要。另一方面,在大规模时序数据场景下,查询预聚合数据比查询原始高频率数据更快,最大程度上缩短查询响应时间。
时序数据分级存储是将时序数据分成不同层级的策略,每个层级使用不同存储介质和策略,用以最优化存储资源的使用和查询性能。热数据,即频繁访问的数据,通常存储在高性能介质如固态硬盘(SSD)或内存中,以确保快速读取和查询响应时间。相对不经常访问的暖数据,虽然需要更多存储空间,但通常存储在成本较低但查询性能稍慢的传统磁盘驱动器上。冷数据,即很少访问的历史数据,通常需要长期保存以满足法规或合规性要求,可以归档到成本最低的存储介质上,如磁带存档或云存储,以进一步降低存储成本。
时序数据分级存储通常需要自动数据迁移策略,以将数据从一个层级迁移到另一个层级,触发条件可以基于数据访问频率、时间戳或其他标准。合理化数据生命周期管理策略有助于确定何时将数据从热层级迁移到暖层级,后续再次迁移至冷层级,以最大程度地降低存储成本。
发展过程中的新突破:时序和空间数据深度结合
▌2.1 空间实体的描述形式:空间数据特点
空间数据(Spatial Data)是对空间实体的描述,空间实体则是由自然世界中地理实体抽象而来,比如一个城市地图可以由点(Point)、线(Line)、多边形(Polygon)以及由这3种基本空间类型衍生的复合空间类型进行描述,除了表达其本身形状的空间描述外,还需要包含其所处空间位置的描述(如经纬度),以及一些业务属性(如所属辖区)。
对于空间数据的建模,分为2种类型,一种是基于对象的模型,一种是基于场的模型。基于对象的模型是将整个地理空间看作一个空域,所有的空间实体作为独立对象分布其中,这种模型的空间数据我们称之为矢量数据;基于场的模型是将地理空间中的空间实体和现象看作连续变量,比如地表的温度分布、土壤湿度等,这种模型将地理空间划分为均匀的网格,每个网格取值就是其表示的现象数值表达,比如温度、海拔等,这种模型的空间数据我们称之为栅格数据。
矢量数据和栅格数据是两种截然不同的空间数据,存储方式也完全不同,由于矢量数据是由多个独立对象表示,因此往往采用支持空间索引的数据库来存储;而栅格数据由于主要用于表达连续的空间现象,因此主要采用tiff这种图像格式来存储,而图像则主要使用文件系统、对象存储等方式来进行持久化存储。
▌2.2 空间数据融合时间信息:时空数据特点
时空数据(Spatial-Temporal Data)是由空间数据和时间信息复合而成的数据,用于描述在地理空间中随着时间变化的现象、事件或属性。时空数据的空间属性描述了该数据在地理空间中的位置,比如经纬度信息,而时间信息则往往用于表达数据采集、观察或者记录的时间点。由于时空数据能够描述一段时间内连续变化的现象,因此这种数据类型能够帮助我们分析空间位置和时间信息间的关联,比如地理区域内随时间变化的温度、人口流动等。
基于空间数据从模型上可以分为矢量数据和栅格数据,所以时空数据模型也是来源于这两种模型。矢量数据的时空数据,可以将时间戳作为一个属性附加到空间数据上,这样空间数据就变成了时空数据,并且由于矢量数据是结构化数据,因此存储空间占用很低,还可以很好地支持几何空间查询,这也是主流时空数据描述方式;对于栅格数据的时空数据,则需要保存采样时间内的所有栅格图像,这对于存储空间极其不友好,往往难以支持高效的时空查询。
▌2.3 空间索引技术解决时空数据存储遇新挑战
时空数据从模型上可以分为矢量数据和栅格数据,由于栅格数据主要以图片的方式保存,存储上也主要以文件系统和对象存储为主,因此本文不做详细介绍,而矢量数据是结构化数据,一般存储在关系型数据库中,需要空间索引技术支持,以便能够查询一定空间范围内的空间对象,其技术挑战主要有以下2点:
1) 如何索引多维数据
数据库索引大致可以分为2类,一是哈希索引,二是范围索引,哈希索引本质上是对单个字段进行精确匹配查询;范围索引一般采用多叉树作为数据结构,支持对索引字段进行范围匹配。而时空数据这种多维数据无法直接使用上述这2种索引模型,因此需要单独设计一种适用于多维数据的索引模型。
2) 如何在支持空间查询条件的前提下实现一般字段条件查询
时空数据的查询往往包含有一般字段的筛选条件,例如,查询7点到8点之间,位于浦东新区内,类型为出租车的所有汽车对象。为了实现这种查询,要求存储系统支持多种索引模型,还需考虑到存储空间和查询性能,这对存储系统设计是一个重要挑战。
▌2.4 时空数据存储要点
时空数据存储面临最大的挑战是如何索引多维数据,以及如何支持多种索引模型。我们将以二维点和二维多边形为例,介绍如何索引这些数据。
2.4.1 二维点的空间索引
▲图3 二维空间查询
由上图可见二维空间中散落着一些点,如pt-1、pt-2等,红色矩形框是我们的查询条件,这个查询可以表达为如下的SQL语句:
SELECT * FROM data WHERE ST_Within(geometry, BOX)
其中data表示我们的数据集,ST_Within函数表示被BOX包含的所有空间对象。我们首先对空间进行分块,图中将空间划分为了4*4的方格,并且为每个方格赋予了唯一编码,这样每个点都散落到了某个方格中,并与其编码相关联,这使得我们可以通过编码值索引到其内部的所有点,我们用下图的表格来存储这种关联关系:
▲表1 index表
由于图中红框与0000和0001两个方格相交,因此查询可以转化如下:
SELECT * FROM index WHERE key >= ‘0000’ and key <= ‘0001’
其中index即为表1所示的index表,通过空间分割加编码方式,我们将一个二维空间查询转化为了一维范围查询,最后我们还需要一个过滤器根据查询条件过滤出最终结果。
2.4.2 以空间分割、编码为基础二维多边形的空间索引新思路
对于二维多边形,大致的思路也相同,但是在编码方式上有较大区别。在进行编码前,我们首先需要一些定义,对于在切割空间中产生的子空间,我们称之为Element,对于每个Element,我们在计算其是否包含一个多边形时,会对其本身的范围向右上方向进行一级扩展(不超过整个空间的边界),如下图所示:
▲图4 Element的扩展
之所以这样做,是因为如果一个多边形落在中央位置,则没有任何一个Element可以包含这个多边形,如图4中央的多边形所示。一种常见的二维多边形编码方式就可以总结为,对于包含多边形的子空间进行不断切分,直到切分后的子Element无法包含目标多边形,停止空间切分,如图5所示。
▲图5 二维多边形的编码过程
编码结束后,得到的编码值无法直接使用,因为00和0000这种编码值如果直接使用是重复的,所以要对编码值进行一次映射,假设分割最大层级是N,则总的Element数是4^0+4^1…+4^N=((4^(N+1)-1))/3,即需要将编码值映射到[0,( (4^(N+1)-1))/3- 1],映射方式不是唯一的,这里我们假设映射方式叫做,会在查询时使用到。
在查询方面,对多边形、对点查询也存在一些差异,如图6所示,红色查询框与对应编号Element相交,将其加入待查询的key的集合,并对其进行子空间切分,将与查询框有交集的空间加入待查询的key集合,直到达到最大切分层级。最后,对得到的key集合进行合并,得到一组key range,对key range使用进行映射,使用映射的结果进行查询,使用过滤器进行过滤,得到最终结果。
▲图6 二维多边形的空间查询
2.4.3 差异化空间填充曲线对空间索引的多元影响
我们介绍了如何对点和多边形进行空间索引,其中核心思想是对空间进行分割,其次编码。其中编码方式有很多种,不同的编码方式会导致编码值在空间上以不同顺序相连接,如下图所示:
▲图7 空间填充曲线
我们在2.4.1和2.4.2节中使用的编码方式称之为z曲线,除了z曲线以外,还有其他的空间填充曲线,如希尔伯特曲线、皮亚诺曲线等,这些不同的曲线对于空间索引的性能往往存在一定影响,如下图所示:
▲图8 z曲线和希尔伯特曲线
图中对于空间使用了z曲线和希尔伯特曲线进行了切分,蓝色框是一个空间查询框。我们会发现,对于z曲线来说,这个查询会产生2个range查询;而对于希尔伯特曲线来说,会产生1个range查询。所以不同的空间填充曲线,在空间查询时,会带来不同的IO次数。一般来说,希尔伯特曲线的性能涉及到旋转操作,所以编码方式比z曲线复杂。
2.4.4 时空数据存储
在2.4.1到2.4.3节中,我们介绍了对多维数据进行索引的大致原理,基于这些大致原理,我们可以给出对应存储设计,来支持多索引模型,以及空间和时间的混合查询。
▲图9 时空数据存储
时空数据整体上由空间索引表、tag索引表和数据表三个部分组成,空间索引表和tag索引表根据查询条件得到一批token(token可以看作数据的主键),不同token数据全局有序分布在不同存储节点上,每个存储节点数据又按照时间分片,每个时间分片的数据按照token排序,同一个token的数据则按照时间排序。
通过这个设计,可以在查询时,将对数据表的查询请求合并成少数batch请求,每个batch请求携带一批token,对这一批token的查询则可以通过顺序io的方式查询磁盘,从而大大降低io次数,提升查询性能。而时间分片设计则可以大大减少需要过滤的数据量,缩小查询范围,并且在数据按照时间批量删除时,通过直接删除文件的方式大大提升删除性能。
时代浪潮下机遇与挑战共存:时空数据将不断攀登新高峰
党的二十大报告提出加快发展数字经济,促进数字经济与实体经济深度融合。由此可见顺应新一轮科技、产业变革趋势,数字化转型在数字经济发展过程中的重要地位。2023年9月13日至14日,由中国信息通信研究院、中国通信标准化协会联合主办的2023数字化转型发展大会暨首届数字原生大会于北京隆重举办。会上公布了第二届“鼎新杯”数字化转型应用大赛全国总决赛获奖案例。本次赛事,百度以智慧北京-面向北京市地理空间领域建设的政务时空大数据平台案例斩获二等奖。本次获奖案例,采用时空数据管理平台构建政务时空大数据空间底座,赋能时空平台专区试点应用建设,加速政府数据和行业领域数据融合,提升政府数据使用价值。实现政务地理空间信息资源共享服务平台对数据接入层、数据托管平台、数据管理门户的扩展、升级,搭建时空专区的运营支撑平台。加深智慧城市业务、空间两个方向在时间维度上的纵深关联,建立即时感知、全时响应的“时空动态”智慧城市建设新范式。
▲第二届“鼎新杯”数字化转型应用大赛颁奖图
未来,我们将努力构建更多创新实践案例和解决方案,使得时空数据在城市规划、环境监测、医疗保健、交通管理等多元化领域发挥关键作用,推动大数据技术产业创新发展、助力构建以数据为关键要素的数字经济、同时,在不断探索时空数据的潜力时,我们也将全力保障数据隐私和安全,确保时空数据的规范使用。
本文分享自微信公众号 - 百度开发者中心(baidudev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。