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

文档序号:8473082阅读:来源:国知局
用场景,参考图2?6来描述根据本发明示例性实施方式的用于实现数据库的方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。
[0044]参见图2,示出了本发明中数据库的实现方法一实施例的流程图。在本实施例中,例如具体可以包括如下步骤:
[0045]步骤201、根据目标用户的注册时间,从可用于记录用户数据的可用数据库中,确定用于记录所述目标用户的数据的目标数据库;其中,各个可用数据库各对应于一个时间段,所述目标数据库对应的时间段包含所述目标用户的注册时间。
[0046]在本实施例中,各个可用数据库均对应着一个时间段。对于应用系统的任意一个可用数据库来说,在该可用数据库中记录数据的用户是在该数据库对应时间段内注册的用户,也即,在该可用数据库中记录数据的用户的注册时间均位于该数据库对应时间段内。对于应用系统的任意一个用户来说,用于记录该用户数据的可用数据库是对应时间段包含该用户注册时间的可用数据库。可以理解的是,对于应用系统的某一用户来说,在一种可能的情况下,该用户的注册时间仅位于一个可用数据库对应的时间段内,此时,该用户的数据可以记录到这一可用数据库;在另一种可能的情况下,该用户的注册时间同时位于多个可用数据库对应的时间段内,此时,该用户的数据可以记录到这些可用数据库中的任意一个数据库,或者,该用户的数据可以记录到从这些可用数据库中特定选出的一个数据库。
[0047]可以理解的是,从整个应用系统的角度来看,应用系统当前为记录用户数据而提供了多个具有对应时间段的可用数据库,而各个可用数据库对应时间段综合起来需要覆盖应用系统开放用户注册的所有时间。在本实施例中,考虑到应用系统开放用户注册的所有时间的覆盖,各个可用数据库对应时间段的设置方式有多种可能的实施方式。
[0048]在一些实施方式中,各个可用数据库可以是对应各不相同的时间段。举例来说,假设应用系统当期提供了 4个可用数据库用于为用户记录数据,并且应用系统开放用户注册的时间是2010年I月I日至当前时间,则这4个可用数据库对应的时间段例如分别可以是2010年I月I日至2011年12月31日、2012年I月I日至2013年12月31日、2014年I月I日至2014年12月31日以及2015年I月I日至当前时间。
[0049]在另一些实施方式中,各个可用数据库中,可以有部分的可用数据库对应各不相同的时间段,同时,也可以有部分的可用数据对应着相同的时间段。举例来说,假设应用系统当期提供了 4个可用数据库用于为用户记录数据,并且应用系统开放用户注册的时间是2010年I月I日至当前时间,则这4个可用数据库对应的时间段例如分别可以是2010年I月I日至2012年12月31日、2013年I月I日至2014年12月31日、2013年I月I日至2014年12月31日以及2015年I月I日至当前时间。其中,对应时间段为2013年I月I日至2014年12月31日的可用数据库有两个,对于在2013年I月I日至2014年12月31日这段时间内注册的用户,该用户的数据可以记录到这两个可用数据库的其中一个。
[0050]需要说明的是,在本实施例中,基于在不同的情况下为目标用户分配用于记录数据的目标数据库,目标用户可以分成两种类型。
[0051]在本实施例的一些实施方式中,在应用系统已采用注册时间对各用户的数据进行数据库分库分表的情况下,需要分配数据库的用户为新注册的用户,也即,一种类型的目标用户可以为当前正在进行注册的用户。对于当前正在进行注册的这类目标用户来说,用于记录其数据的目标数据库,是对应时间段包含当前时刻的可用数据库。而由于在已采用注册时间对用户数据进行数据库分库分表的应用系统中,通常起始时间最晚的可用数据库是分配给新注册用户记录数据的,因此,对于当前正在进行注册的这类目标用户来说,用于记录其数据的目标数据库也可以理解成,在所有可用数据库对应时间段的起始时刻中,该目标数据库对应时间段的起始时刻是最接近于当前时刻的。具体地,对于当前正在进行注册的这类目标用户,步骤201例如可以包括:响应于所述目标用户的注册请求,从所述可用数据库中,查找对应时间段的起始时刻最接近于当前时刻的数据库,作为所述目标数据库,并确定所述目标数据库用于记录所述目标用户的数据。
[0052]在本实施例的另一些实施方式中,如果在应用系统采用单一数据库已运行一段时间之后才需要按照注册时间对应用系统整体进行数据库分库分表,或者,如果在应用系统采用现有散列方式的数据库分库分表的情况下需要按照注册时间重新对应用系统整体进行数据库分库分表,则在应用系统整体进行数据库分库分表的时候,需要分配数据库的用户为对过去已注册的用户,也即,另一种类型的目标用户可以为过去已注册的用户。对于过去已注册的这类目标用户来说,在应用系统整体进行数据库分库分表的时候,可以先为各个可用数据库设置各自对应的时间段,然后再为应用系统中已注册的各个用户分配对应时间段包含各自注册时间的可用数据库,以记录各自数据。具体地,对于过去已注册的这类目标用户,步骤201例如可以包括:响应于对已注册用户的数据的分库分表指令,针对所述目标用户的数据,获取所述目标用户的注册时间作为目标注册时间,查找对应时间段包含所述目标注册时间的数据库作为所述目标数据库,并确定所述目标数据库用于记录所述目标用户的数据。
[0053]可以理解的是,对于一个应用系统来说,在开始开放用户注册之后的一段时间内,需要为用户记录的数据增长是较为缓慢的,在这一时间段内应用系统通常可以采用单一可用数据库来为用户记录数据,而无需进行数据库分库分表,此时,在单一可用数据库能够负担所有数据时所有数据驻留同一 shard,不仅能为应用系统节省数据库数量的开销,而且所有表间关联关系也可以得到最大限度的保留,同时还可以保证书写SQL的自由度,不易受join、group by、order by等子句限制。而当应用系统需要为用户记录的数据增长加快之后,单一可用数据库无法负担所有数据的情况下,应用系统可以采用数据库分库分表的方式,采用多个可用数据库来分担不同用户的数据记录。具体地,一方面,对于过去已注册的用户,其数据原先是记录于单一可用数据库中的,为此,应用系统可以按照注册时间为已注册用户在多个可用数据库中重新确定用于记录其数据的可用数据库,从而将原先记录于单一可用数据库的用户数据按照用户注册时间分摊到多个可用数据库上。另一方面,对于后续新注册的用户,应用系统的多个可用数据库中具有可用于记录当前注册用户的数据的可用数据库,应用系统可以将该可用数据库分配给新注册用户记录数据。其中,关于为已注册用户和新注册用户分配可用数据库,可参见前述为两类目标用户确定目标数据库的实施方式,在此不再赘述。
[0054]步骤202、建立所述目标用户与所述目标数据库之间的第一对应关系,以便根据所述第一对应关系而在所述目标数据库中查询和/或记录所述目标用户的数据。
[0055]其中,目标用户与目标数据库之间第一对应关系的建立,是为了使目标用户在应用系统执行数据操作时,应用系统能够通过目标数据库来实现目标用户的数据操作,即能够在目标数据库中查询和/或记录目标用户的数据。例如,该第一对应关系的建立方式,可以是根据目标用户的用户标识与目标数据库的数据库标识之间对应关系为目标用户建立路由信息,该路由信息即相当于前述第一对应关系,这样,目标用户在应用系统执行数据操作时,应用系统可以根据该路由信息查找到目标数据库,从而能够通过目标数据库来实现目标用户的数据操作。又如,该第一对应关系的建立方式,也可以是目标数据库为目标用户建立数据存储目录,位于目标数据库上的该数据存储目录即相当于前述第一对应关系,这样,目标用户在应用系统执行数据操作时,应用系统可以通过为目标用户的数据操作生成全局唯一主键来查找到目标数据库,从而在目标数据库的该数据存储目录中实现目标用户的数据操作。
[0056]可以理解的是,为了避免应用系统运行过程中大量数据频繁的数据迀移,尽量减少数据库数量变化时需要数据迀移的数据量,本实施例的应用系统中,为各个用户分配用于记录各自数据的可用数据库,均可以是采用前述步骤201和202为目标用户分配目标数据库的方式实现,也即,本实施例中,前述目标用户表示的是应用系统中的任意一个用户,此时,应用系统中所有用户的数据均是按照用户注册时间划分到各个可用数据库,各个可用数据中记录的数据都是属于在各自对应时间段内注册的用户。在这样的数据库分库分表方式下,在应用系统的运行过程中,例如,当为了分担不断增加的数据记录而需要增加新的可用数据库时,可以仅需增加一个可用数据库用于记录后续注册的新用户的数据,而原有可用数据库中全部用户的数据就均可以无需迀移,或者,对于个别对应时间段内注册用户较为活跃、数据负载较重的原有可用数据库,可以仅需将这些个别原有可用数据库中一部分用户的数据迀移到新增加的可用数据库中进行记录,而这些个别原有数据库中其余用户的数据以及其余大部分原有数据库中全部用户的数据均可以无需迀移。又如,当个别可用数据库所在设备出现宕机情况而无法用于实现数据操作时,可以仅需将位于宕机设备的可用数据库中用户的数据迀移到应用系统现有的其他可用数据库,使得接收迀移数据的可用数据库对应的时间段在原来其时间段的基础上又合并了宕机设备上可用数据库对应的时间段,而除宕机设备上的可用数据库之外,其余可用数据库中用户的数据均可以无需迀移。由此可见,在应用系统的运行过程中,无论可用数据库数量增加还是减少,都无需大量数据进行数据迀移,因此,在可用数据库数量处于动态变化的应用系统运行过程中,按照用户的注册时间为用户分配用于记录数据的可用数据库,可以避免大量数据频繁的数据迀移,从而提升应用系统的数据库性能。
[0057]需要说明的是,考虑到应用系统运行过程中用户数据不断的增长会经常导致当前的可用数据库数量不足以满足用户数据记录的需求,应用系统可以根据当前各个可用数据库的数据负载情况来确定是否要增加新的可用数据库。可以理解的是,以目标数据库来表示应用系统当前提供的任意一个可用数据库,基于目标数据库对应时间段的不同,目标可用数据库可以分成两种类型,对于这两种不同类型的目标数据库出现数据负载过大的情况,新增加的可用数据库可以采用不同的方式去分担用户数据的记录。
[0058]在本实施例的一些实施方式中,第一种类型的目标数据库,其对应时间段包含当前时间并且用于记录新注册用户的数据,也即,其对应时间段的起始时刻通常是所有可用数据库对应时间段的起始时刻中最接近于当前时刻的。对于这类目标数据库出现数据负载过大的情况,可以使该目标数据库对应时间段截止到当前时刻而不再继续延续至后续时亥IJ,后续新注册用户的数据可以记录到新增加的可用数据库,也即,新增加的可用数据库的对应时间段是以当前时刻为起始时刻并不断延伸至后续时刻,从而新增加的可用数据库的对应时间段可以包含后续新注册用户的注册时间。具体地,对于这类目标数据库,本实施例例如还可以包括:监测所述目标数据库的数据负载;响应于所述目标数据库的数据负载超过所述目标数据库的负载上限,将当前时刻确定为所述目标数据库对应时间段的结束时亥IJ,并增加一个可用数据库作为第一数据库,将所述第一数据库对应时间段的起始时刻确定为当前时刻。
[0059]可以理解的是,对于第一种类型的目标数据库数据负载过大的情况,增加一个可用数据库替代该目标数据库去记录后续新注册用户的数据,这样虽然可用数据库的数量增加了,但并不需要对任何数据库的任何用户的数据进行数据迀移。
[0060]在本实施例的另一些实施方式中,第二种类型的目标数据库,其对应时间段不包含当前时刻并且仅用于记录已注册用户的数据而不用于记录新注册用户的数据,也即,其对应时间段的起始时刻通常在所有可用数据库对应时间段的起始时刻中不是最接近于当前时刻的,也即,相对于所述目标数据库对应时间段的起始时刻,应用系统中通常存在其他可用数据库对应时间段的起始时刻更接近于当前时刻。对于这类目标数据库出现数据负载过大的情况,可以预先在该目标数据库中设置多个数据库分区并将该目标数据库中各用户的数据映射到各个数据库分区中去,这样,当该目标数据库出现数据负载过大的情况时,该目标数据库可以仅保留其一部分数据库分区,而其另一部分数据库分区可以整体迀移到新增加的可用数据库。具体地,对于这类目标数据库,本实施例例如还可以包括:监测所述目标数据库的数据负载;响应于所述目标数据库的数据负载超过所述目标数据库的负载上限,增加一个或多个可用数据库作为第二数据库,将所述目标数据库的一部分数据库分区迀移到相应第二数据库,并为所述目标数据库建立各数据库分区与用于承载各数据库分区的数据库之间的第二对应关系,以便根据所述第二对应关系查找和/或记录所述目标数据库的各数据库分区中各用户的数据。
[0061]其中,在目标数据库的数据负载超过负载上限时,对于任意一个保留在目标数据库的数据库分区来说,数据映射到该数据库分区的所有用户,其当前已记录的数据将均仍然记录在目标数据库中,并且,其后续需要记录的数据也将记录在目标数据库中,也即,这些用户的数据操作仍然由目标数据库来实现;对于任意一个被迀移到第二数据库的数据库分区来说,数据映射到该数据库分区的所有用户,其当前已记录的数据将全部迀移到同一个第二数据库进行记录,并且,其后续需要记录的数据也将记录在被迀移到的该第二数据库中,也即,这些用户的数据操作由迀移到的第二数据库来实现。此外,该数据库分区中所有用户的数据可以从目标数据库中删除。可以理解的是,对于任意一个被迀移的数据库分区来说,该数据库分区中所有用户的数据可以是迀移到同一个第二数据库中。
[006
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1