注:原文出自http://www.mysqlops.com/2011/11/22/database-arc.html
【导读】
关于如何构建千万级别用户的后台数据库架构话题,在ITPUB及CSDN论坛都有不少网友提问,新型问答网站知乎上也有人提问,并且顺带梳理了下思路,方便更多的技术朋友有章可循,整理一篇抛砖引玉性的文章。
一、技术朋友给出的背景资料:
(1). 网站型应用,主要指:SNS社交网站、新闻门户型网站、邮件系统、SNS Game社交游戏、电子商务网站、即时通信IM等类型系统;
(2). 注册用户为千万级别,也即1KW注册用户以内;
二、要求
构建千万级别用户的后台数据库架构分析思路,对数据层架构设计的有章可循,必须考虑数据量的大小,以及数据库提供服务的性能和系统的可靠性,适当地考虑用户量超过,以及需要使用的服务器资源等信息。
三、构建千万级别用户的后台数据库架构的分析思路
曾经发过一篇文章,关于千万级别用户应用架构设计的歌谣,供大家参考 千万级架构设计诀窍,接下来我们针对如何构建千万级别用户的后台数据库架构,给出通用性分析思路的建议,未必完全靠谱,但求基本靠谱(注:毕竟很多事情需要看具体业务而定的):
(1). 一定要区分业务类型,可能达到千万用户级别的应用业务场景,可归类描述为: SNS社交平台、SNS社交游戏、即时通信IM系统、电子商务、邮件系统、新闻门户网站等,这些不同类型的业务场景做法会不一样,主要是由他们业务性质决定,后续分析项中逐一描述;
(2). 应用业务的核心KPI数值,产品每天的日活跃用户量大概多少?若是网站类型应用,还需要加入其他参数PV,UV等数据辅助决策,即时通信IM的消息量,邮件系统的新增邮件数,SNS社交平台的Feeds量等核心数据;
(3). 系统中每个用户可能产生的数据量大概多大,分固定部分,以及动态部分的方式统计分析,对非固定部分以参考值和结合实践跨度(注释:1年为硬性指标,2年为预期,3年可选,再长的时间段不考虑)的方式进行分析,然后预测出整个系统的用户锁产生的数据条数和数据容量大概的估值;
(4). 注册用户并不等于活跃用户,为此需要预估日活跃用户量大概多少?周活跃用户量大概?月活跃用户量大概多少?系统设计的最高并发量为多少?这数字还是非常有必要,不管是对数据量预估,还是对技术实现方案的选择都有帮助;
(5). 根据应用业务的特点,以及系统不同模块的功能特点,初期必须判断出可能负载最大的系统模块,对于可以静态化模块或功能,尽量要Cache起来,以降低系统的负载和提高前端响应速度;若是非Cache技术能解决的,是否可以考虑独立或通过整体水平扩展方式解决系统的负载和性能问题;
(6). 针对系统中各个模块的功能或业务特点,大致那些用户数据会累计比较大,以及那些数据操作频率比较高;
(7). 不同的业务其对数据操纵不一样,要大致明白自己的应用:读写比如关系,也即:SELECT:UPDATE:DELETE:UPDATE=?;
(8). 系统的整体架构中,必须考虑系统的稳定性、负载均衡和响应速度,为此必须考虑一些模块借助Cache、异步、消息队列等技术,进行一些特殊处理或折中做法,以达到目标;
(9). 若使用MySQL数据库产品作为后台数据库提供数据服务,建议尽量使简洁的SQL语句,并不是说不用JOIN,而是要考虑MySQL对JOIN的实现算法,符合Nested loop join优缺点中的优点;
(10). 数据库结构设计
既然说是构建千万级别用户的后台数据库架构,前面讲清楚如何熟悉和理解业务模型,清楚系统可能存在的瓶颈、技术难度,以及一些技术实现方案,现在必须回归到数据库设计阶段。
开始讨论如何收集、分析和设计数据库结构之前,我们先简单地对数据库,什么情况下要考虑进行水平拆分?尤其针对互联网行业流行的数据库产品MySQL来讨论,各大数据库技术论坛或个人博客型技术网站,有不少名言式的基调:数据量超过100W,就需要分表,MySQL无法支持大数据量的服务等等?
以前的MySQL(主要指:MySQL5.0以前版本)版本确实存在诸多问题,以及当时跑MySQL的服务器一般都是超低配置,还依然记得当时我们的数据库服务器最高也就8G内存,一般都是2G内存,硬盘都是单盘且转速是10K,甚至7500转的,而当时大多主流数据库产品Oracle跑的服务器配置却很少这么差。我们大家要一时俱进,技术人员尤其DBA或架构师,要学会以数据说话,以其中一测试用例,DELL 2950 4*15K*146G RAID1+0 ,16G内存,E5410 CPU*2 ,一张分31个分区的区表业务模型只有INSERT+SELECT,且以50个INSERT+10个SELECT线程并发执行,总记录写入数据量6KW行左右,单表数据容量超过100G,并发从最高的9100 TPS/S下降到8700 TPS/S之后就稳定在此值。
上面论述MySQL支持大表并没有太大的性能方面的下降,但是并不表示笔者建议大家这么做,至少有二点MySQL的备份和数据库结构变更非常麻烦,尤其数据库结构变更其特殊的做法,使其成为一大瓶颈,也不知道要牺牲我们多少DBA的睡眠,具体的信息大家可以参考文章MySQL数据库生产环境维护,但是对于新闻内容的存储需求,可以把新闻主题内容单独放到一张表中,以子表的方式存在,提供数据服务器,且该数据很少做变更,一般情况下是INSERT之后就只有读为主,那么就不会是任何问题,阿里巴巴旺旺弹出的新闻页面的内容就是采用此方式存储,当时单表容量接近1T,早高峰的时候也不会出现服务器性能问题,以及系统负载都非常稳定。
我们继续回到构建千万级别用户的后台数据库架构的话题上,具体建议或做法如下所示:
10.1> 数据库的设计开始之前,必须优先进行业务的数据流梳理(注释:必须尽量考虑应用所有可能的功能模块),以及对业务优先进行优化和规划,然后根据数据流和功能 考虑数据库的结构设计和优化;
10.2> 千万级别用户量,若是非游戏行业的产品(SNS游戏除外),建议考虑用户数据拆分架构设计,以及考虑后续未来1-2年的承受量,若是SNS平台必须考虑拆分,除非考虑上SSD、Fusion-io、存储等更高端的设备,用金钱换时间的方式支持技术改造;
10.3> 数据拆分的核心与难处:同一个用户的数据尽量放一起(拆分规则要尽量简单可执行),拆分之后用户关系的数据如何保存的抉择有多种(存2份或存1份放一个地方),难处数据的分页,统计合并等;
10.4> 要考虑一些冗余的方式解决SQL性能问题,但是又不能过多引入冗余而造成IO开销增加太多,冗余字段要尽量整型字段;
10.5> 数据库表对象的字段属性,要尽量考虑数字化,尤其游戏行业;
10.6> 数据库设计过程中,对于索引组织结构要偏向共同操作最优先,其次应用外部用户级别的操作性能优先,最后内部用户的操作,硬尽量隔离,例如:搜索引擎Build操作、内部编辑团队审核等操作;
10.7> 数据库要从设计角度规避一些无法通过其他技术手段解决的模糊查询,类似全文索引的模糊查询,要走搜索引擎的模式,再通过数据库读具体的数据,一些必要的计数类型的数据,适当地考虑缓存;
10.8> 重点解决数据库级别的数据分页问题,要学会从前端应用用户的体验不降低的情况下,达到更高效的数据分页做法,类如论坛中帖子分楼的做法;
10.9> 数据库的设计必须考虑使用什么类型配置的物理服务器,核心参数:内存、CPU、硬盘(这个是关键:硬盘类型(注: SATA、SAS、SSD)、多少块盘、转速、容量,以及做RAID几),RAID卡内存及RAID写模式也需要考虑进去,必须结合数据量和读写能力要求进行一个预算规划,不一定超准确,但是要八九不离十;
【结束】
主要是想通过回答网友的提问“如何构建千万用户级别后台数据库”,把对于此类用户级别通用性分析和设计的思路描述清楚,实在不善于文字描述,可能很多地方没有讲述到位,还请各位一起补充完毕和纠正。
分享到:
相关推荐
在《Word高效经典教程(整理版)》中,我们深入探讨了Word的各项功能,旨在帮助用户提升办公效率。以下是对各部分知识点的详细说明: **A、基础知识** 1. **度量单位**:在Word中,长度和间距通常使用字符、半角...
这个名为"excel批量转换为txt文本文档及数据清洗整理检查小工具"的程序专为处理大量Excel数据而设计,目的是为了方便用户将Excel文件高效地转换为适合Oracle数据库导入的TXT格式,并在转换过程中进行数据清洗和质量...
### Oracle汉字转拼音函数知识点详解 #### 一、概述 在Oracle数据库中,有时需要将汉字转换成拼音,尤其是在...通过对这些函数的深入理解,用户可以根据自己的具体需求选择合适的函数和参数,以实现高效的数据处理。
文本整理器V3.0是一款专门针对TXT文本进行高效整理的工具,旨在简化用户在处理大量文本时的工作流程。这款软件提供了四大核心功能:一键合并段落、一键文档合并、一键删除段落间空行以及一键半角全角标点符号替换。...
1. **Pdg2Pic.exe**:这是一个可执行文件,很可能是PDG转PIC转换器的主程序。用户运行这个程序,就可以将PDG格式的文件转换为PIC格式。 2. **FreePic2Pdf.exe**:同样是一个可执行文件,这应该是PIC转PDF转换器的主...
适用于需要大量文档资料整理的学生和项目开发者,特别是在毕业设计和项目开发阶段,需要快速将文档资料转换为便于搜索和定位的电子表格形式。脚本支持批量处理,能够显著提高资料整理效率,减少人工操作错误。
本教程将介绍一系列用于电子书转换、整理和查看的软件及工具,帮助你更高效地管理和享受你的电子书收藏。 一、电子书转换工具 1. **TXT转JAR**:使用"口袋书屋",这是一款绿色软件,支持根据热门手机型号制作...
"转向系统设计计算匹配整理" 本文将详细介绍转向系统的设计计算匹配整理,旨在帮助读者深入了解转向...但是,只有通过科学的设计计算和匹配整理,才能设计出一个高效、可靠的转向系统,从而提高汽车的性能和安全性。
"整理mp3转caf铃声文件"这个主题涉及了将常见的MP3音频格式转换为苹果设备专用的CAF(Core Audio Format)格式的过程。下面我们将深入探讨这一话题。 首先,MP3是一种广泛使用的音频压缩格式,以其良好的音质和相对...
"Android-Android国际化文档整理xml和excel互转"项目主要关注如何方便地管理和转换Android应用中的本地化资源。 一、Android的国际化原理 Android的国际化是通过资源文件夹来实现的。在项目的`res`目录下,我们...
综上所述,双臂转运整理机器人的设计与研究,体现了当前机器人技术的发展趋势,即朝着更智能、更高效、更灵活的方向发展。这种机器人在减轻劳动强度、提高生产效率、避免损失以及在危险环境中执行任务等方面,均具有...
《文本整理器V3[1].0:网页摘录与txt文本管理的高效工具》 在信息化时代,网络上的文章信息丰富多样,然而在摘录和整理这些信息时,我们常常面临格式杂乱、信息碎片化的困扰。为了解决这个问题,一款名为“文本整理...
【用友通现存量整理工具】是一款专为用友通财务软件用户设计的实用工具,主要功能在于帮助用户高效地管理、整理系统中的现存量数据。在企业的日常运营中,库存管理是至关重要的一个环节,它直接影响到企业的运营效率...
Word_高效排版教程(整理版)是一份全面的指南,涵盖了从基础到高级的各种Word操作技巧,旨在帮助用户提高工作效率并打造专业级别的文档。以下是对各部分知识点的详细阐述: **A、基础知识** 1. 度量单位:了解Word中...
文本整理工具是一款高效实用的应用程序,专为处理和组织大量文本数据而设计。这款工具以其轻量级的体积和无需安装的特点,深受用户喜爱。它提供了多种强大的功能,旨在简化文本处理过程,提高工作效率。 首先,该...
该工具具备多种功能,旨在优化文本的阅读和管理体验,使得大量TXT文件的处理变得轻松高效。 首先,它的核心功能之一是多文件合并。对于网络小说爱好者来说,经常遇到小说被分拆成多个TXT文件的情况,使用此工具,...
首先,文本整理器3.0具备文本格式转换的能力,能够帮助用户将不同格式的文本文件(如.txt、.csv、.doc、.docx等)进行互转,确保在各种平台和应用间无缝对接。例如,你可以轻松地将一个Word文档批量转换为纯文本格式...
描述中的“文档整理可打印”表明这是一份经过整理且适合打印的文档,可能包含清晰的图表、示意图或详细的文字说明,方便读者线下查阅和学习。而“.zip”文件格式则意味着这份资料被压缩,可以更高效地存储和传输,...
1. **Excel**:作为最基础的数据整理工具,Excel提供了丰富的功能,如排序、筛选、公式计算、图表制作等,适用于小规模数据的初步整理和分析。 2. **Pandas**:Python编程语言中的Pandas库是数据科学家的得力助手,...
在信息化时代,我们经常需要处理各种文档,从简单的记事本到复杂的代码文件,文本整理器可以帮助用户高效地管理和整理这些文本资料,提高工作效率。 首先,文本整理器的核心功能之一是批量处理。它能够一次性处理多...