优化网站性能之数据库架构篇

news/2024/5/16 19:26:08/文章来源:https://blog.csdn.net/weixin_34324081/article/details/85699810

很多小型网站的开发人员一开始将注意力放在产品需求设计上,这本无可厚非。但如果忽视整体性能、可扩展性等方面的考虑,眼看着访问量一天天往上爬,可突然发现有一天网站因为访问量过大而崩溃了,到时候哭都来不及。

我在后端设计中曾经提到,对于高并发高访问的Web应用来说,数据库存取瓶颈一直是个令人头疼的问题。特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰值已经达到500的时候,那你的程序运行离崩溃的边缘也不远了。在Web网站的规模从小到大不断扩展的过程中,数据库的架构也需要动态扩展,每一次扩展性能上都可以得到数量级的提升。

 

1. Web应用和数据库部署在同一台服务器上

Web应用和Database在同一台服务器

Web应用和Database在同一台服务器

在用户量、数据量、并发访问量都比较小的情况下可以采取这种模式。不过随着访问量增加,应用程序和数据库都抢用有限的系统资源,很快会遇到性能问题。

2. Web应用和数据库部署在各自独立的服务器上

WEB应用和数据库部署在各自独立的服务器上

WEB应用和数据库部署在各自独立的服务器上

服务分离,Web应用和数据库分开部署,服务器各司其职,在访问量增加时可以根据情况分别升级应用服务器和数据库服务器。这是一般小规模网站的典型部署方式,在将应用程序进行性能优化并且使用数据库对象缓存策略的情况下,可以承载较大的访问量,比如2000用户,200个并发,百万级别的数据量。

3. 数据库服务器采用集群方式部署

一个数据库多个实例

一个数据库多个实例

比如Oracle的一个数据库多个实例的情况。数据库物理介质为一个磁盘阵列,多个数据库实例以虚拟IP方式向外部应用服务器提供数据库连接服务。这种部署方式基本上可以满足绝大多数的Web应用需求。

4. 数据库的主从复制模式

数据库的主从复制

数据库的主从复制

在数据库访问中存在众多的查询操作,在多数情况下一个显著特点就是读操作远大于写操作,而且查询条件相对复杂,数据库的大部分性能实际消耗在查询上。假如能将数据库的读写操作分离,对于系统性能来讲会有一个很大的提高空间。

几乎所有的主流数据库都支持复制,以Mysql为例,只需要开启主服务器上的二进制日志以及在主服务器和从服务器上分别进行简单的配置和授权。主从复制是依据主服务器的日志文件进行的,主服务器日志中记录的操作会定时在从服务器上重放,从而实现复制,所以主服务器必须记录所有对于主数据库的更新操作。主从复制用于自动备份,但在这里我们的目的是读写分离。为保证数据的一致性,我们要求所有对于数据库的更新操作都是针对主数据库的,但是读操作可以针对从数据库来进行。

主从复制数据是异步完成的,这就导致主从数据库中的数据有一定的延迟,在读写分离的设计中必须要考虑这一点。以博客为例,博主发表了一篇文章,他需要马上看到自己的文章,但是对于其它读者来讲是可以允许延迟一段时间的。所以其他访问量更大的外部用户就可以读从数据库。

5. 数据库垂直分割

主从部署方式适用于读操作比写操作更加密集的前提,如果写操作占了主数据库CPU消耗的50%以上,我们再增加从服务器就没有意义了,因为所有的从服务器的写操作也将占到CPU消耗的50%以上,从服务器所能为查询操作提供的资源非常有限。数据库需要重新架构,我们需要采用数据库垂直分区技术。

最简单的垂直分区方式是将原来的数据库中独立的业务进行分拆,被分拆出来的部分与其它部分不需要进行Join连接查询操作。比如Web站点的Blog和论坛,是相对独立的,他们之间数据的关联性不是很强,这时可以将原来的的数据库拆分为一个Blog库,一个论坛库,以及剩余的表所组成的库。这三个库再各自进行主从数据库方式部署,这样整个数据库的压力就分担啦。

