一种家庭网关上内存数据库的实现方法

文档序号:6464628阅读:268来源:国知局
专利名称:一种家庭网关上内存数据库的实现方法
技术领域
本发明涉及家庭网络系统,尤其涉及一种基于嵌入式系统的家庭网关上内存数据库 的实现方法。
背景技术
目前,关于数字家庭网络的讨论已经从理论探讨逐渐到了现实生活中,在这一轮的 数字化、宽带化浪潮中,家庭网关作为联接所有外部公共网络与家庭内部网络之间的桥 梁,在宽带网络中扮演重要角色。各种基于家庭网关的增值业务,例如,IPTV、智能家 居、V0IP、 IM即时消息等业务都逐渐开展并走入家庭。基于成本和业务开展的需要,家 庭网关多采用嵌入式系统,且由于基于家庭网关上开展业务的复杂性和实时性,家庭网 关上有时也需要对本地业务信息进行实时访问和存储。由于嵌入式系统在时间和空间上的资源有限,不可能将需要消耗大量资源和空间的 大型业务数据库系统,例如sybase、 oracle等部署在家庭网关上。而其他嵌入式实时 数据库,如Berkeley DB学习难度大,且需要对磁盘进行操作,影响系统实时性。SQLite虽然实现了数据库系统的大部分特征,如支持视图、触发器、事务、支持嵌 套SQL等,但这些功能有些在基于家庭网关的业务中根本不需要,增加了对有限资源的 占用。专利申请号为200510018318.3的发明"一种嵌入式环境下数据字典的实现方法" 公开了一种嵌入式环境下数据字典的实现方法,其按照层次结构将数据库、表和列的对 象及其属性存储在系统缓冲区中,分为数据库、表或索引和列三层,采用开链式哈希法 对数据库对象进行索引, 一级哈希表以数据库名称为散列关键字,二级哈希表以表名称 为关键字,三级哈希表以列名称为散列关键字,他实现了内存数据字典的存储和操作, 但写操作还是要和磁盘外设进行交互,影响系统的实时性,且存储层次为三层,系统査 询时间消耗较大。基于上述分析,为了在家庭网关上有限的资源中开展更多的业务,需要根据业务需 求开发一种即轻量又能满足家庭网络业务实时性要求的内存数据库,该数据库中的数据 还是来自具体业务的数据库,但是存储在家庭网关上共享内存中,这样就直接对此共享内存访问,极大的提高了数据访问的实时性。 发明内容本发明所要解决的技术问题是提供一种家庭网关上内存数据库的实现方法,以满 足家庭网关上开展家庭网络业务访问数据的实时性的发展需要,解决业务数据的一定生 命周期存储和査询功能。一种家庭网关上内存数据库的实现方法,家庭网关包括业务终端、内存数据库、嵌 入式操作系统,家庭网关通过数据库代理与业务数据库相连,其特征在于该方法包括 以下步骤步骤1.初始化内存数据库表和记录的存储结构和队列;步骤2.在建立内存数据库存储结构的基础上,通过统一的数据访问接口把业务数据 库中的业务数据加载到家庭网关上的内存数据库中,在加载业务数据之前进行业务数据 的过滤;步骤3.当业务数据库的业务数据更新时,同步线程先将内存数据库中已有的业务数 据进行备份,然后调用统一的数据访问接口进行业务数据词步,将更新后的业务数据加 载到内存数据库中,同步成功后再将备份的业务数据清除;步骤4.家庭网关的业务终端通过统一的数据访问接口对内存数据库进行查询,内存 数据库通过统一的数据访问接口进行业务数据的加载和同步。初始化内存数据库表和记录的存储结构和队列的步骤还包括,内存数据库的表和记 录信息通过二级散列表存储,第一级散列表存储表信息,第二级散列表存储表的记录信 息,且通过一个全局指针数组变量访问全部记录信息。散列函数产生的冲突序列通过一个双向链表存储,双向链表的头指针通过全局指针 数组变量获取。加载业务数据的步骤还包括通过XML配置文件配置所要加载的业务数据,XML配 置文件对所加载的业务类型和表进行动态控制。同步业务数据的步骤还包括业务平台通过数据库代理操作业务数据库,当使业务 数据库中的数据发生变化时,通过数据库代理通知内存数据库的业务数据同步线程进行 数据同步。在业务数据同步开始前,将所要更新的表记录保存到XML文件中进行备份,然后通过统一的数据访问接口对内存数据库进行更新,如果成功,则删除临时备份的XML文件;如果失败,则从备份的XML文件中恢复表数据。在对业务数据的一个或多个表进行更新时,对要进行更新的表的访问进行锁定,禁 止访问要进行更新的表,待业务数据的同步完成后,解除锁定,允许对表进行访问。当业务终端需要访问内存数据库中的业务数据时,首先将访问业务数据所要执行的操作组装为SQL语句,并加入SQL语句执行队列,数据处理线程从SQL语句执行队列 中取出SQL语句进行解析处理后,将处理结果放入SQL语句执行结果队列,然后业务 终端通过SQL语句执行结果队列获取所需要的数据。业务终端只能对内存数据进行査询操作,而业务数据的加载和同步能够对内存数据 库进行添加、删除和修改操作。本发明的有益效果为-内存数据库的存储结构采用了两级散列表,所有的表信息采用第一级散列表的方式 统一进行存储,所有的记录信息利用第二级的散列表进行存储,这样对表的访问速度更 快。对外提供一个全局变量(指针数组),这样可以通过全局变量访问散列表的每条记录。通过全局变量g—MemCoimt表示当前正在访问内存数据库的线程数,这样保证在数 据访问时数据安全性。在数据加载、同步、查询时,通过SQL语句执行队列和SQL语句执行结果队列保证 数据访问的并发性,当前业务终端只要对这两个队列进行操作就可以获取数据。对内存 数据库的操作由专门的数据处理线程执行。通过同步线程的及时更新,保证了内存数据库和业务数据库的一致性,同时提供同 步备份功能,当同步失败时,可以恢复以前的数据,对业务的运行没有影响。通过统一的数据访问接口,大大简化了对程序的开发,縮短了开发周期。当系统重启后,可以通过加载模块实现对数据的快速自动加载,保证了基于家庭网 关业务的正常运行,可以对需要加载的业务和表的名称进行动态配置。


