`

转 高效整理1

 
阅读更多
注:原文出自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写模式也需要考虑进去,必须结合数据量和读写能力要求进行一个预算规划,不一定超准确,但是要八九不离十;

【结束】

主要是想通过回答网友的提问“如何构建千万用户级别后台数据库”,把对于此类用户级别通用性分析和设计的思路描述清楚,实在不善于文字描述,可能很多地方没有讲述到位,还请各位一起补充完毕和纠正。
分享到:
评论

相关推荐

    与高效换能相关的SCI论文简单整理

    作为一种能源,世界范围内的化石燃料消费恶化了环境,并减少了对子孙后代的持续可获得性。化石燃料是最常见的能源,但在其是有限的。过去,人类的动能、风能和水波能被浪费和忽视。科学界最近的焦点是利用这种能源...

    PDF Word Converter V2 一站式文档转换解决方案

    PDF Word Converter V2 一站式文档转换解决方案 功能亮点: ...商务办公:高效处理合同、报告和演示文稿。 个人使用:管理个人文件,如简历、日记和计划。 加入我们,体验前所未有的文档处理便捷!

    convert命令硬盘FAT32转NTFS.docx

    1. 高效转换:Convert 命令可以快速地将 FAT32 文件系统转换为 NTFS 文件系统。 2. 文件安全:Convert 命令可以保留文件系统中的所有文件和文件夹,不会导致文件丢失。 3. 灵活性高:Convert 命令可以将 FAT32 文件...

    自动化技术助力高效办公,你值得拥有!.mp4

    一项非常有用的技术是自动识别文字生成表格,它可以将大量的图片识别成文本并转换为表格形式,使得数据的整理和分析更加简便和高效。 自动识别图片文字表格的原理是通过计算机视觉和自然语言处理技术实现的。首先,...

    数字化转型必学习-数字化转型培训:企业数字化转型与运营策略

    企业数字化转型(数据治理、分析&应用) 培训目标:· 了解企业数字化转型都需要关注哪些方面 · 从数据用户角度挖掘数字化应用需求 · 学习如何对数据进行整理,构建数字化基础 · 学习数据分析和应用方法 · 学习...

    PDF,EXCEL,WORD,WPS,PPT转换为txt文件

    java的文本转换,整理了一下,好用,高效,转化pdf,支持中文pdf,及word,excel,ppt,wps文件转换!

    Android_gallery图片左右循环旋转

    网上大神的文档,我整理了一下并加入一些自己的东西整理成工程共享给大家,内附大神文档,出处忘了,百度一搜全是此大神的文档。再次向大神表示感谢。 不敢多要分,标准价,不是大神的代码不值分,而是并非原创不敢...

    云应用助力企业数字化转型-V2.0.rar

    该资料包精心整理了一系列高效策略、最佳实践案例以及实施路线图,帮助企业构建在云端运行的应用程序,以实现资源的弹性扩展、成本优化和业务的敏捷响应。通过详细阐述如何利用云平台进行数据分析、存储解决方案、...

    企业微信助理企业数字化转型.rar

    该资料精心整理了一系列高效、实用的策略和工具,旨在通过企业微信这一平台,推动企业内部管理与外部沟通的全面数字化。在这个精品资料中,您将了解到如何利用企业微信构建一个集即时通讯、任务分配、项目协作、客户...

    数字化转型时代的数据仓库.rar

    它不仅是一个经过精心整理和系统化的数据管理工具箱,更是一份指引企业如何有效利用数据资源,提升决策质量与业务效率的实用手册。这份资料涵盖了从数据集成、存储、处理到分析和应用的全过程,提供了一套完整的数据...

    语音转文字app速录宝,纯人工转写

    1 适用于会议录音转写 :完整 不怕遗漏 2 适用于培训录音转写 :专心 容易分享 3 适用于采编录音转写 :高效 节约时间 4 适用于电话录音录音转写 :纠纷凭证 一字不落 语音转写价格:1.3元每分钟,首单一折,低至一...

    【更新、更新整理!】1998-2022我国A股上市公司税收优惠数据合集,附赠权威参考文献!

    【原创整理,严禁任何团队和个人转载获利,转载必究!...础上进行拓展研究,能够帮助大家高效上手,完成科研任务! 本数据集来源权威,由我手动收集、整理,与同门多次核对,目前全网年份最新、观 测值数量最全面,

    【独家整理,更新!】2000-2022上市公司银企关系(银行关联关系)数据,赠原始数据!

    适合在此基础上进行拓展研究,能够帮助大家高效上手,完成科研任务! 本数据集来源权威,由我手动收集、整理,与同门多次核对,目前全网年份最新、观测值数 量最全面,市面上的上市公司数字化程度数据,年份较短...

    学习Go语言,基于官网的tutorial翻译、整理的文档以及代码。.zip

    学习Go语言,基于官网的tutorial翻译、整理的文档以及代码。Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在成为一门简单、高效、安全和并发的编程语言,特别适用于构建高性能的...

    批量互相替换01、02、03...09这个值的字段转为1、2、3、...9的sql脚本

    本资源包包含两个精心编写的SQL脚本,能够高效地解决数字前导零的常见问题。 优点:这个脚本特别适用于清理数据导入过程中产生的格式错误,或者统一现有数据集中的数字表示。无论您是需要清理数据,还是整理数据使...

    整理了基于Go的16种API免杀测试、8种加密测试、反沙盒测试、编译混淆、加壳、资源修改等免杀技术

    整理了基于Go的16种API免杀测试、8种加密测试、反沙盒测试、编译混淆、加壳、资源修改等免杀技术,并搜集汇总了一些资料和工具。Go语言(也称为Golang)是由Google开发的一种静态强类型、编译型的编程语言。它旨在...

    图书整理自动检错系统软件设计与研究

    图书整理自动检错系统借助高分辨率的颜色传感器,使用单片机、自动控制技术达到检测图书馆图书摆放位置,达到高效管理图书馆图书的目的。文中在深入分析系统软件设计需求基础上,构思一种新的图书整理自动检错系统,...

    基于整洁架构结合其他语言成熟结构整理的 Go 语言 Web 目录结构.zip

    它避免了复杂的语法特性,如继承、重载等,转而采用组合和接口来实现代码的复用和扩展。 高性能:Go语言具有出色的性能,可以媲美C和C++。它使用静态类型系统和编译型语言的优势,能够生成高效的机器码。 并发性:Go...

    一个项目玩转 Android 自定义 Drawable。.zip

    为了满足广大Android开发爱好者与从业者的学习需求,我们精心整理并上传了一份全面而实用的Android项目资源包。这份资源包内容丰富,涵盖了从基础知识到实战应用的全方位内容,旨在为开发者们提供一个便捷、高效的...

    不动产数据整合技术设计方案.doc

    不动产数据整合技术设计方案 不动产数据整合技术设计方案是指将不动产相关数据从不同的来源集中到一个统一的平台上,以实现数据共享...* 高效的数据共享和使用机制 * 提高的数据分析和应用能力 * 减少的数据冗余和错误

Global site tag (gtag.js) - Google Analytics