查询扩展性也是采用数据库分区最主要的原因之一,将一个大的数据库分成多个小的数据库可以提高查询的性能。事实上,当前十分火热的NOSQL技术就是采用空间换时间,使用key-value型的存储结构,即使有很多数据冗余,但由于避免了Join操作从而提升了性能,NOSQL在高并发高负载的网站广泛应用。

6. 数据库水平分割

在数据库的垂直分区之后,如果仍无法应对大量的写操作,这时我们需要的是水平分区。

水平分区意味着我们将同一个数据库表中的记录通过特定的算法进行分离,分别保存在不同的数据库表中,从而可以部署在不同的数据库服务器上。很多的大规模的站点基本上都是主从复制+垂直分区+水平分区这样的架构。水平分区并不依赖什么特定的技术,完全是逻辑层面的规划。对于那些频繁访问导致站点接近崩溃的热点数据,我们必须分区。

在对数据水平分区的时候,我们要找一个索引字段,比如USER_ID,它必须和所有的记录都存在关系,是分区数据库中的核心表的主键,在其它表中作为外键,并且在使用主键的时候,该主键不能是自增长的,必须是业务主键才可以。具体的分区方式有:

  • 余数分区:将User_ID%10后的值为依据存入到不同的分区数据库中,该算法简单高效,但是在分区数据库个数有变动的时候,整个系统的数据需要重新分布。
  • 范围分区:将User_ID的范围进行分区,比如1-100000范围为一个分区数据库,100001-200000范围为一个分区数据库,该算法在分区数据库个数有变动的时候,系统非常有利于扩展,但容易导致不同分区之间的压力不同,例如老用户所在的分区数据库的压力很大,但是新用户的分区数据库的压力偏小。
  • 映射关系分区:将对分区索引字段的每个可能的结果创建一个分区映射关系,这个映射关系非常庞大,需要将它们写入数据库中。比如当应用程序需要知道User_id为10的用户的BLOG内容在那个分区时,它必须查询数据库获取答案,当然,我们可以使用缓存来提高性能。这种方式详细保存了每一个记录的分区对应关系,所以各个分区有非常强的可伸缩性,可以灵活的控制,并且将数据库从一个分区迁移到另一个分区也很简单,也可以使各个分区通过灵活的动态调节来保持压力的分布平衡。

参考链接:http://blog.csdn.net/zhangzhaokun/archive/2009/10/22/4711693.aspx

 

http://www.lovelucy.info/website-database-optimization.html?variant=zh-hans

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_756094.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用TortoiseGit工具将本地文件上传到码云网/Github网站上

本篇博客主要是讲述通过TortoiseGit工具将本地磁盘文件上传到码云网对应的项目中。 对于Github开源社区,使用TortoiseGit工具将本地文件上传到Github中对应的项目具体操作步骤,也可参考本篇博客。 在上传本地文件之前,Git安装配置可参考文章&…

第三方网站不能调用微信公众平台里的图片了 显示此图片来自微信公众号平台未经允许不可引用...

下午ytkah在自己小博客搜索时看到有几篇文章图片显示不了,再访问一些网站时发现有些图片无法显示出来,显示"此图片来自微信公众号平台未经允许不可引用",如下图所示,这个应该是最近微信团队对有原创保护能力的公众帐号又…

网站的无密码登录

大部分网站,都要求用户登录。 常见的做法,是让用户注册一个账户。 这种做法并不让人满意。 对于用户来说,每个网站必须记住一个密码,非常麻烦;对于开发者来说,必须承担保护密码的责任,一旦密码泄…

互联网+时代企业网站建设该如何谋生?

互联网的时代,网络不仅拉近了人与人之间的距离,更拉近了企业与企业间的距离(也就是我们常说的B2B网站)。互联网将人们的衣食住行都连接起来,之间随时能够相互沟通交流。 这两年“支付扫码”逐渐盛行,超市购…

