mysql海量数据的存储和访问解决方案宣贯.pdf
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
MySQL 海量数据的存储和访问解决方案宣贯 MySQL 海量数据的存储和访问解决方案宣贯是当前互联网应用中一个非常重要的课题。随着互联网应用的广泛普及,海量数据的存储和访问成为了系统设计的瓶颈问题。对于一个大型的互联网应用,每天几十亿的PV 无疑对数据库造成了相当高的负载。对于系统的稳定性和扩展性造成了极大的问题。 通过数据切分来提高网站性能,横向扩展数据层已经成为架构研发人员首选的方式。水平切分数据库,可以降低单台机器的负载,同时最大限度的降低了了宕机造成的损失。通过负载均衡策略,有效的降低了单台机器的访问负载,降低了宕机的可能性;通过集群方案,解决了数据库宕机带来的单点数据库不能访问的问题;通过读写分离策略更是最大限度了提高了应用中读取(Read)数据的速度和并发量。 目前国内的大型互联网应用中,大量的采用了这样的数据切分方案,Taobao,Alibaba,Tencent,它们大都实现了自己的分布式数据访问层(DDAL)。以实现方式和实现的层次来划分,大概分为两个层次(Java 应用为例): JDBC 层的封装, ORM 框架层的实现。就JDBC 层的直接封装而言,现在国内发展较好的一个项目是被称作“变形虫 ” (Amoeba)的项目,由阿里集团的研究院开发,现在仍然处于测试阶段(beta 版),其运行效率和生产时效性有待考究。 就ORM 框架层的实现而言,比如Taobao 的基于 ibatis 和 Spring 的的分布式数据访问层,已有多年的应用,运行效率和生产实效性得到了开发人员和用户的肯定。本文就是以ORM 框架层为基础而实现的分布式数据访问层。本课题的难点在于分库后,路由规则的制定和选择以及后期的扩展性,比如:如何做到用最少的数据迁移量,达到扩充数据库容量(增加机器节点)的目的。核心问题将围绕数据库分库分表的路由规则和负载均衡策略展开。 在讨论 MySQL 海量数据的存储和访问解决方案时,我们首先需要了解什么是数据切分。"Shard" 这个词英文的意思是"碎片 ",而作为数据库相关的技术用语,似乎最早见于大型多人在线角色扮演游戏中。"Sharding" 姑且称之为 "分片 "。 Sharding 不是一门新技术,而是一个相对简朴的软件理念。众所周知,MySQL 5 之后才有了数据表分区功能,那么在此之前,很多MySQL 的潜在用户都对MySQL 的扩展性有所顾虑,而是否具备分区功能就成了衡量一个数据库可扩展性与否的一个关键指标(当然不是唯一指标)。 数据库扩展性是一个永恒的话题,MySQL 的推广者经常会被问到:如在单一数据库上处理应用数据捉襟见肘而需要进行分区化之类的处理,是如何办到的呢?答案是: Sharding。 Sharding 不是一个某个特定数据库软件附属的功能,而是在具体技术细节之上的抽象处理,是水平扩展(Scale Out,亦或横向扩展、向外扩展)的解决方案,其主要目的是为突破单节点数据库服务器的I/O 能力限制,解决数据库扩展性问题。 通过一系列的切分规则将数据水平分布到不同的DB 或 table 中,在通过相应的DB 路由或者table 路由规则找到需要查询的具体的DB 或者 table,以进行 Query 操作。这里所说的“sharding ”通常是指 “ 水平切分 ” ,这也是本文讨论的重点。具体将有什么样的切分方式呢和路由方式呢? 我们可以通过一个 Blog 应用中的日志来说明,比如日志文章(article)表有如下字段:article_id(int),title(varchar(128)),content(varchar(1024)),user_id(int) 面对这样的一个表,我们怎样切分呢?怎样将这样的数据分布到不同的数据库中的表中去呢?其实分析 blog 的应用,我们不难得出这样的结论:blog 的应用中,用户分为两种:浏览者和blog 的主人。浏览者浏览某个blog,实际上是在一个特定的用户的blog 下进行浏览的,而blog 的主人管理自己的blog,也同样是在特定的用户blog 下进行操作的(在自己的空间下)。所谓的特定的用户,用数据库的字段表示就是“ user_id ”。就是这个 “ user_id ”,它就是我们需要的分库的依据和规则的基础。 我们可以这样做,将user_id 为 1~ 10000的所有的文章信息放入DB1中的 article 表中,将 user_id 为 10001~ 20000的所有文章信息放入DB2中的article 表中,以此类推,一直到DBn。这样一来,文章数据就很自然的被分到了各个数据库中,达到了数据切分的目的。接下来要解决的问题就是怎样找到具体的数据库呢,如何实现数据的读取和写入操作等等。 因此,在设计分布式数据访问层时,我们需要考虑到数据切分、路由规则、负载均衡策略等多方面的因素,以确保系统的稳定性和扩展性。同时,我们还需要考虑到数据的一致性和可靠性,以确保数据的安全和完整性。







- 粉丝: 2
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 工程项目管理方法的核心方法.docx
- 计算机网络技术与应用试题库.doc
- 计算机三级(网络技术)笔试275.pdf
- 电子商务产业园项目可行性研究报告.doc
- 基于YOLOv8深度学习的磁瓦表面缺陷自动化检测:实验结果与效率分析 · YOLOv8 v2.1
- 计算机网络专业学生实习报告范文.doc
- 情侣装网络营销策划方案样本.doc
- 医药电商市场现状和发展态势互联网事业部培训.ppt
- 基于HTML5的响应式网站的设计与实现论文正文.docx
- 会展策划第七章第一节会展项目管理的基本理论ppt课件.ppt
- 系统集成项目管理工程师复习小结.doc
- 内河水运建设项目管理指标体系及信息系统开发设想.doc
- 因特网信息交流与网络安全教学设计(整理).pdf
- 虚拟化项目验收报告模板.docx
- 最新国家开放大学电大《优秀广告作品评析(专)》网络核心课形考网考作业及答案.pdf
- 综合布线设计的若干要点.pptx



评论0