一种数据库多表信息初始化方法

文档序号:6539439阅读:114来源:国知局
专利名称:一种数据库多表信息初始化方法
技术领域
本发明涉及数据库设计领域,尤其涉及一种数据库多表信息初始化方法。
背景技术
数据库应用领域中,在信息量较大的情况下,通常采用将一条完整的信息分成多个部分后分别放入不同的数据库表中进行保存的方法,上述不同的数据库表通常被称为数据库多表。为了便于查询,通常在系统开始启动时,对该系统所涉及的数据库多表进行初始化,即通过对数据库多表的读取,将分布于数据库多表中的各部分信息提取出来,从而获得一条完整的信息记录。
在现有的数据库多表信息初始化方法中,通常以各表所保存的数据量为依据,将数据量最大的数据库表确定为主表,将除主表以外的其它数据库表确定为次表。以表1和表2所组成的数据库多表为例,由于表1中包含的数据量比表2中的数据量大,因此将表1确定为主表、表2为次表。

表1

表2参见图1,确定了主表和次表后的现有数据库多表信息初始化方法包括以下步骤步骤101.读取主表信息,形成主表记录集。
本步骤中,使用数据库多表的系统首先对主表进行读取,将主表中的每一行作为一条记录,在自身内存中形成主表记录集。对于表1所示的主表,本步骤所形成的主表记录集包括排列顺序与表1完全相同的8条记录,每条记录中均含有设备名称、版本以及使用协议等信息。
步骤102.读取主表记录集中的首条记录。
本步骤中,使用数据库多表的系统从保存在内存的主表记录集中获取第一条记录。对于由表1形成的主表记录集而言,此时读取到的首条记录为设备名称Dev1、一版本V100、使用协议SNMP。其中,对于使用数据库多表的系统而言,Dev1和V100是已知信息,而SNMP则是未知信息。
步骤103.根据主表记录集中的当前记录,读取各个次表中的信息。
由于当前主表记录中包含有未知信息,而根据建立数据库多表时设定的各表间的关联关系可知,上述未知信息存在于各个次表中,因此本步骤中将当前主表记录中的未知信息作为查询条件,利用数据库查询语句依次查询各个次表。当系统通过数据库查询操作从表2中找到上述未知信息的具体含义后,数据库多表将所找到的未知信息的具体含义作为查询结果,返回给内存。
例如,对于表1所形成的主表记录集中,在当前记录为该主表记录集中的首条记录时,SNMP是未知信息,则将SNMP作为包含在查询语句中的查询条件,对表2进行读取,然后在获取到SNMP的含义是简单网络管理协议后,向内存返回数据库多表查询结果。
步骤104.将当前主表记录和读取到的次表中包含的信息拼装成一条完整的记录。
在完成了本次对次表的读取后,使用数据库多表的系统将当前主表记录中的已知信息与从次表中获取到的未知信息的含义相组合,形成一条完整的记录。仍以表1的首条记录和表2为例,本步骤中将数据库多表返回给内存的简单网络管理协议代入到表1首条记录中的SNMP中,形成内容如下的完整记录设备名称Dev1、版本V100、使用协议为简单网络管理协议。
步骤105~106.判断当前主表记录是否为主表记录集中的尾记录,如果是,则结束本数据库多表信息初始化流程,否则,转向主表记录集中的下一条记录,并返回执行步骤103。
如果当前的主表记录不是主表记录集中的尾记录,则表示主表记录集中还存在未被读取的记录,并且上述未被读取的记录中的未知信息有待于从各个次表中获取;如果当前的主表记录是主表记录集中的尾记录,则表示已完成主表记录集和各个次表的读取,并已形成全部所需的完整记录,即完成了数据库多表信息初始化。
上述步骤101至106组成了现有的数据库多表信息初始化过程。假设数据库多表由主表和n个次表组成,其中主表的行数为m。由上述各步骤可见,在形成主表记录集时,主表中的每一行形成一条主表记录,即形成包含m条记录的主表记录集;而每读取一条主表记录,都要从数据库中将所有的次表读取一次,即读取次表的数据库操作共执行(m×n)次;又考虑到形成主表记录集时对主表的读取,则为完成数据库多表信息初始化而需要读取数据库的次数为(1+mn)次。另外,假设每次从数据库中读取主表所消耗的时间为k1秒,每次从数据库中读取次表所消耗的时间为k2秒,则完成数据库多表信息初始化的时间为(k1+mnk2)秒。
对于表1和表2而言,主表中共有8行,即m=8;次表只有一个,即n=1,则完成数据库多表信息初始化而需要读取数据库的次数为(1+8×1)=9次。
再假设每次读取表1需要的时间为0.05秒,每次读取表2的时间为0.02秒,则数据库多表信息初始化的时间为(0.05×1+8×1×0.02)=0.21秒。
从上述的分析可知,现有的数据库多表信息初始化方法的缺点在于当主表包含的行数较多、次表的数目较多时,使得读取数据库所的消耗的时间较长、以及读取数据库的次数较多,因此完成数据库多表信息初始化的时间较长、速度较慢、效率较低。

