公开/公告号CN103425663A
专利类型发明专利
公开/公告日2013-12-04
原文格式PDF
申请/专利权人 中兴通讯股份有限公司;
申请/专利号CN201210151801.9
发明设计人 潘奇银;
申请日2012-05-16
分类号G06F17/30(20060101);
代理机构11262 北京安信方达知识产权代理有限公司;
代理人解婷婷;龙洪
地址 518057 广东省深圳市南山区高新技术产业园科技南路中兴通讯大厦法务部
入库时间 2024-02-19 21:10:10
法律状态公告日
法律状态信息
法律状态
2017-11-28
授权
授权
2013-12-25
实质审查的生效 IPC(主分类):G06F17/30 申请日:20120516
实质审查的生效
2013-12-04
公开
公开
技术领域
本发明涉及嵌入式系统,具体涉及一种嵌入式系统数据库数据处理方法 (包括创建表、存储记录、删除记录)和相应装置。
背景技术
随着计算机技术的不断发展,人们生活水平的日益提高,越来越多的工 业控制、医疗、通讯、消费等电子产品日趋智能化,以微处理器为核心的嵌 入式监控系统得到日益广泛应用。为了更好地了解设备的运行状况,监控系 统需要采集大量的运行参数数据,并将这些数据呈现给用户,同时监控系统 还需要为用户提供大量的历史数据,以便用户更好地了解设备的运行规律, 从而对设备的运行策略进行调整,使设备的工作效率更高,能耗更低。因此, 嵌入式监控系统要在有限的存储空间条件下为用户提供较大容量的历史记录 存储,并提供相应的查询功能。
为了解决存储空间有限的问题,通常的做法是数据循环覆盖保存,即当 存储空间所剩不多时,最新的数据要覆盖最老的数据。具体做法是:根据历 史数据存储空间M和一条记录的最大数据量m,将存储空间划分为N个存 储单元(N=M/m),每个单元存储一条记录,至少建立一个写游标Q,指向 要写入的单元,每新增一条记录,游标就指向下一个存储单元,当游标值 Q>=N时,将游标归0(即指向第一个存储单元),在保存历史记录的同时,也 要将写游标保存到掉电不丢失的存储介质中,上电时先读取写游标,然后再 读写历史记录。为了保证数据的正确性,在读写历史记录时都需要对数据进 行校验,比如单条记录进行CRC校验。如果数据都是顺序读取,那么这种做 法简单高效,但如果需要记录查询服务(比如用户要查询某个时间段的记录), 而且数据量比较大的时候,只能通过复杂的算法来实现查询。简而言之,这 种做法说需要复杂的算法才能实现查询功能,而且每个存储单元都根据最大 的数据量设定的,不可变长,存储空间利用较低。
虽然目前很多数据库是支持可变长数据存储并都具备强大的查询功能, 然而不幸的是目前大多数的数据库系统不能直接实现数据循环覆盖保存功 能。
发明内容
本发明所要解决的技术问题是提供一种嵌入式系统数据库创建表、存记 录、删记录的方法和装置,提高嵌入式系统数据库的数据处理效率。
为解决上述技术问题,本发明提供了一种创建嵌入式系统数据库表的方 法,包括:
为每一类记录创建一个记录表,每个记录表包括新旧程度标识字段,所 述新旧程度标识用于标识各条记录的新旧程度;
为每个记录表分配最大记录数量;
创建索引表,所述索引表中保存一个或多个记录表的记录信息,所述记 录信息包括:记录表标识,记录表的新旧记录信息,以及记录表的当前记录 数量。
为解决上述技术问题,本发明还提供了一种在嵌入式系统数据库表中存 储记录的方法,包括:
将待存入记录存入记录表时,从该记录表对应的索引表中读取该记录表 的当前记录数量;
根据当前记录数量判断该记录表是否已存满,如果未存满,则将该待存 入记录作为一条新纪录写入记录表,更新索引表中该记录表的新旧记录信息 和当前记录数量,如果已存满,则根据索引表中该记录表的新旧记录信息找 到旧记录,用待存入记录覆盖旧记录,更新索引表中该记录表的新旧记录信 息。
进一步地,所述根据当前记录数量判断该记录表是否已存满,包括:判 断当前记录数量是否大于等于该记录表的最大记录数量,如果是,表示已存 满,如果不是,表示未存满。
进一步地,所述记录表的新旧记录信息包括最旧记录标识和最新记录标 识;
所述更新索引表中该记录表的新旧记录信息和当前记录数量,包括:更 新索引表中该记录表的最新记录标识和当前记录数量;
所述根据索引表中该记录表的新旧记录信息找到旧记录,包括:根据最 旧记录标识找到最旧记录;
所述更新索引表中该记录表的新旧记录信息,包括:更新索引表中该记 录表的最旧记录标识和最新记录标识。
进一步地,所述用待存入记录覆盖旧记录,包括:用待存入记录覆盖最 旧记录。
为解决上述技术问题,本发明还提供了一种在嵌入式系统数据库表中删 除记录的方法,包括:
删除记录表中记录,所述记录表为如权利要求1方法创建的记录表;
更新索引表中的当前记录数量,所述索引表为如权利要求1方法创建的 索引表。
进一步地,所述方法还包括:当删除的记录包括记录表中的最旧记录和/ 或最新记录时,更新索引表中的新旧记录信息。
进一步地,所述新旧记录信息包括最旧记录标识和最新记录标识;
所述删除的记录包括记录表中的最旧记录时,更新索引表中的新旧记录 信息,包括:更新索引表中的最旧记录标识;
所述删除的记录包括记录表中的最新记录时,更新索引表中的新旧记录 信息,包括:更新索引表中的最新记录标识。
为解决上述技术问题,本发明还提供了一种创建嵌入式系统数据库表的 装置,包括记录表创建模块、资源分配模块和索引表创建模块,其中:
所述记录表创建模块,用于为每一类记录创建一个记录表,每个记录表 包括新旧程度标识字段,所述新旧程度标识用于标识各条记录的新旧程度;
所述资源分配模块,用于为每个记录表分配最大记录数量;
所述索引表创建模块,用于创建索引表,所述索引表中保存一个或多个 记录表的记录信息,所述记录信息包括:记录表标识,记录表的新旧记录信 息,以及记录表的当前记录数量。
为解决上述技术问题,本发明还提供了一种在嵌入式系统数据库表中存 储记录的装置,包括读取模块、判断模块、未存满处理模块和存满处理模块, 其中:
所述读取模块,用于在将待存入记录存入记录表时,从该记录表对应的 索引表中读取该记录表的当前记录数量;
所述判断模块,用于根据所述读取模块读取的当前记录数量判断该记录 表是否已存满;
所述未存满处理模块,用于在所述判断模块判断该记录表未存满时,将 该待存入记录作为一条新纪录写入记录表,更新索引表中该记录表的新旧记 录信息和当前记录数量;
所述存满处理模块,用于在所述判断模块判断该记录表已存满时,根据 索引表中该记录表的新旧记录信息找到旧记录,用待存入记录覆盖旧记录, 更新索引表中该记录表的新旧记录信息。
进一步地,所述判断模块根据当前记录数量判断该记录表是否已存满, 包括:判断当前记录数量是否大于等于该记录表的最大记录数量,如果是, 表示已存满,如果不是,表示未存满。
进一步地,所述记录表的新旧记录信息包括最旧记录标识和最新记录标 识;
所述未存满处理模块更新索引表中该记录表的新旧记录信息和当前记录 数量,包括:更新索引表中该记录表的最新记录标识和当前记录数量;
所述存满处理模块根据索引表中该记录表的新旧记录信息找到旧记录, 包括:根据最旧记录标识找到最旧记录;
所述存满处理模块更新索引表中该记录表的新旧记录信息,包括:更新 索引表中该记录表的最旧记录标识和最新记录标识。
进一步地,所述存满处理模块用待存入记录覆盖旧记录,包括:用待存 入记录覆盖最旧记录。
为解决上述技术问题,本发明还提供了一种在嵌入式系统数据库表中删 除记录的装置,包括删除模块和索引表更新模块,其中:
所述删除模块,用于删除记录表中记录;
所述索引表更新模块,用于更新索引表中的当前记录数量。
进一步地,所述索引表更新模块还用于在所述删除模块删除的记录包括 记录表中的最旧记录和/或最新记录时,更新索引表中的新旧记录信息。
进一步地,所述新旧记录信息包括最旧记录标识和最新记录标识;
所述删除模块删除的记录包括记录表中的最旧记录时,所述索引表更新 模块更新索引表中的新旧记录信息,包括:更新索引表中的最旧记录标识;
所述删除模块删除的记录包括记录表中的最新记录时,所述索引表更新 模块更新索引表中的新旧记录信息,包括:更新索引表中的最新记录标识。
为解决上述技术问题,本发明还提供了一种在嵌入式系统数据库表中处 理数据的装置,包括上述存储记录装置和删除记录装置。
本发明实施例方法和装置在不增加任何硬件成本的前提下,在嵌入式数 据库系统应用数据库,一方面,表的创建、数据循环覆盖保存以及删除处理, 能够提高嵌入式系统数据库的数据处理效率,特别是循环覆盖保存可以有效 解决嵌入式系统存储空间有限,存储空间利用率低下的问题。另一方面,通 过在嵌入式系统中应用数据库,可以解决查询功能算法复杂的技术问题,实 现嵌入式系统可靠的数据存储和强大的查询功能。
附图说明
图1为实施例1创建记录表和索引表的流程图;
图2为记录表和索引表结构及对应关系示意图;
图3为创建表装置结构示意图;
图4为实施例2存储记录流程图;
图5为存储空间未满时保存记录后记录表和索引表的内容示意图;
图6为存储空间满时保存记录后记录表和索引表的内容示意图;
图7为存储记录装置结构示意图;
图8为实施例3删除记录流程图;
图9为删除记录装置结构示意图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下文中将结合附图 对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申 请中的实施例及实施例中的特征可以相互任意组合。
实施例1
本实施例介绍在嵌入式系统数据库中创建表的方法,如图1所示,包括 以下步骤110-130:
步骤110,为每一类记录创建一个记录表,每个记录表包括新旧程度标 识字段,所述新旧程度标识用于标识各条记录的新旧程度;
记录的类由系统需要保存的记录类型进行区分;
新旧程度标识字段例如是记录序号字段,可设置记录序号越小表明该条 记录越早即越旧,记录序号越大表明该记录越新,记录表中序号最小的记录 即是最旧记录,序号最大的记录则是最新记录;
步骤120,为每个记录表分配最大记录数量;
具体地,根据存储空间大小为每个记录表分配最大记录数量;
步骤130,创建索引表,所述索引表中保存一个或多个记录表的记录信 息,所述记录信息包括:记录表标识,记录表的新旧记录信息,以及记录表 的当前记录数量。
优选地,该新旧记录信息包括最旧记录标识和最新记录标识。如前所述, 当记录表中的新旧程度标识字段为记录序号时,且序号由小到大对应记录由 旧至新,该最旧记录标识和最新记录标识也即为最小记录序号和最大记录序 号,如图2例所示(由于附图篇幅有限,故图中仅示出记录表的前部)。
根据系统需要保存的记录类型,为每一类记录创建一个记录表,以及为 各记录表创建索引表,此种方法创建的表,在数据处理时效率更高。
实现创建嵌入式系统数据库表的装置,如图3所示,包括记录表创建模 块、资源分配模块和索引表创建模块,其中:
该记录表创建模块,用于为每一类记录创建一个记录表,每个记录表包 括新旧程度标识字段,该新旧程度标识用于标识各条记录的新旧程度;
该资源分配模块,用于为每个记录表分配最大记录数量;
该索引表创建模块,用于创建索引表,该索引表中保存一个或多个记录 表的记录信息,该记录信息包括:记录表标识,记录表的新旧记录信息,以 及记录表的当前记录数量。
实施例2
本实施例介绍在上述创建好的嵌入式系统数据库表中存储记录的方法, 如图4所示,包括以下步骤210-240:
步骤210,将待存入记录存入记录表时,从该记录表对应的索引表中读 取该记录表的当前记录数量;
步骤220,根据当前记录数量判断该记录表是否已存满,如果未存满, 执行步骤230,如果已存满,执行步骤240;
具体地,判断当前记录数量是否大于等于该记录表的最大记录数量,如 果是,表示已存满,如果不是,表示未存满。
步骤230,将该待存入记录作为一条新纪录写入记录表,更新索引表中 该记录表的新旧记录信息和当前记录数量;
记录表的新旧记录信息包括最旧记录标识和最新记录标识;更新索引表 的操作具体包括:更新索引表中该记录表的最新记录标识和当前记录数量。
如前所述,当记录表中的新旧程度标识字段为记录序号时,且序号由小 到大对应记录由旧至新,写入新记录后,为该条新记录分配相应记录序号(例 如是当前最大记录序号加1),更新时更新索引表中该记录表的最大记录序 号。如图5所示,记录表1中写入新记录后,更新索引表中相应信息。
步骤240,根据索引表中该记录表的新旧记录信息找到旧记录,用待存 入记录覆盖旧记录(相当于记录表中的记录更新),更新索引表中该记录表 的新旧记录信息。
记录表的新旧记录信息包括最旧记录标识和最新记录标识;则查找旧记 录的操作具体包括:根据最旧记录标识找到最旧记录;更新索引表的操作具 体包括:更新索引表中该记录表的最旧记录标识和最新记录标识。
当记录表中的新旧程度标识字段为记录序号时,且序号由小到大对应记 录由旧至新,则最旧记录标识为最小记录序号,最新记录标识为最大记录序 号。待存入纪录覆盖旧记录后,为该条新写入记录分配相应记录序号,例如 为当前最大记录序号加1。如图6所示,记录表1中用新记录7覆盖了旧记 录1,更新索引表中相应记录序号。
优选地,用待存入记录覆盖记录表中的最旧记录,但也不排除最旧记录 因某种原因需要保留,覆盖的记录为除最旧记录外的其他旧记录。
此外,查找到的旧记录优选为要覆盖的旧记录,但也不排除查找到的旧 记录与覆盖的旧记录不为同一记录的情况,例如查找到某条旧记录,但因某 种原因该旧记录不能覆盖(例如设置有某种不能覆盖标识),则可以通过向 前或向后寻找其他可覆盖的旧记录进行覆盖。
通过存满时覆盖旧记录可实现数据库的数据循环覆盖保存功能。
采用上述方法保存记录,不仅效率高,且由于采用覆盖保存的方式,可 以解决嵌入式系统存储空间有限的问题。
实现在嵌入式系统数据库表中存储记录的装置,如图7所示,包括读取 模块、判断模块、未存满处理模块和存满处理模块,其中:
该读取模块,用于在将待存入记录存入记录表时,从该记录表对应的索 引表中读取该记录表的当前记录数量;
该判断模块,用于根据该读取模块读取的当前记录数量判断该记录表是 否已存满;
该未存满处理模块,用于在该判断模块判断该记录表未存满时,将该待 存入记录作为一条新纪录写入记录表,更新索引表中该记录表的新旧记录信 息和当前记录数量;
该存满处理模块,用于在该判断模块判断该记录表已存满时,根据索引 表中该记录表的新旧记录信息找到旧记录,用待存入记录覆盖旧记录,更新 索引表中该记录表的新旧记录信息。
优选地,该判断模块采用以下方式判断该记录表是否已存满:判断当前 记录数量是否大于等于该记录表的最大记录数量,如果是,表示已存满,如 果不是,表示未存满。
上述记录表的新旧记录信息包括最旧记录标识和最新记录标识。未存满 处理模块更新索引表中该记录表的最新记录标识和当前记录数量。存满处理 模块根据最旧记录标识找到最旧记录,覆盖最旧记录,更新索引表中该记录 表的最旧记录标识和最新记录标识。
实施例3
本实施例介绍在上述创建好的嵌入式系统数据库表中删除记录的方法, 如图8所示,包括以下步骤310-320:
步骤310,删除记录表中记录;
此处所述记录表为实施例1中创建的记录表。
步骤320,更新索引表中的当前记录数量。
此处所述索引表为实施例1中创建的索引表。
优选地,在步骤310中,如果删除记录表中非最旧、非最新记录,则仅 需更新索引表中的当前记录数量。如果删除的记录包括记录表中的最旧记录 和/或最新记录,则还要更新索引表中的新旧记录信息,例如相应更新索引表 中的最旧记录标识和/或最新记录标识。
简言之,删除记录时,需要将索引表中的内容更新为与记录表状态相一 致。采用此种删除方法,保证索引表与记录表的对应一致,方便查询和后续 存储处理。
实现在嵌入式系统数据库表中删除记录的装置,如图9所示,包括删除 模块和索引表更新模块,其中:
该删除模块,用于删除记录表中记录;
该索引表更新模块,用于更新索引表中的当前记录数量。
优选地,该索引表更新模块还用于在删除模块删除的记录包括记录表中 的最旧记录和/或最新记录时,更新索引表中的新旧记录信息。具体例如:删 除的记录包括记录表中的最旧记录,索引表更新模块更新索引表中的最旧记 录标识;删除的记录包括记录表中的最新记录,索引表更新模块更新索引表 中的最新记录标识。
上述实施例1、2、3中的装置可以合一设置,或者实施例2、3中的装置 合一设置。合一设置是指上述装置设置在同一个装置中。
应用示例
某公司生产的某种型号监控平台,主要用于通信组合电源、太阳能和UPS 监控,历史记录存储空间是64Mbytes,为了将来的功能扩展,需要预留20% 的存储空间,也就是说用于存储历史记录的空间是51M左右。而监控平台需 要保存的历史记录主要有历史数据5000条,历史告警记录、历史事件记录、 电池测试记录、电池放电记录、电池充电记录和系统人工维护记录等各10000 条。监控需要提供这些记录按时间段查询功能,每类记录清除功能(清除某类 记录的所有记录),为了满足这些需求,采用上述实施例方案,数据库采用的 是sqlite嵌入式开源数据库。
创建数据库表的具体实现步骤如下:
根据系统需要保存的记录类型,在数据库中创建HisData、HisAlm、 HisEvent、BattTestRec、BattEquRec、BattDischRec、MaintainRec等表,分别 用于保存历史数据、历史告警、历史事件、电池测试、电池充电、电池放电 和人工维护等记录,各个表的详细设计见表1至表7所示;
结合用户需求和存储空间情况,历史数据最大记录数量设定为5000条, 其它记录的最大记录数量都设定为10000条;
创建索引表Power_Seq,用于记录各个记录表的存储情况,索引表 Power_Seq的结构设计见表8,索引表Power_Seq的初始内容见表9;
为了实现索引表对记录表不同处理的响应,分别设置插入触发器、更新 触发器和删除触发器如下:
分别为每个记录表的插入操作创建一个触发器,一个记录表对应一个插 入操作触发器,插入触发器的动作是在每插入一条新记录后,自动把索引表 Power_Seq中相应记录表的最大序号MaxSeq和当前记录数量Num各加1。 共创建7个插入触发器。
分别为每个记录表的更新操作创建一个触发器,一个记录表对应一个更 新操作触发器,更新触发器的动作是在每覆盖一条记录后,自动把索引表 Power_Seq中相应记录表的最小序号MinSeq和最大序号MaxSeq各加1。共 创建7个更新触发器。
分别为每个记录表的删除操作创建一个触发器,一个记录表对应一个删 除操作触发器,删除触发器的动作是在每次删除记录后,自动设置索引表 Power_Seq中相应记录表的Num,如果删除的包括最旧记录,则自动将 MinSeq加1,如果删除的包括最新记录,则自动将MaxSeq减1。如果删除 该记录表中的所有记录,则自动把索引表Power_Seq中相应记录表的MinSeq 设置为1,MaxSeq设置为0,Num设置为0。共创建7个删除触发器。
保存数据库表的具体实现步骤如下:
要保存记录时,先从索引表Power_Seq中读取该记录表的MinSeq、 MaxSeq和Num,如果Num小于最大记录数量(历史数据最大记录数量是 5000条,其它记录的最大记录数量是10000条),则通过插入操作新增一条 记录,新增记录的记录序号RecSN为MaxSeq+1,新增记录的其它字段则是 要保存的记录内容,同时插入触发器完成索引表的修改;如果Num不小于最 大记录数量,则根据MinSeq找到记录表中最早的记录,通过更新操作更新 该条记录的各个字段,更新后的记录序号RecSN为MaxSeq+1,而其它字段 则是要保存的记录内容,同时更新触发器完成索引表的修改。
表1历史数据记录表(HisData)结构
表2历史告警记录表(HisAlm)结构
表3历史事件记录表(HisEvent)结构
表4电池测试记录表(BattTestRec)结构
表5电池均充记录表(BattEquRec)
表6电池放电记录表(BattDischRec)结构
表7人工维护记录表(MaintainRec)结构
表8索引表(Power_Seq)结构
表9索引表(Power_Seq)内容
经系统测试发现,该监控平台系统在满配置并且存满所有历史记录的情 况下,占用存储空间为36.1M,监控系统正常工作情况下,查询一条记录的 时间大约在30ms左右。可见通过采用本发明的技术方案,监控平台很好解 决了存储空间有限,存储空间利用率低下、查询功能算法复杂等技术难题, 从而实现嵌入式系统可靠的数据存储、高效的存储空间利用和强大的查询功 能。
本领域普通技术人员可以理解上述方法中的全部或部分步骤可通过程序 来指令相关硬件完成,所述程序可以存储于计算机可读存储介质中,如只读 存储器、磁盘或光盘等。可选地,上述实施例的全部或部分步骤也可以使用 一个或多个集成电路来实现。相应地,上述实施例中的各模块/单元可以采用 硬件的形式实现,也可以采用软件功能模块的形式实现。本发明不限制于任 何特定形式的硬件和软件的结合。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的 情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形, 但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
机译: 具有用于管理由此记录的数据流的再现的数据结构的记录介质以及记录和重删方法和装置
机译: 具有用于管理由此记录的数据流的再现的数据结构的记录介质以及记录和重删方法和装置
机译: 软件提供系统,纠删信息提供系统,提供软件的方法,中等记录软件提供程序,提供删减信息的方法以及记录中等记录删减信息提供程序