著录项信息
专利名称 | 一种家庭网关上内存数据库的实现方法 |
申请号 | CN200810117377.X | 申请日期 | 2008-07-30 |
法律状态 | 授权 | 申报国家 | 暂无 |
公开/公告日 | 2008-12-24 | 公开/公告号 | CN101329685 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0查看分类表>
|
申请人 | 烽火通信科技股份有限公司 | 申请人地址 | 湖北省武汉市洪山区邮科院路88号
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 烽火通信科技股份有限公司 | 当前权利人 | 烽火通信科技股份有限公司 |
发明人 | 李明春;刘会松 |
代理机构 | 北京宇生知识产权代理事务所(普通合伙) | 代理人 | 倪骏 |
摘要
本发明公开了一种家庭网关上内存数据库的实现方法,该方法包括:1、初始化内存数据库中数据表和记录的存储结构和队列;2、在建立内存数据库存储结构的基础上,业务数据库中的业务数据被加载到家庭网关上的内存数据库中,在加载业务数据之前进行业务数据的过滤;3、数据同步,当业务数据库中的数据改变时,首先对内存数据库中已有数据进行备份,然后通过同步模块进行同步,同步成功将备份数据清除;4、数据访问,提供内存数据库的统一访问接口,如查询、添加、删除,修改等。所述的实现方法与现有的内存数据库实现方法相比,所需资源少、数据存取效率高,非常适合于对数据实时性要求高的基于家庭网关开展的业务应用。
1.一种家庭网关上内存数据库的实现方法,家庭网关包括业务终端、内存数据库、嵌入式操作系统,家庭网关通过数据库代理与业务数据库相连,其特征在于,该方法包括以下步骤:
步骤1、初始化内存数据库的表和记录的存储结构和队列,初始化SQL语句执行队列和SQL语句执行结果队列;
步骤2、在建立内存数据库存储结构的基础上,通过统一的数据访问接口把业务数据库中的业务数据加载到家庭网关上的内存数据库中,在加载业务数据之前进行业务数据的过滤;
步骤3、当业务数据库的业务数据有更新时,同步线程先将内存数据库中已有的业务数据进行备份,然后调用统一的数据访问接口进行业务数据的同步,将更新后的业务数据加载到内存数据库中,同步成功后再将备份的业务数据清除;
步骤4、家庭网关的业务终端通过统一的数据访问接口对内存数据库进行查询,内存数据库通过统一的数据访问接口进行业务数据的加载和同步。
2.如权利要求1所述的方法,其特征在于,步骤1还包括,内存数据库的表和记录信息通过二级散列表存储,第一级散列表存储表信息,第二级散列表存储表的记录信息,且通过一个全局指针数组变量访问全部记录信息。
3.如权利要求2所述的方法,其特征在于,散列函数产生的冲突序列通过一个双向链表存储,双向链表的头指针通过全局指针数组变量获取。
4.如权利要求1所述的方法,其特征在于,步骤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.如权利要求1-8任一项所述的方法,其特征在于,业务终端只能对内存数据库进行查询操作,而业务数据的加载和同步能够对内存数据库进行添加、删除和修改操作。
一种家庭网关上内存数据库的实现方法 \n技术领域\n[0001] 本发明涉及家庭网络系统,尤其涉及一种基于嵌入式系统的家庭网关上内存数据库的实现方法。 \n背景技术\n[0002] 目前,关于数字家庭网络的讨论已经从理论探讨逐渐到了现实生活中,在这一轮的数字化、宽带化浪潮中,家庭网关作为联接所有外部公共网络与家庭内部网络之间的桥梁,在宽带网络中扮演重要角色。各种基于家庭网关的增值业务,例如,IPTV、智能家居、VOIP、IM即时消息等业务都逐渐开展并走入家庭。基于成本和业务开展的需要,家庭网关多采用嵌入式系统,且由于基于家庭网关上开展业务的复杂性和实时性,家庭网关上有时也需要对本地业务信息进行实时访问和存储。 \n[0003] 由于嵌入式系统在时间和空间上的资源有限,不可能将需要消耗大量资源和空间的大型业务数据库系统,例如sybase、oracle等部署在家庭网关上。而其他嵌入式实时数据库,如Berkeley DB学习难度大,且需要对磁盘进行操作,影响系统实时性。 [0004] SQLite虽然实现了数据库系统的大部分特征,如支持视图、触发器、事务、支持嵌套SQL等,但这些功能有些在基于家庭网关的业务中根本不需要,增加了对有限资源的占用。 \n[0005] 专利申请号为200510018318.3的发明“一种嵌入式环境下数据字典的实现方法”公开了一种嵌入式环境下数据字典的实现方法,其按照层次结构将数据库、表和列的对象及其属性存储在系统缓冲区中,分为数据库、表或索引和列三层,采用开链式哈希法对数据库对象进行索引,一级哈希表以数据库名称为散列关键字,二级哈希表以表名称为关键字,三级哈希表以列名称为散列关键字,他实现了内存数据字典的存储和操作,但写操作还是要和磁盘外设进行交互,影响系统的实时性,且存储层次为三层,系统查询时间消耗较大。 [0006] 基于上述分析,为了在家庭网关上有限的资源中开展更多的业务,需要根据业务需求开发一种即轻量又能满足家庭网络业务实时性要求的内存数据库,该数据库中的数据还是来自具体业务的数据库,但是存储在家庭网关上共享内存中,这样就直接对此共享 内存访问,极大的提高了数据访问的实时性。 \n发明内容\n[0007] 本发明所要解决的技术问题是:提供一种家庭网关上内存数据库的实现方法,以满足家庭网关上开展家庭网络业务访问数据的实时性的发展需要,解决业务数据的一定生命周期存储和查询功能。 \n[0008] 一种家庭网关上内存数据库的实现方法,家庭网关包括业务终端、内存数据库、嵌入式操作系统,家庭网关通过数据库代理与业务数据库相连,其特征在于:该方法包括以下步骤: \n[0009] 步骤1、初始化内存数据库中存储数据库表和记录的存储结构和队列; [0010] 步骤2、在建立内存数据库存储结构的基础上,通过统一的数据访问接口把业务数据库中的业务数据加载到家庭网关上的内存数据库中,在加载业务数据之前进行业务数据的过滤; \n[0011] 步骤3、当业务数据库的业务数据更新时,同步线程先将内存数据库中已有的业务数据进行备份,然后调用统一的数据访问接口进行业务数据同步,将更新后的业务数据加载到内存数据库中,同步成功后再将备份的业务数据清除; \n[0012] 步骤4、家庭网关的业务终端通过统一的数据访问接口对内存数据库进行查询,内存数据库通过统一的数据访问接口进行业务数据的加载和同步。 \n[0013] 初始化内存数据库表和记录的存储结构和队列的步骤还包括,内存数据库的表和记录信息通过二级散列表存储,第一级散列表存储表信息,第二级散列表存储表的记录信息,且通过一个全局指针数组变量访问全部记录信息。 \n[0014] 散列函数产生的冲突序列通过一个双向链表存储,双向链表的头指针通过全局指针数组变量获取。 \n[0015] 加载业务数据的步骤还包括通过XML配置文件配置所要加载的业务数据,XML配置文件对所加载的业务类型和表进行动态控制。 \n[0016] 同步业务数据的步骤还包括:业务平台通过数据库代理操作业务数据库,当使业务数据库中的数据发生变化时,通过数据库代理通知内存数据库的业务数据同步线程进行数据同步。 \n[0017] 在业务数据同步开始前,将所要更新的表记录保存到XML文件中进行备份,然后通 过统一的数据访问接口对内存数据库进行更新,如果成功,则删除临时备份的XML文件;如果失败,则从备份的XML文件中恢复表数据。 \n[0018] 在对业务数据的一个或多个表进行更新时,对要进行更新的表的访问进行锁定,禁止访问要进行更新的表,待业务数据的同步完成后,解除锁定,允许对表进行访问。 [0019] 当业务终端需要访问内存数据库中的业务数据时,首先将访问业务数据所要执行的操作组装为SQL语句,并加入SQL语句执行队列,数据处理线程从SQL语句执行队列中取出SQL语句进行解析处理后,将处理结果放入SQL语句执行结果队列,然后业务终端通过SQL语句执行结果队列获取所需要的数据。 \n[0020] 业务终端只能对内存数据进行查询操作,而业务数据的加载和同步能够对内存数据库进行添加、删除和修改操作。 \n[0021] 本发明的有益效果为: \n[0022] 内存数据库的存储结构采用了两级散列表,所有的表信息采用第一级散列表的方式统一进行存储,所有的记录信息利用第二级的散列表进行存储,这样对表的访问速度更快。 \n[0023] 对外提供一个全局变量(指针数组),这样可以通过全局变量访问散列表的每条记录。 \n[0024] 通过全局变量g_MemCount表示当前正在访问内存数据库的线程数,这样保证在数据访问时数据安全性。 \n[0025] 在数据加载、同步、查询时,通过SQL语句执行队列和SQL语句执行结果队列保证数据访问的并发性,当前业务终端只要对这两个队列进行操作就可以获取数据。对内存数据库的操作由专门的数据处理线程执行。 \n[0026] 通过同步线程的及时更新,保证了内存数据库和业务数据库的一致性,同时提供同步备份功能,当同步失败时,可以恢复以前的数据,对业务的运行没有影响。 [0027] 通过统一的数据访问接口,大大简化了对程序的开发,缩短了开发周期。 [0028] 当系统重启后,可以通过加载模块实现对数据的快速自动加载,保证了基于家庭网关业务的正常运行,可以对需要加载的业务和表的名称进行动态配置。 附图说明\n[0029] 图1是本发明内存数据库的存储结构示意图; \n[0030] 图2是本发明内存数据库的实现流程; \n[0031] 图3是本发明内存数据库在家庭网关上即时消息业务应用中的总体架构图。 [0032] 具体实施方式\n[0033] 以下结合附图及具体实施方式,对本发明进行进一步详细说明。需要说明的是,此处所描述的具体实施方式仅仅用以解释本发明,并不用来限定本发明。 [0034] 本发明提供了一种家庭网关上内存数据库的实现方法,主要是把家庭网关上业务终端需要频繁访问的业务数据直接放在内存数据库中保存,这样极大的提高数据访问效率和实时性。 \n[0035] 首先,初始化内存数据库中存储数据库表和记录的存储结构,初始化SQL语句执行队列和执行结果队列。 \n[0036] 内存数据库的存储结构采用了二级散列表存储的方式,内存数据库中所有的表信息在一级散列表中统一进行存储,每个表中所有的记录的数据存储在第二级的散列表中,该内存数据库的存储结构如图1。散列函数定义为对某合适的素数取余运算,对产生的冲突序列采用双向链表来存放。用一个指针数组来存放一级散列表的每项元素的首地址,对外提供一个全局变量(指针数组),以便访问表信息的每个元素;又在每个表的结构中,存放了一个数据成员,定义为存储记录数据的二级散列表的各元素地址构成的指针数组。同时设置一个全局计数器变量g_memCount,表示当前正在访问内存数据库的线程数。 [0037] 图1是本发明内存数据库的表和记录的存储结构,一级散列表存储Table1,Table2,Table3和Table5的信息。Table2经过散列函数计算后,存储位置是一级散列表的3号位置。Table1,Table3和Table5经过散列函数计算后,存储位置都是一级散列表的\n0号位置,存储位置发生冲突,本发明利用双向链表来解决散列函数位置冲突问题,Table1,Table3和Table5利用双向链表连接于一级散列表的0号位置。由于散列函数按顺序进行散列计算,所以Table1存储在双向链表靠近一级散列表的0号位置的一端,有利于提高查询速度。所属技术领域的技术人员应该了解,冲突的表或记录的排列顺序并不限于此种排列方式。 \n[0038] Table1,Table2,Table3和Table5分别具有用于存储记录的二级散列表,二级散列表存储记录的信息,Table2的记录Record1,Record3,Record4和Record5的信息存储在Table2的二级散列表中。Record4经过散列函数计算后,存储位置是二级散列表的6号位置。Record1,Record3和Record5经过散列函数计算后,存储位置都是二级散列 表的0号位置,存储位置发生冲突,本发明利用双向链表来解决散列函数位置冲突问题,Record1,Record3和Record5利用双向链表连接于二级散列表的0号位置。 \n[0039] 图1中所描述的一级散列表存储表信息,通过一个全局指针数组指向每个散列元素的首地址,在每个表信息结构中,又通过pRecordPtr[]指针数组成员,指向存储记录信息的二级散列表的各元素地址构成的指针数组。对于散列函数产生的冲突系列,通过双向链表进行存储,这样的存储结构,对数据量较小(一千条以下)的数据查询,其查询时间可以基本忽略。 \n[0040] 然后,在建立数据存储结构的基础上,进行业务数据的加载,通过统一的数据访问接口,把业务数据库中的业务数据通过数据库代理加载到家庭网关上的内存数据库中,在加载业务数据的同时检查配置文件,对需要加载的业务数据进行过滤和筛选。 [0041] 在加载业务数据到内存数据库的时候,通过数据加载线程读取XML配置文件中的信息,获取需要加载到内存数据库中的业务类型和表名称,并通过数据库代理获取所需要的业务数据,对每条数据进行SQL语句组装后,将该条数据加载请求加入SQL语句执行队列,数据处理线程随时检查SQL语句执行队列中是否有记录,如果有,从SQL语句执行队列中取出SQL语句,通过统一的数据访问接口进行解析执行后,将业务数据装入内存数据库中,同时将处理结果放入SQL语句执行结果队列,将SQL语句执行队列中的该条记录删除。 [0042] 内存数据库与业务数据库可以进行业务数据的同步,当业务数据库中的业务数据进行了更新后,内存数据库先对已有业务数据进行备份,然后通过同步线程调用统一的数据访问接口进行业务数据同步,同步成功后再将备份数据清除。 \n[0043] 当业务平台对在业务数据库中的业务数据进行了更新后,通过数据库代理发送消息到家庭网关的业务数据同步线程中,首先,同步线程设置内存数据库中需要更新的表为不可访问模式,同时检测全局计数器变量g_MemCount是否为0,若为0,则当前正在访问内存数据库的线程数为0,可以进行数据同步操作。在更新内存数据库的所述表之前,先把内存数据库中的需要更新的表数据备份到XML文件中,如果更新成功,将备份数据文件删除;\n否则,通过XML文件恢复备份数据。在更新内存数据库成功后,将内存数据库所更新的表设置为可访问模式,同时释放相关资源。 \n[0044] 业务数据同步更新的过程中,优选的方式为,为了提高内存数据库的实时性,在业务数据的同步更新过程中,不检测全局计数器变量g_MemCount是否为0,允许在同步更新的过程中其他线程对数据库中不需要更新的表进行访问。同步线程设置内存数据库中 需要更新的表为不可访问模式,然后与业务数据库进行业务数据同步,更新内存数据库的所述表。 \n[0045] 其中,所述需要更新的表为1个或多个。 \n[0046] 其中,备份的方式还可以是备份内存数据库中的所有业务数据。 [0047] 内存数据库提供统一的数据访问接口,运行于家庭网关上的业务终端通过内存数据库提供统一的数据访问接口访问内存数据库,统一的数据访问接口提供对内存数据库表的添加、删除、修改、查询等功能,在数据加载、同步、数据访问时都使用统一的数据访问接口。 \n[0048] 数据访问通过统一的数据访问接口进行,当业务终端需要访问内存数据库中的业务数据时,首先将访问业务数据所要执行的操作组装为SQL语句,并加入SQL语句执行队列,数据处理线程从SQL语句执行队列中取出SQL语句进行解析处理后,将处理结果放入SQL语句执行结果队列,然后业务终端通过SQL语句执行结果队列获取所需要的数据。 [0049] 图2是本发明内存数据库的实现流程,包括如下步骤: \n[0050] 步骤101,家庭网关启动后,首先初始化数据库的表和记录的存储结构,完成共享内存的申请,初始化全局指针数组,初始化SQL语句执行队列和SQL语句执行结果队列。 [0051] 步骤102,加载业务数据库中的业务数据到内存数据库,首先,业务数据库通过数据库代理把需要装入内存数据库中业务数据通过Socket链接发送到内存数据库的业务数据加载线程,内存数据库通过加载线程完成业务数据的装载,其中,在业务数据加载之前,加载线程通过读取XML配置文件中的配置,对具体业务所需要的表进行有选择性过滤和筛选。 \n[0052] 步骤103,当内存数据库的业务数据加载完毕后,家庭网关上的业务终端通过统一的数据访问接口访问内存数据库,该数据访问接口和数据同步、加载时的接口一致。当所访问的表为可访问标志时,则首先将所执行的操作组装为SQL语句,并加入SQL语句执行队列,然后数据处理线程从SQL语句执行队列中取出SQL语句进行解析处理后,将处理结果放入SQL语句执行结果队列,业务终端通过SQL语句执行结果队列获取查询的结果数据。 [0053] 步骤104,检查数据表的访问标志,当业务终端所需要访问的表为不可访问时,业务终端所需要访问的表数据不是最新的表数据,该表正在和业务数据库进行业务数据的同步,需要等业务数据同步后,再进行数据访问。 \n[0054] 步骤105,当业务终端所需要访问的表为不可访问时,内存数据库正通过业务数据同步线程进行业务数据的同步,当业务平台通过数据库代理对业务数据库进行了更新时,数据库代理同时将此更新消息发给内存数据库的业务数据同步线程,该线程把发生改变的表置为不可访问标志,同时将所要更新的表保存到XML文件中进行备份,然后通过统一的数据访问接口对内存数据库进行更新,如果成功,则删除临时备份的XML文件,如果失败,则数据可以从XML文件中恢复,这样保证了内存数据的完整性和安全性。 [0055] 步骤106,业务终端读取内存数据后,进行后续的业务执行。 \n[0056] 图3为本发明内存数据库在家庭网关上IM即时消息业务应用中的系统结构图, [0057] 系统包括IM即时消息业务平台,Sip服务器,家庭网关,数据代理和业务数据库。 [0058] 其中,IM即时消息业务平台包括IM服务器,Presence服务器,群组服务器和业务支持系统。IM即时消息业务平台与SIP服务器和数据库代理进行通信。 \n[0059] 家庭网关包括即时消息业务终端、内存数据库、嵌入式操作系统等。内存数据库通过数据库代理与业务数据库进行业务数据的同步、加载。 \n[0060] 内存数据库应用于家庭网关业务中的具体操作步骤如下: \n[0061] 步骤1:首先在嵌入式家庭网关上安装IM即时消息终端和内存数据库,并在配置文件中配置业务类型为IM,配置需要加载的到内存数据库中表的名称,例如,friendlist(好友列表)。 \n[0062] 步骤2:当内存数据库启动后,首先从XML配置文件中读取需要装载的业务类型和表的名称,然后通过数据库代理从IM即时消息的业务数据库中获取好友表,加载到内存数据库存储结构的散列表中。 \n[0063] 步骤3:当用户利用家庭网关上的IM即时消息终端通过SIP服务器和其他网关的用户进行即时消息通信时,通过统一的数据访问接口访问内存数据库中的好友的信息,例如,名称、呢称、在线信息等。 \n[0064] 步骤4:当IM即时消息业务平台通过数据库代理对业务数据库的业务数据进行更新时,例如,增加、删除好友,对好友列表friendlist进行了更新后,业务数据库通过数据库代理通知家庭网关的内存数据库。 \n[0065] 步骤5:当内存数据库接收到业务数据库的表更新消息时,立即设置该表为不可访问模式,同时启动业务数据同步线程,对该表进行更新。更新完毕,设置该表为可访问模式。
法律信息
- 2022-07-15
未缴年费专利权终止
IPC(主分类): G06F 17/30
专利号: ZL 200810117377.X
申请日: 2008.07.30
授权公告日: 2011.05.04
- 2011-05-04
- 2009-02-18
- 2008-12-24
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有引用任何外部专利数据! |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |