网站大量收购独家精品文档,联系QQ:2885784924

海量数据:可配置的分库分表22.pdf

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
海量数据:可配置的分库分表22

海量数据:可配置的分库分表 2.12.1 背景 为了应对产品海量⽤户的愿景需求,这⾥将设计⼀个分布式的数据库存储 案,以便 能满⾜数据量的骤增、云服务的横向扩展、后台接⼜开发的兼容性,以及数据迁移等 问题,避免⽇后因为全部数据都存放在单台服务器上的限制。 2.12.2 主要思想 1、分库分表 2、路由规则 3、扩展字段 4 、可配置 5、SQL语句⾃动⽣成 (1)分库分表 是指将不需要进⾏必要关联查询的表分开存放,如存放事件推送的weili_event_pushto 和存放标签的weili_tag ;同时,对于 同⼀个表,因为存放的数据量是可预见式的暴 增,如上述的weili_event_pushto ,每时每刻都会产⽣⼤量的来⾃⽤户发布的事件,因 此为了突破 MySQL单表的限制以及其他问题,需要将此表同时创建N份。 (2)路由规则 在上⾯进⾏了分库分表后,开发⼈员在读取时,就需要根据相应的规则找到对应 的数 据库和数据库表,这⾥建议每个表都需要有int(11)类型的id字段,以便作为分表的参 考。 (3)扩展字段 在完成了分库分表和制定路由规则后,考虑到⽇后有数据库的D 变更,为减少D 变 更对现有数据库表的影响,这⾥建议每个表都增加text类型的extra_data字段,并且使 ⽤j son格式进⾏转换存储。 (4)可配置 在有了N 台数据库服务器以及每个表都拆分成M张表后,为减少后台接⼜开发⼈员的 压⼒,有必须在后台接⼜框架提供可配置 的⽀持。即:数据库的变更不应影响开发⼈ 员现有的开发,也不需要开发⼈员作出代码层⾯的改动,只需要稍微配置⼀下即可。 关于这块,请见下⾯的框架实现部 分。 (5)SQL语句⾃动⽣ 对于相同表的建表语句,可以通过脚本来⾃动⽣成,然后直接导⼊数据即可。 2.12.3 PhalApi框架的实现⽅案 PhalApi框架主要需要实现的是路由这⼀层的映射,并且通过可配置的 式进⾏控制, 同时还应⽀持⽣产环境和测试环境的异同,如在测试环境我们明显不需要1000张数据 库的表。为此,需要提供⼀种 表名 + id 映射到 数据库服务器 + 具体哪张表 的规则。 如上图所⽰,表名会统⼀加上前缀,并且将id按⼀定的表总数进⾏取模,最后再根据 得到的具体表名,通过映射表查找到对应 的数据库服务器进⾏操作。其中,model层 为开发实现,数据库表的映射由接⼜框架实现⽀持。 2.12.4 使⽤⽰例 (1)配置数据库的路由配置 修改./Config/dbs.php⽂件,以下是参考的⽰例配置。其中servers为D 服务器,包括数 据库的账号信息等,tables为数据库表的映射关系,其中default下标为缺省的数据库路 由。 在每个数据库表⾥⾯,可以配置多个数据库表,通过开始的下标start和结束的下标end 来对表进⾏分布式存放,并且如果没有start和end的,则视为不需要拆分存放,同时也 是当找不到合适时的拆分表时所采⽤的默认配置。 return array( /** * avaiable db servers */ servers = array( db_demo = array( host = localhost, //数据库域名 name = test, //数据库名字 user = root, //数据库⽤户名 password = 123 56, //数据库密码 port = 3306, //数据库端⼝ ), ), /** * custom table map */ tables = array( __default__ = array( prefix = tbl_, key = id,

文档评论(0)

pfenejiarz + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档