发明内容
有鉴于此,本发明的目的在于提供一种高效率的数据库多表信息初始化方法。
为实现上述目的,本发明提供了一种数据库多表信息初始化方法,所述数据库多表包括主表和次表,其特征在于,该方法包括以下步骤A.将各个次表中的信息读取到内存中;B.读取主表中的信息,并在内存中生成主表记录集;C.根据预先建立的主表记录集中的未知信息与次表信息之间的关联关系,以所述主表记录集中的未知信息为索引,通过所述关联关系,检索内存中与该未知信息相关联的次表信息,并将所述主表记录集中的已知信息和检索到的相关次表信息拼装成数据库多表信息的完整记录。
步骤A所述将各个次表中的信息读取到内存中之后,该方法进一步包括在内存中为每个所述次表建立对应的映射表,将读取到的次表中的一行保存为所述映射表的一个元素单元;步骤C所述主表记录集中的未知信息与次表信息之间的关联关系的建立方法为建立所述未知信息与包含该未知信息的映射表之间的对应关系,以及建立所述未知信息与该未知信息对应的元素单元在映射表中的位置之间的对应关系;
步骤C所述对内存中与该未知信息相对应的次表信息进行检索的方法为根据建立的关联关系,由主表记录集中的未知信息确定对应的映射表以及对应的元素单元在所述映射表中的位置,再根据所述映射表的位置,从对应的元素单元中提取所需的次表信息。
步骤A所述将各个次表中的信息读取到内存中之后,该方法进一步包括在内存中为每个所述次表建立对应的映射表,将读取到的次表中的一行保存为所述映射表的一个元素单元;步骤C所述主表记录集中的未知信息与次表信息之间的关联关系的建立方法为在读取所述次表的同时,从数据库多表中读入主表中位置信息与次表的关联关系;步骤C所述对内存中与该未知信息相对应的次表信息进行检索的方法为根据建立的关联关系,由主表记录集中的未知信息确定对应的映射表以及对应的元素单元在所述映射表中的位置,再根据所述映射表的位置,从对应的元素单元中提取所需的次表信息。
所述将读取到的次表信息中的一行保存为所述映射表的一个元素单元的方法为以所述元素单元中与主表未知信息相一致的项目作为关键字,以该行中该未知信息对应的信息作为元素值;所述从对应的元素单元中提取所需的次表信息的方法为根据所述未知信息与映射表的对应关系,确定关键字所对应的映射表,根据未知信息与元素单元位置的对应关系,将该关键字转换成元素单元的位置,再根据所述位置找到对应的元素单元,获取该元素单元中的元素值。
如果所述未知信息为一条以上,则在所述步骤C之后,进一步包括判断当前记录是否为主表记录集的尾记录,如果是,则结束本拼装完整记录的流程,否则,转向主表记录集中的下一条记录,并返回执行步骤C。
所述步骤C之后,该方法进一步包括将所述次表信息从内存中删除。
步骤A所述在内存中形成主表记录集的方法为将所述主表的每一行保存为所述主表记录集中的一条记录。
应用本发明,能够有效的提高数据库多表信息初始化的效率。具体而言,本发明具有如下有益效果1.本发明通过对数据库多表中的每个数据库表均分别执行一次读取操作,而将其中的内容保存到内存中,然后再对内存中所保存的主表和次表对应的信息进行检索,并拼装成完整的记录,则为了完成数据库多表信息初始化而进行的读取数据库的次数与数据库多表中的数据库表的数目相同,较为明显的减少了读取数据库操作的次数,提高了数据库多表信息初始化的效率。
2.本发明进一步采用映射表(Map)的形式,将各个次表中的信息保存在内存中。由于Map具有快速查找性能,则本发明中数据库多表信息初始化所消耗的时间较短,初始化效率较高。


