一种分布式数据库处理的方法和设备的制造方法_2

文档序号:9750879阅读:来源:国知局
构化 查询语言(Structured Query Language,SQL)的形式,其中,该访问请求包括的查询索引字 段可能是分区字段,也可能不是分区字段。虽然本发明对于Application 201生成的访问请 求中包括的查询索引字段是分区字段的情况也适用,但是本发明主要着力于解决 Application 201生成的访问请求中包括的查询索引字段不是分区字段的情况下,如何准 确的将访问请求发送到目标数据库进行处理的问题。
[0036]具体的,为了在Application 201生成的访问请求中包括的查询索引字段不是分 区信息的情况下,避免将访问请求发送到所有分布式数据库去处理,需要为数据表创建并 保存分区路由表。所述分区路由表包括该数据表中非分区信息及其取值和分区信息(分区 字段或者包含分区字段的信息)及其取值之间的映射关系。也就是说,通过查询数据表的分 区路由表,可以获得一个数据表的非分区信息及其取值对应的分区信息及其取值。可选的, 可以为一个数据表创建多个分区路由表,此时需要根据查询索引字段进一步从该数据表对 应的多个分区路由表中,确定与该查询索引字段对应的分区路由表。当用户通过 App 1 i cation 201生成的访问请求中包括的查询索引字段不是分区信息时,通过查询对应 的分区路由表,即可获知查询索引字段及其取值对应的分区信息及其取值,然后DDS202根 据分区信息及其取值,即可将用户的访问请求发送到目标数据库处理。
[0037] 需要说明是,Application 201、DDS 202和分布式数据库203之间通过通信接口进 行信息交互。例如,Application 201和DDS 202之间可以采用JDBC(Java Data Base Connectivity,Java数据库连接,一种用于执行SQL语句的Java API,可以为多个数据库提 供统一访问,它由一组用Java语言编写的类和接口组成)。可选的,Application 201和DDS 202之间,以及DDS 202和分布式数据库203之间,可以通过通信网络进行通信连接。
[0038] 结合表1和表2,对分区路由表进行详细描述。一个数据表的任何一条数据记录都 会包括很多字段,如表1所示为一个用户数据表,该用户数据表1000条数据记录,每条数据 记录包括user Id、msdn、name和identifier Id 4个字段(实际中,数据表包括的数据记录以 及字段可能更多),实际使用中基于不同的考虑(如查询效率、存储空间、数据安全等),需要 将该用户数据表进行拆分,分别存放在不同的数据库中,其中,userid为分区字段。当 Application 201生成的访问请求的查询索引字段为useld时,DDS 202可以根据userid及 其取值,准确的将该访问请求发送到目标数据库处理。但是,现实中经常出现用户A只知道 用户B的msdn,并且希望查询用户B的identifierld的情况,因此,有必要为用户数据表创建 一个分区路由表吐1_1'01^6_1118(111(1118(111,11861'1(1),分区路由表的格式可以如表2所示,该分 区路由表记录了非分区字段msdn及其取值和分区字段userid及其取值之间的映射关系。例 如,当用户A通过Application 201生成的SQL语句中包括的查询索引字段及其取值为msdn = 13800000001时,按照现有技术,DDS 202将会把Application 201生成的SQL语句发送到 所有分布式数据库(如DB1、DB2、DB3···),而本发明中DDS 202通过查询与该用户数据表关联 的分区路由表(当该数据表存在多个分区路由表时,需要进一步根据查询索引字段msdn,确 定与该查询索引字段msdn关联的分区路由表),获知msdn= 13800000001对应的分区字段及 其取值为userID = 0001,从而,DDS 202根据userld = 0001,可以准确的将该SQL语句发送到 目标数据库处理。
[0039] 表 1
[0040]
[0043] 需要说明的是,当用户向数据表中插入数据的时候,需要同步的向关联的分区路 由表中插入相应的数据。例如,当需要向表1所示的用户数据表中插入数据记录(u SerId = 1001 ·,msdn = 13800001001,name = Lucy,identifierld = 00000000001001)时,则需要同步 的向表2所示的分区路由表中插入相应的数据记录(msdn = 13800001001,userld= 1001)。 插入数据记录后的用户数据表和分区路由表分别如表3和表4所示。
[0044] 表 3
[0045]
[0049] 分区路由表的规划需要根据用户的实际业务需要进行设计。一个数据表可以包括 很多的字段,但是对该数据表进行分区存储的时候会有不同的考虑,比如说,尽量使数据表 中的数据能够均匀的分到不同的分布式数据库中存储,再比如说,在主从表场景下,尽量减 少跨库查询等等。基于不同的考虑,可能会使用不同的分区字段。例如,上面的例子中,因为 userid是一个顺序增长的数字,为了使用户数据表中的数据能够均匀的分到不同的分布式 数据库中存储,使用了 userid作为分区字段。然而,用户A实际使用中经常只知道另一个用 户B的手机号码msdn,需要查询这个用户B的name等其他信息,这种情况下,就需要为这个用 户数据表设置如表2所示的分区路由表。
[0050] 在一种可能的设计中,分区路由表由用户通过Application 201创建,并保存在数 据库中。由Application 201来管理分区路由表,这样用户可以根据实际业务需要创建自己 的分区路由表,不会存在创建了却又不用的分区路由表数据。
[0051] 在另一种可能的设计中,分区路由表由分布式数据库系统的管理员创建,并保存 在数据库中。这样用户通过Application 201插入数据或者访问数据库时,都不需要关心分 区路由表的存在,分区路由表对于Application 201而言完全透明。但是需要DDS 202来管 理分区路由表,DDS 202业务处理复杂,特别涉及多个分区路由表时,DDS 202处理时间会变 长,加大用户访问时延。并且由于分区路由表是由分布式数据库系统的管理员创建,这种分 区路由表的创建是基于管理员的经验来规划的,不一定完全符合用户的业务需求,也就是 说会存在系统管理员创建了却又不用的分区路由表数据。
[0052] 可选的,在一种情况下,所有分区路由表可以保存在特定的数据库中,这样DDS 202需要查询分区路由表时,可以快速地将查询请求发送到该特定的数据库中,提高了查询 效率;
[0053] 在另一种情况下,当分区路由表很多,为了防止存储压力过大,可以将分区路由表 设置在多个数据库中进行维护。
[0054] 在另一种情况下,当分区路由表很大时,也可以按照现有技术将分区路由表进行 拆分存储到不同的分布式数据库中,从而减小了数据库的存储压力。
[0055] 需要说明的是,本发明实施例中的分区信息包括分区字段或者分区携带字段,其 中所述分区携带字段与所述分区字段存在映射关系。具体的,分区携带字段可以是分区字 段根据预设的规则生成,例如,分区携带字段可以由字符串前缀和字符串后缀构成,其中字 符串前缀为分区字段,字符串后缀为顺序数;分区携带字段还可以是由DDS 202根据分区字 段和分区规则生成的。显然,由于所述分区携带字段与所述分区字段存在映射关系,所以根 据分区携带字段和分区规则,也能够确定需要将访问语句发送的数据库。下面实施例中,将 分区字段和分区携带字段统称为分区信息。
[0056] 示例性的,图3本发明实施例介绍一种可能的分区携带字段的生成方法。以上述表 2为例。可以根据DDS 202上保存的分区规则,由分区字段userid的值生成分区携带字段 orderld的值。假设分区规则为:
[0057]
[0058] 其中,VP表示逻辑分区,PARTITION表示物理分区。上述分区规则具体是指,对分区 字段使用hash函数计算,并用计算结果对105取模,并将不同模值的数据记录存放在不同的 数据库上,例如模值范围[0,33333]的数据记录使用逻辑分区1001存放,并且该逻辑分区对 应物理分区为pi。分区携带字段orderld的生成方法可以是:对分区字段userid进行hash计 算,然后对1〇 5取模,即Hash (userId) % 105,对运算结果Hash (userId) % 105查询分区规则, 获得虚拟分区值VP,最后使用VP*1016+顺序号计算得到orderld的值。具体的,包括:
[0059] 步骤301 Application向DDS发送获取逻辑分区值的请求,所述获取逻辑分区值的 请求包括分区字段及其取值,例如,userld = 0001;
[0060] 步骤302、DDS接收Application发送的获取逻辑分区值的请求,得到该获取逻辑分 区值的请求中的分区字段及其取值;DDS根据保存的分区规则,获取该分区字段及其取值对 应的逻辑分区值。例如,DDS对0001 (分区字段的取值)进行hash计算,然后对105取模,SP Hash(0001)%105,假设运算结果为10000,则查询分区规则,确定运算结果落在区间[0, 33333]中,从而获得虚拟分区值VP = 1001。
[0061] 步骤303、DDS向Application发送获取逻辑分区值的响应,该获取逻辑分区值的响 应中包括DDS获取的逻辑分区值;
[0062] 步骤304、Application接收DDS发送的获取逻辑分区值的响应,得到分区字段的取 值对应的逻辑分区值;Application根据获取的逻辑分区值生成分区携带字段;例如,使用 \^*10 16+顺序号计算得到<^(161'1(1的值。
[0063] 通过上述方法生成的分区携带字段既包括了分区字段的信息,又可以包含其他一 些特性,如顺序号。这种分区携带字段的使用可以满足很多实际的应用需求。例如,快递业 中的订单号,系统生成的订单号需要按顺序生成(便于统计等原因),且不重叠,并且用户可 以根据该订单号快速查询到相应快递的信息。采用本发明实施例提供的方法生成分区携带 字段(如orderld),则既可以满足按顺序生成不重叠的要求,又便于系统根据分区携带字段 直接将SQL语句直接发往对应的目标数据库。
[0064]如图4所示,本发明提供的分布式数据库处理系统可以包括数据库处理设备401和 分布式数据库403。数据库处理设备401在实际中可以是图1中的Application 201,也可以 是DDS 202或者是Application 201和DDS 202合设的一个设备,不发明不做限定。可选的, 当数据库处理设备401为Application 201时,图4所述的系统中还包括DDS。为另外,这里 "数据库处理设备"只是一个名字,名字本身对设备不构成限定。
[0065] 如图5所示,图4中的数据库处理设备可以以图5中的计算机设备(或系统)的方式 来实现。
[0066] 图5所示为本发明实施例提供的计算机设备示意图。计算机设备500包括至少一个 处理器501,通信总线502,存储器503以及至少一个通信接口 504。
[0067] 处理器501可以是一个通用中央处理器(CPU),微处理器,特定应用集成电路 (application-specific integrated circuit,ASIC),或一个或多个用于控制本发明方案 程序执行的集成电路。
[0068]通信总线502可包括一通路,在上述组件之间传送信息。所述通信接口 504,使用任 何收发器一类的装置,用于与其他设备或通信网络通信,如以太网,无线接入网(RAN),无线 局域网(Wireless Local Area Networks,WLAN)等。
[0069] 存储器503可以是只读存储器(read-only memory,R0M)或可存储静态信息和指令 的其他类型的静态存储设备,随机存取存储器(random access memory,RAM)或者可存储信 息和指令的其他类型的动态存储设备,也可以是电可擦可编程只读存储器(Electrically Erasable Programmable Read-Only Memory,EEPR0M)、只读光盘(Compact Disc Read-Only Memory,⑶-ROM)或其他光盘存储、光碟存储(包括压缩光碟、激光碟、光碟、数字通用 光碟、蓝光光碟等)、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指 令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质,但不限于此。 存储器可以是独立存在,通过总线与处理器
当前第2页1 2 3 4 5 6 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1