帝国cms 站点地图html,帝国CMS定时自动生成sitemap.xml网站地图教程【代码分享】...

帝国CMS定时自动生成sitemap.xml网站地图教程【代码分享】,很多使用帝国cms的同学都希望能自动生成网站地图,但是经常却需要手动更新,这很麻烦。下面分享帝国cms自动生成网站地图代码:首先我们要一个帝国cms地图插件或者代码&…

细说缓存在大型网站架构中的应用

缓存的基本知识 在整个计算机体系构造中(无论是硬件层面还是软件层面),缓存都是无处不在的。 在计算机硬件构造中,由于两种介质的速度不匹配,高速介质在和低速介质交互时速度趋向低速方,这就导致了高速介质…

全日空推出中文海淘网站 是不是有点晚了?

去日本的中国游客越来越多,航空公司似乎也不满足于将乘客从A点运到B点。日本最大的航空公司——全日空的母公司ANA Holdings正在公测一个中文跨境电商网站“ANA Cargo Direct”,和天猫、京东、亚马逊以及网易考拉等电商平台进行竞争。根据《日本经济新闻…

手机新闻视频资讯php,PHP历史新闻资讯类网站整站模板(带手机移动端) dedecms内核...

【温馨提示】源码包解压密码:www.youhutong.com资源描述PHP历史新闻资讯类网站整站模板(带手机移动端) dedecms内核模板介绍:织梦最新内核开发的模板,该模板属于历史、新闻、博客类企业使用。自带最新的手机移动端,同一个后台&…

Python爬虫带你爬取美剧网站

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云,作者:哲洛不闹 一直有爱看美剧的习惯,一方面锻炼一下英语听力,一方面打发一下时间…

当程序员发现了手机壁纸网站时,看他如何据为己有!

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。 ( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以…

壁纸不嫌弃多,今天带你爬取动漫壁纸网站(福利哦)

前言 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理。 ( 想要学习Python?Python学习交流群:1039649593,满足你的需求,资料都已经上传群文件流,可以自行下载&am…

如何用python 爬虫 | 检查网站情况好坏

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:努力在北京混出人样 ( 想要学习Python?Python学习交流群:1039649593,满足你的…

python爬虫- 爬取幽默笑话网站,带你一起笑翻天

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:python学习教程 ( 想要学习Python?Python学习交流群:1039649593,满足你的需求…

Python爬虫抓取纯静态网站及其资源(基础篇)

遇到的需求 前段时间需要快速做个静态展示页面,要求是响应式和较美观。由于时间较短,自己动手写的话也有点麻烦,所以就打算上网找现成的。 中途找到了几个页面发现不错,然后就开始思考怎么把页面给下载下来。 由于之前还没有了…

Python爬虫抓取纯静态网站及其资源(开发篇)

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:程序员宝库 ( 想要学习Python?Python学习交流群:1039649593,满足你的需求&am…

python爬虫教程,爬取网站的视频、图片及音乐。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:python学习教程 ( 想要学习Python?Python学习交流群:1039649593,满足你的需求…

春招大盘点:找工作除了招聘网站还有哪些渠道?

又是一年毕业季,估计同学们都正在写论文、找工作两头忙,很多同学和小C“诉苦”说现在找实习的渠道太少了,招聘网站都刷完了,也没看到很合适的岗位。那找工作除了招聘网站还有什么渠道呢?其实是有的,今天就为…

Python爬虫-带你自制新闻网站,先学先会一起来学吧

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于搜狗网 作者:AI科技大本营 ( 想要学习Python?Python学习交流群:1039649593,满足你的需求&…

python网站开发-无框架开发网站,速速来学。

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于搜狗网 作者:the5fire ( 想要学习Python?Python学习交流群:1039649593,满足你的需求&…

Python开发网站,常用的目录扫描器详解

本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:py3study ( 想要学习Python?Python学习交流群:1039649593,满足你的需求&…