图1为现有的数据库多表初始化方法的流程图。
图2为本发明数据库多表初始化方法的流程图。
具体实施例方式
为使本发明的目的、技术方案更加清楚明白,以下参照附图并举实施例,对本发明做进一步的详细说明。
本发明为一种数据库多表信息初始化方法,其基本思想是首先,将各个次表中的信息读取到内存中;而后,读取主表中的信息,并在内存中形成主表记录集;然后,根据预先建立的主表记录集中的未知信息与次表信息之间的关联关系,以所述主表记录集中的未知信息为索引,通过所述关联关系,检索内存中与该未知信息相关联的次表信息,并将所述主表记录集中的已知信息和检索到的相关次表信息拼装成数据库多表信息的完整记录下面仍以表1和表2构成的数据库多表为例,说明本发明的数据库多表信息初始化方法。
本发明在对数据库多表信息进行初始化之前,以各表中所保存的数据量为依据,预先确定主表和次表。对于表1和表2而言,由于表1中包含的数据量比表2大,因此确定表1为主表、表2为次表。
参见图2,本发明的数据库多表信息初始化方法包括以下步骤步骤201.将各个次表中的信息读取到内存中,并建立各个次表对应的Map。
Map是一种表单式集合,它包括多个由关键字(Key)及其对应的元素值(Value)所组成的元素单元(Element)。Map使用哈希(Hash)算法进行自身的保存和检索,即Map在关键字与该关键字所属元素单元的位置之间建立对应关系,在执行检索时,Map通过哈希算法将关键字转换为对应的存储位置信息,再通过该位置信息直接找到相应的元素单元,并从所找到的元素单元中提取元素值。因此,Map是具有快速查找功能的数据容器。
为了利用Map的快速查找性能,使用数据库多表的系统在本步骤中对预先确定的各个次表进行读取,并且在内存中分别为各个次表建立对应的Map,以保存读入的次表信息。在所建立的Map中,一个元素单元与次表中的表项相对应,即将次表中的一行保存为Map中一个元素单元,并且每个元素单元均以该行中与主表未知信息相对应的项目为关键字、以该行中的其他项目为元素值。以表2为例,使用数据库多表的系统首先从表2中获取SNMP对应于简单网络管理协议以及MML对应于人机语言交互协议的信息;然后,在内存中建立包含两个元素单元的Map,其中一个元素单元的关键字为SNMP、对应的元素值为简单网络管理协议,另一个元素单元的关键字为MML、对应的元素值为人机语言交互协议。
另外,本步骤在读取次表信息时,还会读入主表中的未知信息与次表的关联关系,以便确定未知信息所对应的Map。也可以采用其他方法在本步骤中建立未知信息与次表的关联关系,例如建立未知信息与包含该未知信息的Map之间的对应关系,并建立未知信息与该未知信息对应的元素单元在Map中的位置之间的对应关系。
步骤202.读取主表中的信息,并在内存中形成主表记录集。
本步骤中,使用数据库的系统通过对主表执行一次数据库读取操作,获得主表中保存的所有信息,并将主表中的每一行作为一条记录,在内存中形成主表记录集。
步骤203.将主表记录集中的主表信息及Map中的次表信息拼装成完整的数据库多表信息记录。
使用数据库多表的系统在本步骤中以主表记录集中的未知信息为索引,对次表对应的Map进行检索,并在找到未知信息的含义后,将主表中的已知信息与从Map中获得的未知信息的含义相组合,形成完整的记录。具体而言,本步骤拼装完整记录的方法包括a.获取主表记录集中的首条记录;b.将当前记录中的未知信息作为关键字,根据预先建立的未知信息与Map间的对应关系,对内存中的所有Map进行检索,确定包含该关键字的Map,再根据由该关键字换算得到的位置信息,在所确定的Map中获取对应的元素值,从而得到该未知信息对应的信息;c.将获取到的未知信息对应的信息与当前记录中的已知信息相结合,组成一条完整的记录;d.判断当前记录是否为主表记录集的尾记录,如果是,则结束本拼装完整记录的流程,并进入步骤204,否则,转向主表记录集中的下一条记录,并返回执行步骤b。
以表1和表2组成的数据库多表为例,本步骤中首先以表1所形成的主表记录集中首条记录的SNMP为关键字,确定表2所对应的Map,而后在该Map中找到SNMP对应的简单网络管理协议,并将简单网络管理协议代入到主表记录集的首条记录,形成内容如下的完整记录设备名称Dev1、版本V100、使用协议为简单网络管理协议;然后转向主表记录集的第2条记录,进行完整记录的拼装;依此类推,直到主表记录集中第8条记录的未知信息MML被表2对应的Map中的人机语言交互协议所代替、形成完整的记录为止。
由于此时数据库多表信息初始化所需的主表信息和次表信息均存在于内存之中,因此本步骤的所有操作均是在内存中完成的。
步骤204.释放已建立的Map。
本步骤中,使用数据库多表的系统将步骤201在内存中建立的所有Map删除,以便释放内存空间。
至此,本发明数据库多表信息初始化完成。
本发明数据库多表信息初始化的过程中,假设数据库多表中包括n个次表,并且主表的行数为m。由上述的步骤201至步骤204可见,本发明只需对主表和各个次表分别执行一次数据库读取操作,即为完成数据库多表信息初始化而需要读取数据库的次数为(1+n)次,明显少于现有数据库多表初始化方法的(1+mn)次。
另外,假设每次从数据库中读取主表所消耗的时间为k1秒,每次从数据库中读取次表所消耗的时间为k2秒,每次从内存中读取Map所消耗的时间为k3秒,又由于每读取一条主表记录,都要将所有的Map读取一次,则完成数据库多表信息初始化的时间为(k1+nk2+mk3)秒。实践证明,从保存于内存的Map中获取一条数据所需的时间k3小于万分之一秒,因此本发明的数据库多表信息初始化时间远小于现有技术的(k1+mnk2)秒。
对于表1和表2构成的数据库多表而言,主表中共有8行,即m=8;次表只有一个,即n=1,则完成数据库多表信息初始化而需要读取数据库的次数为(1+n)=(1+1)=2次。
再假设每次读取表1需要的时间为0.05秒,每次读取表2的时间为0.02秒,每次读取Map的时间为0.0001秒,则数据库多表信息初始化的时间为(k1+nk2+mk3)=(0.05×1+1×0.02+8×0.0001)=0.0708秒。
可见,表1和表2使用本发明的方法进行初始化时,所需的时间只是现有技术的三分之一。
在通常情况下,主表包括10万行左右。假设主表行数m=105行,次表数目n=3个,主表读取时间k1=0.2秒,次表读取时间k2=0.05秒,Map读取时间k3=0.0001秒,则使用现有技术的方法进行数据库多表初始化时,所消耗的时间为k1+mnk2=0.2+105×3×0.05=15000.2秒;而使用本发明的方法进行数据库多表初始化时,所消耗的时间为k1+nk2+mk3=0.2+3×0.05+105×0.0001=10.35秒。
可见,此时本发明的初始化效率比现有技术的初始化效率提高了1千多倍。
此时使用本发明的方法对数据库多表进行初始化时,无论是读取数据库的次数,还是初始化所消耗的时间,均会大大减少,从而使得数据库多表的初始化效率显著的提高总之,应用本发明,能够有效的减少数据库多表信息初始化中读取数据库的次数、缩短初始化时间、提高初始化效率。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种数据库多表信息初始化方法,所述数据库多表包括主表和次表,其特征在于,该方法包括以下步骤A.将各个次表中的信息读取到内存中;B.读取主表中的信息,并在内存中生成主表记录集;C.根据预先建立的主表记录集中的未知信息与次表信息之间的关联关系,以所述主表记录集中的未知信息为索引,通过所述关联关系,检索内存中与该未知信息相关联的次表信息,并将所述主表记录集中的已知信息和检索到的相关次表信息拼装成数据库多表信息的完整记录。
2.如权利要求1所述的方法,其特征在于,步骤A所述将各个次表中的信息读取到内存中之后,该方法进一步包括在内存中为每个所述次表建立对应的映射表,将读取到的次表中的一行保存为所述映射表的一个元素单元;步骤C所述主表记录集中的未知信息与次表信息之间的关联关系的建立方法为建立所述未知信息与包含该未知信息的映射表之间的对应关系,以及建立所述未知信息与该未知信息对应的元素单元在映射表中的位置之间的对应关系;步骤C所述对内存中与该未知信息相对应的次表信息进行检索的方法为根据建立的关联关系,由主表记录集中的未知信息确定对应的映射表以及对应的元素单元在所述映射表中的位置,再根据所述映射表的位置,从对应的元素单元中提取所需的次表信息。
3.如权利要求1所述的方法,其特征在于,步骤A所述将各个次表中的信息读取到内存中之后,该方法进一步包括在内存中为每个所述次表建立对应的映射表,将读取到的次表中的一行保存为所述映射表的一个元素单元;步骤C所述主表记录集中的未知信息与次表信息之间的关联关系的建立方法为在读取所述次表的同时,从数据库多表中读入主表中位置信息与次表的关联关系;步骤C所述对内存中与该未知信息相对应的次表信息进行检索的方法为根据建立的关联关系,由主表记录集中的未知信息确定对应的映射表以及对应的元素单元在所述映射表中的位置,再根据所述映射表的位置,从对应的元素单元中提取所需的次表信息。
4.如权利要求2或3所述的方法,其特征在于,所述将读取到的次表信息中的一行保存为所述映射表的一个元素单元的方法为以所述元素单元中与主表未知信息相一致的项目作为关键字,以该行中该未知信息对应的信息作为元素值;所述从对应的元素单元中提取所需的次表信息的方法为根据所述未知信息与映射表的对应关系,确定关键字所对应的映射表,根据未知信息与元素单元位置的对应关系,将该关键字转换成元素单元的位置,再根据所述位置找到对应的元素单元,获取该元素单元中的元素值。
5.如权利要采1所述的方法,其特征在于,如果所述未知信息为一条以上,则在所述步骤C之后,进一步包括判断当前记录是否为主表记录集的尾记录,如果是,则结束本拼装完整记录的流程,否则,转向主表记录集中的下一条记录,并返回执行步骤C。
6.如权利要求1或5所述的方法,其特征在于,所述步骤C之后,该方法进一步包括将所述次表信息从内存中删除。
7.如权利要求1所述的方法,其特征在于,步骤A所述在内存中形成主表记录集的方法为将所述主表的每一行保存为所述主表记录集中的一条记录。
全文摘要
本发明公开了一种数据库多表信息初始化方法,所述数据库多表包括主表和次表,该方法包括以下步骤A.将各个次表中的信息读取到内存中;B.读取主表中的信息,并在内存中生成主表记录集;C.根据预先建立的主表记录集中的未知信息与次表信息之间的关联关系,以所述主表记录集中的未知信息为索引,通过所述关联关系,检索内存中与该未知信息相关联的次表信息,并将所述主表记录集中的已知信息和检索到的相关次表信息拼装成数据库多表信息的完整记录。应用本发明,数据库多表信息初始化过程中执行的数据库读取次数较少、初始化时间较短、效率较高。
文档编号G06F17/30GK1834957SQ200510055449
公开日2006年9月20日 申请日期2005年3月17日 优先权日2005年3月17日
发明者毕洪涛, 莱密斯 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1