图1是本发明内存数据库的存储结构示意图; 图2是本发明内存数据库的实现流程;据库在家庭网关上即时消息业务应用中的总体架构图。
具体实施方式
以下结合附图及具体实施方式
,对本发明进行进一步详细说明。需要说明的是,此 处所描述的具体实施方式
仅仅用以解释本发明,并不用来限定本发明。本发明提供了一种家庭网关上内存数据库的实现方法,主要是把家庭网关上业务终 端需要频繁访问的业务数据直接放在内存数据库中保存,这样极大的提高数据访问效率 和实时性。首先,初始化内存数据库中存储数据库表和记录的存储结构,初始化SQL语句执行 队列和执行结果队列。内存数据库的存储结构采用了二级散列表存储的方式,内存数据库中所有的表信息 在一级散列表中统一进行存储,每个表中所有的记录的数据存储在第二级的散列表中, 该内存数据库的存储结构如图1。散列函数定义为对某合适的素数取余运算,对产生的 冲突序列采用双向链表来存放。用一个指针数组来存放一级散列表的每项元素的首地 址,对外提供一个全局变量(指针数组),以便访问表信息的每个元素;又在每个表的 结构中,存放了一个数据成员,定义为存储记录数据的二级散列表的各元素地址构成的 指针数组。同时设置一个全局计数器变量g—memCount,表示当前正在访问内存数据库的 线程数。图1是本发明内存数据库的表和记录的存储结构,一级散列表存储Tablel,Table2, Table3和Table5的信息。Table2经过散列函数计算后,存储位置是一级散列表的3号 位置。Tablel, Table3和Table5经过散列函数计算后,存储位置都是一级散列表的0 号位置,存储位置发生冲突,本发明利用双向链表来解决散列函数位置冲突问题, Tablel, Table3和Table5利用双向链表连接于一级散列表的0号位置。由于散列函数 按顺序进行散列计算,所以Tablel存储在双向链表靠近一级散列表的0号位置的一端, 有利于提高査询速度。所属技术领域的技术人员应该了解,冲突的表或记录的排列顺序 并不限于此种排列方式。Tablel, Table2, Table3和Table5分别具有用于存储记录的二级散列表,二级散 列表存储记录的信息,Table2的记录Recordl, Record3, Record4和Record5的信息存 储在Table2的二级散列表中。Record2经过散列函数计算后,存储位置是二级散列表的 6号位置。Recordl, Record3和Record5经过散列函数计算后,存储位置都是二级散列表的0号位置,存储位置发生冲突,本发明利用双向链表来解决散列函数位置冲突问题, Recordl, Record3和Record5利用双向链表连接于二级散列表的0号位置。图1中所描述的一级散列表存储表信息,通过一个全局指针数组指向每个散列元素 的首地址,在每个表信息结构中,又通过pRecordPtr[]指针数组成员,指向存储记录信 息的二级散列表的各元素地址构成的指针数组。对于散列函数产生的冲突系列,通过双 向链表进行存储,这样的存储结构,对数据量较小(一千条以下)的数据查询,其査询 时间可以基本忽略。然后,在建立数据存储结构的基础上,进行业务数据的加载,通过统一的数据访问 接口,把业务数据库中的业务数据通过数据库代理加载到家庭网关上的内存数据库中, 在加载业务数据的同时检查配置文件,对需要加载的业务数据进行过滤和筛选。在加载业务数据到内存数据库的时候,通过数据加载线程读取XML配置文件中的信 息,获取需要加载到内存数据库中的业务类型和表名称,并通过数据库代理获取所需要 的业务数据,对每条数据进行SQL语句组装后,将该条数据加载请求加入SQL语句执行 队列,数据处理线程随时检查SQL语句执行队列中是否有记录,如果有,从SQL语句执 行队列中取出SQL语句,通过统一的数据访问接口进行解析执行后,将业务数据装入内 存数据库中,同时将处理结果放入SQL语句执行结果队列,将SQL语句执行队列中的该 条记录删除。内存数据库与业务数据库可以进行业务数据的同步,当业务数据库中的业务数据进 行了更新后,内存数据库先对已有业务数据进行备份,然后通过同步线程调用统一的数 据访问接口进行业务数据同步,同步成功后再将备份数据清除。当业务平台对在业务数据库中的业务数据进行了更新后,通过数据库代理发送消息 到家庭网关的业务数据同步线程中,首先,同步线程设置内存数据库中需要更新的表为 不可访问模式,同时检测全局计数器变量g—MemCount是否为0,若为0,则当前正在访 问内存数据库的线程数为0,可以进行数据同步操作。在更新内存数据库的所述表之前, 先把内存数据库中的需要更新的表数据备份到XML文件中,如果更新成功,将备份数据 文件删除;否则,通过XML文件恢复备份数据。在更新内存数据库成功后,将内存数据 库所更新的表设置为可访问模式,同时释放相关资源。业务数据同步更新的过程中,优选的方式为,为了提高内存数据库的实时性,在业 务数据的同步更新过程中,不检测全局计数器变量g—MemCount是否为0,允许在同步更 新的过程中其他线程对数据库中不需要更新的表进行访问。同步线程设置内存数据库中需要更新的表为不可访问模式,然后与业务数据库进行业务数据同步,更新内存数据库 的所述表。其中,所述需要更新的表为1个或多个。其中,备份的方式还可以是备份内存数据库中的所有业务数据。内存数据库提供统一的数据访问接口,运行于家庭网关上的业务终端通过内存数据 库提供统一的数据访问接口访问内存数据库,统一的数据访问接口提供对内存数据库表 的添加、删除、修改、查询等功能,在数据加载、同步、数据访问时都使用统一的数据 访问接口。数据访问通过统一的数据访问接口进行,当业务终端需要访问内存数据库中的业务 数据时,首先将访问业务数据所要执行的操作组装为SQL语句,并加入SQL语句执行队 列,数据处理线程从SQL语句执行队列中取出SQL语句进行解析处理后,将处理结果放 入SQL语句执行结果队列,然后业务终端通过SQL语句执行结果队列获取所需要的数据。图2是本发明内存数据库的实现流程,包括如下步骤步骤IOI,家庭网关启动后,首先初始化数据库的表和记录的存储结构,完成共享 内存的申请,初始化全局指针数组,初始化SQL语句执行队列和SQL语句执行结果队列。步骤102,加载业务数据库中的业务数据到内存数据库,首先,业务数据库通过数 据库代理把需要装入内存数据库中业务数据通过Socket链接发送到内存数据库的业务 数据加载线程,内存数据库通过加载线程完成业务数据的装载,其中,在业务数据加载 之前,加载线程通过读取XML配置文件中的配置,对具体业务所需要的表进行有选择 性过滤和筛选。步骤103,当内存数据库的业务数据加载完毕后,家庭网关上的业务终端通过统一 的数据访问接口访问内存数据库,该数据访问接口和数据同步、加载时的接口一致。当 所访问的表为可访问标志时,则首先将所执行的操作组装为SQL语句,并加入SQL语 句执行队列,然后数据处理线程从SQL语句执行队列中取出SQL语句进行解析处理后, 将处理结果放入SQL语句执行结果队列,业务终端通过SQL语句执行结果队列获取查 询的结果数据。步骤104,检査数据表的访问标志,当业务终端所需要访问的表为不可访问时,业 务终端所需要访问的表数据不是最新的表数据,该表正在和业务数据库进行业务数据的 同步,需要等业务数据同步后,再进行数据访问。步骤105,当业务终端所需要访问的表为不可访问时,内存数据库正通过业务数据同步线程进行业务数据的同步,当业务平台通过数据库代理对业务数据库进行了更新 时,数据库代理同时将此更新消息发给内存数据库的业务数据同步线程,该线程把发生改变的表置为不可访问标志,同时将所要更新的表保存到XML文件中进行备份,然后 通过统一的数据访问接口对内存数据库进行更新,如果成功,则删除临时备份的XML 文件,如果失败,则数据可以从XML文件中恢复,这样保证了内存数据的完整性和安 全性。步骤106,业务终端读取内存数据后,进行后续的业务执行。 图3为本发明内存数据库在家庭网关上IM即时消息业务应用中的系统结构图, 系统包括IM即时消息业务平台,Sip服务器,家庭网关,数据代理和业务数据库。 其中,IM即时消息业务平台包括IM服务器,Presence服务器,群组服务器和业务支持系统。IM即时消息业务平台与SIP服务器和数据库代理进行通信。家庭网关包括即时消息业务终端、内存数据库、嵌入式操作系统等。内存数据库通过数据库代理与业务数据库进行业务数据的同步、加载。内存数据库应用于家庭网关业务中的具体操作步骤如下步骤l:首先在嵌入式家庭网关上安装IM即时消息终端和内存数据库,并在配置 文件中配置业务类型为IM,配置需要加载的到内存数据库中表的名称,例如,friendlist (好友列表)。步骤2 :当内存数据库启动后,首先从XML配置文件中读取需要装载的业务类型 和表的名称,然后通过数据库代理从IM即时消息的业务数据库中获取好友表,加载到 内存数据库存储结构的散列表中。步骤3:当用户利用家庭网关上的IM即时消息终端通过SIP服务器和其他网关的 用户进行即时消息通信时,通过统一的数据访问接口访问内存数据库中的好友的信息, 例如,名称、呢称、在线信息等。步骤4:当IM即时消息业务平台通过数据库代理对业务数据库的业务数据进行更 新时,例如,增加、删除好友,对好友列表friendlist进行了更新后,业务数据库通过数 据库代理通知家庭网关的内存数据库。步骤5:当内存数据库接收到业务数据库的表更新消息时,立即设置该表为不可访 问模式,同时启动业务数据同步线程,对该表进行更新。更新完毕,设置该表为可访问 模式。
权利要求
1、一种家庭网关上内存数据库的实现方法,家庭网关包括业务终端、内存数据库、嵌入式操作系统,家庭网关通过数据库代理与业务数据库相连,其特征在于,该方法包括以下步骤步骤1.初始化内存数据库表和记录的存储结构和队列;步骤2.在建立内存数据库存储结构的基础上,通过统一的数据访问接口把业务数据库中的业务数据加载到家庭网关上的内存数据库中,在加载业务数据之前进行业务数据的过滤;步骤3.当业务数据库的业务数据有更新时,同步线程先将内存数据库中已有的业务数据进行备份,然后调用统一的数据访问接口进行业务数据的同步,将更新后的业务数据加载到内存数据库中,同步成功后再将备份的业务数据清除;步骤4.家庭网关的业务终端通过统一的数据访问接口对内存数据库进行查询,内存数据库通过统一的数据访问接口进行业务数据的加载和同步。
2、 如权利要求1所述的方法,其特征在于,歩骤1还包括,内存数据库的表和记 录信息通过二级散列表存储,第一级散列表存储表信息,第二级散列表存储表的记录信 息,且通过一个全局指针数组变量访问全部记录信息。
3、 如权利要求2所述的方法,其特征在于,散列函数产生的冲突序列通过一个双 向链表存储,双向链表的头指针通过全局指针数组变量获取。
4、 如权利要求l所述的方法,其特征在于,步骤2还包括通过XML配置文件配置 所要加载的业务数据,XML配置文件对所加载的业务类型和表进行动态控制。
5、 如权利要求1所述的方法,其特征在于,步骤3还包括,当业务平台通过数据 库代理操作业务数据库,使业务数据库中的业务数据发生变化时,通过数据库代理通知 内存数据库的数据同步线程进行业务数据同步。
6、 如权利要求5所述的方法,其特征在于,在业务数据的同步开始前,将所要更 新的表记录保存到XML文件中进行备份,然后通过统一的数据访问接口对内存数据库进 行更新,如果成功,则删除临时备份的XML文件;如果失败,则从备份的XML文件中恢 复表数据。
7、 如权利要求5所述的方法,其特征在于,在对业务数据的一个或多个表进行更 新时,对需要更新的表进行锁定,业务数据的同步完成后,解除锁定,允许对表进行访问。
8、 如权利要求5所述的方法,其特征在于,步骤3还包括,在同步业务数据开始 前,将所有的业务数据保存到XML文件中进行备份,然后通过统一的数据访问接口对内 存数据库进行更新,如果成功,则删除临时备份的XML文件;如果失败,则从备份的XML 文件中恢复业务数据。
9、 如权利要求1-8任一项所述的方法,其特征在于,当业务终端需要访问内存数 据库中的业务数据时,首先将访问业务数据所要执行的操作组装为SQL语句,并加入 SQL语句执行队列,数据处理线程从SQL语句执行队列中取出SQL语句进行解析处理 后,将处理结果放入SQL语句执行结果队列,然后业务终端通过SQL语句执行结果队 列获取所需要的数据。
10、 如权利要求l-9任一项所述的方法,其特征在于,业务终端只能对内存数据进 行查询操作,而业务数据的加载和同步能够对内存数据库进行添加、删除和修改操作。
全文摘要
本发明公开了一种家庭网关上内存数据库的实现方法,该方法包括1.初始化内存数据库中数据表和记录的存储结构和队列;2.在建立内存数据库存储结构的基础上,业务数据库中的业务数据被加载到家庭网关上的内存数据库中,在加载业务数据之前进行业务数据的过滤;3.数据同步,当业务数据库中的数据改变时,首先对内存数据库中已有数据进行备份,然后通过同步模块进行同步,同步成功将备份数据清除;4.数据访问,提供内存数据库的统一访问接口,如查询、添加、删除,修改等。所述的实现方法与现有的内存数据库实现方法相比,所需资源少、数据存取效率高,非常适合于对数据实时性要求高的基于家庭网关开展的业务应用。
文档编号G06F17/30GK101329685SQ20081011737
公开日2008年12月24日 申请日期2008年7月30日 优先权日2008年7月30日
发明者刘会松, 李明春 申请人:烽火通信科技股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1