专利名称:一种数据库访问的方法及数据库映射系统的制作方法
技术领域:
本发明属于数据库技术领域,尤其涉及一种数据库访问的方法及数据库映射系统。
背景技术:
数据库是指长期储存在计算机内的、有组织的、可共享的数据的集合,广泛应用于计算机、网络通信等领域为各种用户提供数据共享。目前,实现数据库访问的方法主要有两种方法之一客户端直接编辑标准的SQL语句(数据库访问语句),并将编辑后的SQL语句通过网络传输至服务器端的数据库系统,服务器端的数据库系统对接收到的SQL语句进行解释、编译、执行,并将最终的执行结果传输至客户端。其中,服务器端和客户端的数据传输协议可采用多种方式,如传输控制协议/网际互联协议(Transmission Control Protocol/Internet Protocol,TCP/IP)、用户数据报协议(User Datagram Protocol,UDP)、管道、七号信令等。
在上述数据库访问方法中,客户端用户通过网络访问服务器端的数据库,使客户端用户访问数据库的速率受到网络速率的限制,而只能达到十万级别的数据库访问速率,无法满足用户对数据库访问的实时性的需求。
方法之二客户端通过中间件来访问服务器端的数据库。中间件技术可以为客户端用户提供一些可以调用的固定接口,中间件根据客户端用户提供的关键字如表名、字段名等动态组装成标准的SQL语句,并将组装的SQL语句通过网络传输至服务器端。
上述方法将客户端用户在访问数据库时,重新生成标准的SQL语句的操作交给中间件完成,简化了客户端用户的数据库访问操作,但是通过网络传输数据同样会使数据库的访问速率受到网络速率的限制,而只能达到十万级别的数据库访问速率,同样无法满足用户对数据库访问的实时性的需求。
发明内容
本发明实施例的目的在于提供一种数据库访问的方法,旨在解决现有技术中,在访问数据库时,需要通过网络在服务器端和客户端传输数据,从而使数据库访问速率受到网络速率的限制,无法达到用户对数据库访问的实时性的需求的问题。
本发明实施例是这样实现的,一种数据库访问的方法,所述方法包括下述步骤根据服务器端数据库中的每条记录的关键字段值计算所述记录的内存映射地址;将所述服务器端数据库中的每条记录映射至客户端共享内存的所述内存映射地址中;通过直接访问所述共享内存来访问所述服务器端数据库。
本发明实施例的另一目的在于提供一种数据库映射系统,所述系统包括内存映射地址计算模块,用于根据服务器端数据库中的每条记录的关键字段值计算所述记录的内存映射地址;以及数据库映射模块,用于将所述服务器端数据库中的每条记录映射至客户端共享内存的所述内存映射地址中。
在本发明实施例中,通过将服务器端数据库中的各条记录映射至客户端共享内存中,从而使客户端用户不需要通过网络访问服务器端的数据库,直接通过访问客户端共享内存来访问数据库,使数据库访问不受网络速率的限制,可以达到百万级别的数据库访问速率,满足用户对数据库访问的实时性的需求。
图1是本发明实施例提供的数据库访问的方法的实现流程图;图2是本发明实施例提供的数据库访问的方法的另一实现流程图;图3是本发明实施例提供的采用数据库访问方法查找记录的实现流程图;图4是本发明实施例提供的数据库映射系统的结构图。
具体实施例方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
在本发明实施例中,通过将服务器端的数据库表映射到客户端的共享内存中,从而使客户端用户达到百万级别的数据库访问速率,以满足客户端用户对数据库访问的实时性的需求。
图1示出了本发明实施例提供的数据库访问的方法的实现流程,详述如下在步骤S101中,为服务器端数据库中的每条记录添加映射时间戳,以便当客户端共享内存的可用存储空间有限,不能将服务器端数据库中的所有记录都映射至该共享内存时,可以根据每条记录映射至共享内存的时间值淘汰部分映射至共享内存的记录。其中映射时间戳是数据库中的每条记录映射至共享内存时的时间值。添加了映射时间戳之后的各单条记录的结构如下表所示
在步骤S102中,判断客户端共享内存的空间是否已满,如果客户端共享内存的空间已满,则执行步骤S103,否则执行步骤S104。
在步骤S103中,淘汰映射至客户端共享内存中的映射时间戳较早的记录。
在步骤S104中,根据服务器端数据库中每条记录的关键字段值按照预先配置的哈希函数(Hash函数)计算该记录对应的内存映射地址。其中哈希函数的通式是内存映射地址=记录中关键字段值MOD地址素数,其中地址素数是为了得到更好的哈希函数,用户经过多次试验总结并配置的值(如5、7等)。例如当数据库中存在关键字段值分别为8,10,14,15,18,23,20,34的记录时,如果地址素数配置为5,经上述哈希函数计算后,则具有上述关键字段值的记录的内存映射地址分别为3,0,4,0,3,3,0,4;如果地址素数配置为7,经上述哈希函数计算后,则具有上述关键字段值的记录的内存映射地址分别为1,3,0,1,4,2,6,6。如上所述,具有不同的关键字段值的各个记录,经哈希函数计算后,可能得到相同的内存映射地址,即一个内存映射地址可能对应复数个记录。
在步骤S105中,将服务器端数据库中的各记录映射至客户端共享内存的相应内存映射地址中。经映射后,数据库在内存存储区的存储结构如下表所示
在本发明实施例中,对于具有相同内存映射地址的各记录,在映射至共享内存中时,采用队列对具有相同内存映射地址的所有记录进行管理,该队列的长度可以预先设定,在本发明实施例中,以100为例进行说明。当具有相同内存映射地址的记录多于100条时,前100条记录将映射到根据各记录的关键字段值计算出来的共享内存中对应的内存映射地址中,对于100条以后的具有相同内存映射地址的记录在被映射到共享内存中时,采用线性探测的方法逐个探测下一个内存映射地址是否空闲,如果空闲,则将该记录映射到该空闲的内存映射地址中。其中地址线性探测的个数由用户预先设定。
在步骤S106中,直接通过访问该共享内存来访问数据库。客户端用户可以直接访问上述客户端共享内存来访问映射至该共享内存中的数据库,从而可以达到百万级别的数据库访问速率,而不受网络速率的影响,满足了用户对数据库访问的实时性的需求。
图2示出了本发明第二实施例提供的数据库访问的方法的实现流程,其与第一实施例的不同之处在于,对该方法步骤的执行顺序进行了调整。
在步骤S201中,根据服务器端数据库中每条记录的关键字段值按照预先配置的哈希函数计算该记录对应的内存映射地址;在步骤S202中,为服务器端数据库中的每条记录添加映射时间戳;在步骤S203中,判断客户端共享内存的空间是否已满,如果客户端共享内存的空间已满,则执行步骤S204,否则执行步骤S205;在步骤S204中,淘汰映射至客户端共享内存中的映射时间戳较早的记录;在步骤S205中,将服务器端数据库中的各记录映射至客户端共享内存的相应内存映射地址中,在步骤S206中,直接通过访问该共享内存来访问数据库。
图3示出了本发明实施例提供的采用数据库访问方法查找记录的流程。
在步骤S301中,接收输入的记录的关键字段值。当采用上述数据库访问方法将服务器端数据库中的所有记录映射至客户端共享内存中后,接收客户端用户输入的记录的关键字段值。
在步骤S302中,根据该关键字段值采用上述配置的哈希函数计算该记录对应的内存映射地址。
在步骤S303中,判断计算出来的内存映射地址中是否存在与该记录的关键字段值相同的记录,如果不存在,则执行步骤S304,如果存在,则执行步骤S307。
在步骤S304中,判断探测的地址数是否超过预先设定的值。由于在将服务器端数据库中的各条记录映射至客户端共享内存时,对于具有不同的字段关键值的复数个记录经哈希函数计算,可能得到相同的内存映射地址,在配置时已经限定了同一个内存映射地址对应的记录的条数,对于多于限定值的具有相同内存映射地址的记录,采用地址线性探测的方式,将该多于限定值的记录填充到下一个内存映射地址。而在进行地址线性探测时,用户也预先配置了地址线性探测的地址数,所以在此步骤中,需要判断当前探测的地址的个数是否超出预先配置的地址数,如果没有超出,则执行步骤S305,如果超出,则执行步骤S306。
在步骤S305中,将探测地址增加1后,重新执行步骤S303。
在步骤S306中,停止地址探测并返回未查到该记录对应的内存映射地址以及未查找到该记录的结果。
在步骤S307中,返回查找到的记录的内存映射地址,向客户端用户返回查找到的记录。
图4示出了本发明实施例提供的数据库映射系统的结构,为了便于说明,仅示出与本发明实施例相关的部分。
内存映射地址计算模块31根据数据库中各记录的关键字段值采用预先配置的哈希函数计算该记录映射到共享内存中的内存映射地址。数据库映射模块32将数据库中的各条记录映射到由内存映射地址计算模块31计算得出的客户端共享内存的内存映射地址中,服务器端的数据库映射至客户端共享内存中后,各记录在客户端共享内存存储区的存储结构如上所述,在此不再赘述。
在将服务器端数据库中的各个记录映射至客户端共享内存的过程中,当客户端共享内存的可用空间有限,无法将服务器端数据库中的每个记录都映射至客户端共享内存时,本发明实施例提供的数据库映射系统通过映射时间戳添加模块33为服务器端数据库中的每个记录添加相应的映射时间戳,用以标识该记录映射至客户端共享内存时的时间。其中添加了映射时间戳之后的各记录的结构如上所述,在此不再赘述。内存空间判断模块34在将服务器端数据库中的各条记录映射至客户端共享内存前,判断该共享内存是否已满。当该共享内存的可用空间有限,无法将数据库中的所有记录都映射至该共享内存时,即该共享内存已满,则通过记录淘汰模块35淘汰映射时间戳较早的记录,以使数据库中的其它记录能够映射至该共享内存,客户端用户可以直接通过访问客户端的共享内存来访问数据库,从而可以达到百万级别的数据库访问速率,而不受网络速率的限制,满足了客户端用户对数据库访问的实时性的需求。
综上所述,在本发明实施例中,通过将服务器端数据库中的每条记录映射至客户端共享内存中,当客户端需要访问服务器端的数据库时,可以直接访问映射至客户端共享内存中数据库,使数据库访问不受网络速率的限制,从而可以达到百万级别的数据库访问速率,满足了客户端用户对数据库访问的实时性的需求。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
权利要求
1.一种数据库访问的方法,其特征在于,所述方法包括下述步骤根据服务器端数据库中的每条记录的关键字段值计算所述记录的内存映射地址;将所述服务器端数据库中的每条记录映射至客户端共享内存的所述内存映射地址中;通过直接访问所述共享内存来访问所述服务器端数据库。
2.如权利要求1所述的数据库访问的方法,其特征在于,在所述根据服务器端数据库中的各条记录的关键字段值计算所述记录的内存映射地址的步骤之前,所述方法还包括下述步骤为所述服务器端数据库中的每条记录添加映射时间戳;判断所述客户端共享内存是否已满,如果所述客户端共享内存已满,则淘汰所述客户端共享内存中的所述映射时间戳最早的记录。
3.如权利要求1所述的数据库访问的方法,其特征在于,在所述将所述服务器端数据库中的每条记录映射至客户端共享内存的所述内存映射地址中的步骤之前,所述方法还包括下述步骤为所述服务器端数据库中的每条记录添加映射时间戳;判断所述客户端共享内存是否已满,如果所述客户端共享内存已满,则淘汰所述客户端共享内存中的所述映射时间戳最早的记录。
4.如权利要求1或2或3所述的数据库访问的方法,其特征在于,在所述根据服务器端数据库中的每条记录的关键字段值计算所述记录的内存映射地址的步骤中,采用哈希函数计算所述记录的内存映射地址。
5.如权利要求1或2或3所述的数据库访问的方法,其特征在于,当根据服务器端数据库中的每条记录的关键字段值计算所述记录的内存映射地址时,如果有复数个记录的内存映射地址相同,则在将所述记录映射至客户端共享内存的所述内存映射地址中时,采用队列对所述具有相同内存映射地址的复数个记录进行管理。
6.一种数据库映射系统,其特征在于,所述系统包括内存映射地址计算模块,用于根据服务器端数据库中的每条记录的关键字段值计算所述记录的内存映射地址;以及数据库映射模块,用于将所述服务器端数据库中的每条记录映射至客户端共享内存的所述内存映射地址中。
7.如权利要求6所述的数据库映射系统,其特征在于,所述系统进一步包括下述步骤映射时间戳添加模块,用于为所述服务器端数据库中的每条记录添加映射时间戳;内存空间判断模块,用于判断所述客户端共享内存是否已满;以及记录淘汰模块,用于淘汰所述客户端共享内存中的所述映射时间戳最早的记录。
8.如权利要求6或7所述的数据库映射系统,其特征在于,所述内存映射地址计算模块采用哈希函数计算所述记录的内存映射地址。
9.如权利要求6或7所述的数据库映射系统,其特征在于,当有复数个记录的内存映射地址相同,则在将所述记录映射至客户端共享内存的所述内存映射地址中时,采用队列对所述具有相同内存映射地址的复数个记录进行管理。
全文摘要
本发明适用于数据库技术领域,提供了一种数据库访问的方法及数据库映射系统,所述方法包括下述步骤根据服务器端数据库中的每条记录的关键字段值计算所述记录的内存映射地址;将所述服务器端数据库中的每条记录映射至客户端共享内存的所述内存映射地址中;通过直接访问所述共享内存来访问所述服务器端数据库。在本发明实施例中,通过将服务器端数据库中的各条记录映射至客户端共享内存,从而可以通过直接访问共享内存来访问数据库,而不受网络速率的限制,可以达到百万级别的数据库访问速率,以满足用户对数据库访问的实时性的需求。
文档编号H04L12/00GK101082928SQ20071007616
公开日2007年12月5日 申请日期2007年6月25日 优先权日2007年6月25日
发明者华有为 申请人:腾讯科技(深圳)有限公司