一种数据库的实现方法和设备的制造方法_3

文档序号:8473082阅读:来源:国知局
2]对于第二种类型的目标数据库来说,按照散列方式将其各用户的数据映射到其各数据库分区,具体可以包括:针对目标数据库,对其各数据库分区进行编号,根据其各用户的用户标识利用散列方式计算其各用户的散列值,再分别将其各用户的散列值对其数据库分区的数量取余数,并以其各用户的散列值相对于其数据库分区数量的余数作为其各用户对应的编号,再将其各用户的数据映射到其各用户对应编号的数据库分区中。可以理解的是,第二种类型的目标数据库,其表示的是应用系统中任意一个对应时间段已固定不变的可用数据库,而在其固定的对应时间段内的注册用户的数据通常是平缓的增长并且也不会是无限的增长,也即,第二种类型的目标数据库的数据负载不会无限增大,因此,其为了分摊数据负载而需要设置的数据库分区数量是有限的,比如,有些应用系统中,第二种类型的目标数据库仅需要16个数据库分区,如果该目标数据库的数据负载过大,则至多可以在该目标数据库保留I个数据库的同时将其余15个数据库分区分别迀移到15个不同的新增加数据库,使得目标数据库的16个数据库分区迀移后最终分别被16个不同的数据库承载,这16个数据库就足以分担该目标数据库对应的固定时间段内注册用户的所有数据操作需求。因此,应用系统可以参考其第二种类型的目标数据库的数据负载情况,为第二种类型的目标数据库预先设置固定数量的数据库分区,这样可以便于各个第二种类型的目标数据库执行cache和将各用户数据映射到各数据库分区。
[0063]对于第二种类型的目标数据库,由于目标数据库对应时间段内注册的部分用户的数据会随着部分数据库分区被迀移到第二数据库上,使得目标数据库对应时间段内注册用户被分配到多个不同的数据库上执行数据操作,为了使这些用户在执行数据操作时应用系统能够查找到用于执行其数据操作的数据库,需要为目标数据库建立各个数据库分区与用于承载各数据库分区的第二数据库之间的第二对应关系。具体地,从在任意一个数据库分区记录数据的任意一个用户的角度来说,当该用户执行数据操作时,可以在为目标数据库建立的第二对应关系中,根据该用户所在的数据库分区,确定为该用户记录数据的数据库,以便在该数据库中查找和/或记录该用户的数据,从而通过该数据库来实现该用户的该数据操作。其中,第二对应关系中各数据库分区可以是通过分区标识来表示。为了满足本地索引的要求并便于数据迀移,数据库分区的分区标识可以是数据库分区的编号与目标数据库的数据库标识组合而成,或者,也可以是数据库分区的编号与流水号组合而成。其中,数据库分区的编号,可以是在目标数据库中各用户的数据按照散列方式向各数据库分区映射的过程中数据库分区取得的编号。
[0064]对于第二种类型的目标数据库来说,其各数据库分区与用于承载各数据库分区的数据库之间第二对应关系,例如可以通过映射表或配置文件来实现。例如,以映射表实现的第二对应关系为例,对于第二种类型的目标数据库,可以在预先为该目标数据库设置多个数据库分区时也为该目标数据库建立一个映射表,该映射表用于记录该目标数据库的各个数据库分区到将来可能用于承载各自的数据库的映射关系,即前述的第二对应关系,当该目标数据库的部分数据库分区迀移到新增加的第二数据库时,可以修改映射表中被迀移的数据库分区的映射关系,从而始终保持映射表的记录中各数据库分区对应的数据库为承载各数据库分区的数据库。其中,该映射表可以在数据库与应用系统的服务器各保存一份,并在映射表中对各数据库分区设置迀移状态和非迀移状态,这样可以使得应用系统的服务器知晓各个数据库分区是否正在数据迀移,以避免对正在数据迀移的数据库分区执行数据操作。
[0065]对于第二种类型的目标数据库来说,在上述通过映射表来实现第二对应关系的实施方式的基础上,当该目标数据库的数据负载超过负载上限时,可以先对数据库的映射表进行修改,以使得映射表中的一部分数据库分区分配给新增加的第二数据库并将相应数据库分区的状态设置为迀移状态,再通知应用系统的服务器(如resin)按照数据库映射表的修改刷新该服务器的映射表,然后将这部分数据库分区的所有用户的数据从该目标数据库迀移到相应第二数据库,再在检查出迀移到第二数据库的数据与该目标数据库中的原数据两者相一致时,将数据库的映射表中相应数据库分区的状态设置为非迀移状态,并通知应用系统的服务器按照数据库映射表的修改刷新该服务器的映射表,最后再从该目标数据库中删除被迀移到第二数据库的数据。
[0066]对于第二种类型的目标数据库来说,在上述按照散列方式进行数据库分区的实施方式基础上,考虑到有些应用系统有时会对历史数据进行处理,历史数据处理过程中可能会涉及到历史数据的迀移,为了便于历史数据的迀移,对于任意一个数据库分区来说,可以在该数据库分区中设置多个对应时间段的数据库子分区,该数据库分区的各数据可以分别映射到对应时间段包含各自记录时间的数据库子分区,这样在执行历史数据迀移时,仅需将相应数据库子分区完整的迀移即可,而无需遍历整个数据库去查找需要迀移的历史数据。具体地,在上述按照散列方式进行数据库分区的实施方式基础上,本实施例例如还可以包括:响应于基于数据生命周期的历史数据迀移指令,对于所述目标数据库的每一个数据库分区,以所述目标数据库的各数据库分区中所述生命周期对应的数据库子分区作为目标数据库子分区,将所述目标数据库子分区中各用户的数据迀移到用于记录历史数据的数据库中;其中,所述目标数据库的每一个数据库分区都具有多个数据库子分区;对于所述目标数据库的任意一个数据库分区来说,该数据库分区中各用户的数据是按照数据的记录时间映射到各数据库子分区中的,其中,该数据库分区的各个数据库子分区各对应一时间段,各数据库子分区中所有数据的记录时间均分别包含于各数据库子分区对应的时间段。其中,通常应用系统按照一定的周期来进行历史数据处理的,该历史数据处理的周期即为前述生命周期,因此,应用系统在执行历史数据迀移时,实际上是要迀移记录时间在一定生命周期内的历史数据,即需要迀移的历史数据的记录时间属于该生命周期,也即,需要迀移的数据库子分区对应的时间段是该生命周期。
[0067]可以理解的是,对于第二种类型的目标数据库数据负载过大的情况,增加至少一个可用数据库去分担该目标数据库的部分数据库分区的用户的数据记录,这样虽然可用数据库的数量增加了,但仅需要将该目标数据库的部分数据库分区的用户数据迀移到新增加的数据库,而无需对该目标数据库其他数据库分区的用户数据进行数据迀移,也无需对其他数据库的用户数据进行数据迀移。
[0068]需要说明的是,对于上述第一种类型的目标数据库,在其数据负载过大时为其增加第一数据库之后,该第一数据库的起始时刻相对于该目标数据库是更接近于当前时刻的,因此,该目标数据库则由第一种类型变为第二种类型,而该第一数据库则成为第一种类型的目标数据库。举例说明,假设数据库A为第一种类型的目标数据库,当数据库A数据负载过大时增加数据库B作为第一数据库,此时,数据库A则变为第二种类型的目标数据库,数据库B则为第一种类型的目标数据库。
[0069]可以理解的是,在应用系统中,以任意一个用户作为目标用户,为目标用户确定用于记录其数据的目标数据库之后,在目标用户执行用户操作时,需要找到用于记录其数据的目标数据库,这样才能利用该目标数据库执行该目标用户的数据操作,即应用系统需要为目标用户的数据操作路由到目标数据库。
[0070]在本实施的一些实施方式中,为了实现为目标用户的数据操作路由到目标数据库,应用系统可以建立路由数据库,为各个用户设置数据路由信息并将这些数据路由信息保存到路由数据库,其中,以任意一个用户作为目标用户,目标用户的数据路由信息表示的可以是目标用户的用户标识与用于记录该用户数据的数据库之间的对应关系,这样,当目标用户执行数据操作时,如果其数据操作请求包含目标用户的用户标识,则可以响应于包含有目标用户的用户标识的数据操作请求,在路由数据库中可以查找到所述目标用户的数据路由信息,根据该数据路由信息可以确定用于为目标用户记录数据的目标数据库,从而就可以根据目标数据库实现目标用户的数据操作。
[0071]在本实施例的另一些实施方式中,在通过路由数据库为各个用户记录数据路由信息的实施方式基础上,考虑到在路由数据库中读取信息的速度较慢,为了缩短应用系统对数据操作的响应时间,可以为路由数据库增加可持久化保存数据的独立缓存并将路由数据库中记录的数据路由信息也记录到该独立缓存中,这样,当目标用户执行数据操作时,如果其数据操作请求包含有目标用户的用户标识,则可以根据目标用户的用户标识,先在独立缓存中查找目标用户的数据路由信息,而在独立缓存中查找不到的情况下再去路由数据库中查找。具体地,本实施例例如还可以包括:建立路由数据库,并将各用户的数据路由信息记录到所述路由数据库;为所述路由数据库增加可持久化保存数据的独立缓存,并将所述路由数据库中记录的数据路由信息记录到所述独立缓存中,以便响应于包含有所述目标用户的用户标识的第一数据操作请求,在所述独立缓存中查找所述目标用户的数据路由信息,如果所述独立缓存中查找不到所述目标用户的数据路由信息则在所述路由数据库中查找所述目标用户的数据路由信息,以便根据所述目标用户的数据路由信息确定出所述目标数据库,从而通过所述目标数据库来实现所述第一数据操作。其中,独立缓存可以是在独立于运行应用系统的设备及应用系统各数据库所在设备之外的设备上实现的,例如,应用系统运行在第一服务器上,应用系统各数据库位于第二服务器上,独立缓存可以是在第三服务器上实现,这样可以保证独立缓存具有较大的存储空间,从而能够将路由数据库中所有的数据路由信息均保存到独立缓存。可以理解的是,通过独立缓存和路由数据库共同查找数据路由信息的实施方式,由于独立缓存读取信息的速度要远远快于路由数据库读取信息的速度,大部分数据操作由独立缓存来查找数据路由信息,使得从路由数据库中读取数据路由信息的需求大大减少,这就提高了数据路由信息的查找速度,从而缩短了应用系统响应数据操作的时间。
[0072]在本实施例的又一些实施方式中,在通过独立缓存和路由数据库共同为各个用户记录数据路由信息的实施方式基础上,考虑到应用系统中通常有少量活跃用户对应用系统的使用最为频繁,这些少量的活跃用户通常为应用系统中带来了大量的数据操作,因此,为了减少网络开销并进一步缩短应用系统对这些活跃用户带来的大量数据操作的响应时间,可以将这些少量活跃用户的数据路由信息记录到本地内存,这样,以任意一个用户作为目标用户,当目标用户执行数据操作时,如果该数据操作包含有目标用户的用户标识,则可以根据目标用户的用户标识,先在本地内存中查找目标用户的数据路由信息,在本地内存中查找不到的情况下再去独立缓存、路由数据库中查找。具体地,本实施例例如还可以包括:建立路由数据库,并将各用户的数据路由信息记录到所述路由数据库;为所述路由数据库增加可持久化保存数据的独立缓存,并将所述路由数据库中记录的数据路由信息记录到独立缓存中;在所述独立缓存中,按照各用户的活跃时间对各用户的数据路由信息进行排序,并按照排序结果,以活跃时间最接近于当前时刻的N个用户作为当前活跃用户,将各个所述当前活跃用户的数据路由信息保存到本地内存中,以便响应于包含有所述目标用户的用户标识的第二数据操作请求,在所述本地内存中查找所述目标用户的数据路由信息,如果所述本地内存中查找不到所述目标用户的数据路由信息则在所述独立缓存中查找所述目标用户的数据路由信息,如果所述本地内存和所述独立缓存中均查找不到所述目标用户的数据路由信息则在所述路由数据库中查找所述目标用户的数据路由信息,以便根据所述目标用户的数据路由信息确定出所述目标数据库,从而通过所述目标数据库来实现所述第二数据操作;其中,所述N为当前活跃用户数量的预设值。其中,用户的活跃时间可以表示用户最近活跃过的时间,即lastActiveTime。此外,本地内存是相对于应用系统来说的,本地内存具体是位于运行应用系统的设备上,例如,应用系统运行在第一服务器上,应用系统各数据库位于第二服务器上,独立缓存在第三服务器上实现,则本地内存即是第一服务器的内存。可以理解的是,通过本地内存、独立缓存和路由数据库共同查找数据路由信息的实施方式,由于活跃用户所带来的大量数据操作是由本地内存来查找数据路由信息的,而相对于独立缓存和路由数据库,本地内存读取信息不仅没有网络开销而且响应速度也更快,这就减少了从独立缓存和路由数据库中读取数据路由信息的需求,从而缩短了减少了网络开销并进一步缩短了应用系统响应数据操作的时间,同时,由于活跃用户的数量较少,将少量活跃用户的数据路由信息记录到本地内存也不会占用本地内存过多的存储空间,从而避免了对应用系统的运行造成影响。
[0073]对于上述通过本地内存、独立缓存和路由数据库共同查找数据路由信息的实施方式,为了便于各用户的数据路由信息之间按照活跃时间进行排序,对于任意一个用户来说,该用户的数据路由信息例如具体可以表示该用户的用户标识(如account ID)与该用户的注册时间(即createTime)、该用户的活跃时间(如long型的lastActiveTime)、用于记录该用户数据的数据库(即DB)之间的对应关系,这样就可以使得各用户的数据路由信息之间的排序可以依据各用户的数据路由信息来实现。在本实施例的一个应用示例中,独立缓存例如可以采用SortedSet结构的Redis缓存来实现,其中,Redis缓存可以增加在路由数据库的上层,对于每一个数据路由信息,其redis的key可以为用户的account ID,其redis的value为用户的createTime、用户的long型lastActiveTime以及用于为用户记录数据的DB,SortedSet结构可以按照指定的排序方式返回一个有序集合存放在独立缓存中,其中,指定的排序方式可以是以long型lastA
当前第3页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1