- 1、本文档共18页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
大数据网站架构的数据库设计
大规模网站下的数据库 云组:刘欣明 PHP facebook,yahoo Java taobao,163 Python google 语言不是可伸缩性的关键,架构才是关键! 大规模网站瓶颈 数据库 HTML静态化 缓存,负载均衡 图片服务器分离 数据库集群和库表散列 数据库设计 WEB应用和数据库部署在同一台服务器上 WEB应用和数据库部署在各自独立的服务器上 数据库服务器采用集群方式部署(比如Oracle的一个数据库多个实例的情况) 数据库采用主从部署方式? 数据库垂直分割 数据库水平分割? WEB应用和数据库部署在同一台服务器上 一台服务器 Web应用 数据库 WEB应用和数据库部署在各自独立的服务器上 一台服务器 第二台服务器 Web应用 数据库 数据库服务器采用集群方式部署 DB DB DB DB(镜像) 客户端 数据库采用主从部署方式 主从复制(二进制日志文件形式) 数据库采用主从部署方式 读写分离 数据库采用主从部署方式 反向代理 数据库采用主从部署方式 好处一:实现服务器负载均衡 ?好处二:通过复制实现数据的异地备份 好处三:提高数据库系统的可用性 数据库垂直分割 数据库水平分割 1.余数分区 将User_ID%10后的值为依据存入到不同的分区数据库中 2.范围分区 User_ID的范围进行分区,比如1-100000范围为一个分区数据库,100001-200000范围为一个分区数据库 3.映射关系分区 将对分区索引字段的每个可能的结果创建一个分区映射关系 数据库垂直+水平分割 基于ORM缓存的数据库表设计 以减少数据库服务器IO为最终目的,而不是减少发送到数据库的sql条数。 尽量避免多表关联查询,尽量拆成多个表单独的主键查询。 基于ORM缓存的数据库表设计 举例:blogs,blog_contents,accounts 比较: Select blogs.*,blog_contents.content,account.name from bogs left join blog_contents on blogs.blog_content_id = blog_contents left join accounts on blogs.account_id = account.id; 第一步:分布查询 Blogs = Blog.order(‘id desc’).page(params[:page]); 第二步:主键查询(利用缓存直接获取) Select blog_contents.* from blog_contents where blog_contents.id = 29; Select blog_contents.* from blog_contents where blog_contents.id = 28; …… Select blog_contents.* from blog_contents where blog_contents.id = 27; 基于ORM缓存的数据库表设计 拆分column而非row实现细粒度对象缓存 方式一 方式二 将大字段拆分出来,放在一个单独的表里面,表只有主键和大字段,外键放在主表当中; 将不参加where条件和统计查询的字段拆分出来,放在独立的表中,外键放在主表当中。 按照column拆表本质上是一个去关系化的过程。主表只是保留参与关系运算的字段,将非关系型的字段剥离到关联表当中,关联表仅允许主键查询,以key-value DB的方式来访问。 id authorid time content id authorid time contentid id content
文档评论(0)