给数据库减负的八个思路,盘它!
1. 缓存
首先第一种解决方案就是缓存了。
缓存,我们可以将数据直接缓存在内从中,例如 Map、也可以使用缓存框架如 Redis 等,将一些需要频繁使用的热点数据保存在缓存中,每当用户来访问的时候,就可以直接将缓存中的数据返回给用户,这样可以有效降低服务器的压力。可以缓存起来使用的数据,一般都不能对实时性要求太高。
2、页面静态化
页面静态化其实可以算作是缓存的另外一种形式,相当于直接将相关的页面渲染结果缓存起来。首先大家知道,在我们的 Web 项目中,资源分为两大类:
- 静态资源
- 动态资源
静态资源就是我们常见的 HTML、CSS、JavaScript、图片等资源,这些资源可以不经过服务端处理,就可以直接返回给前端浏览器,浏览器就可以直接显示出来。动态资源则是指我们项目中的 Servlet 接口、Jsp 文件、Freemarker 等,这些需要经过服务端渲染之后,才可以返回前端的资源。在实际项目中,静态资源的访问速度要远远高于动态资源,动态资源往往很容易遇到服务器瓶颈、数据库瓶颈,因此,对于一些不经常更新的页面,或者说更新比较缓慢的页面,我们可以通过页面静态化,将一个动态资源保存为静态资源,这样当服务端需要访问的时候,直接将静态资源返回,就可以避免去操作数据库了,降低数据库的压力。例如我本人以前做过的一个电商项目,系统根据大数据统计,自动统计出用户当前搜索的热点商品,这些热点商品,10 分钟更新一次,也就是说,在十分钟内,用户登录上来看到的热点商品都是相同的。那么就没有必要每次都去查询数据库,而是将热点数据的页面,通过输出流自动写到服务器上,写成一个普通的 HTML 文件,下次用户来访问,在 10 分钟有效期内,直接将 HTML 页面返回给用户,就不必操作数据库了。一般来说,Freemarker、Velocity 等都有相关的方法可以帮助我们快速将动态页面生成静态页面。这就是页面静态化。
3、数据库优化
很多时候程序跑得慢,不是因为设备落后,而是因为数据库 SQL 写的太差劲。
要解决海量数据的问题,数据库优化肯定也是不可避免的。一般来说,我们可以从 SQL 优化、表结构优化、以及数据库分区分表等多个方面来对数据库进行优化。
4、热点数据分离
数据库中的数据,虽然是海量数据,但是这些数据并不见得所有数据都是活跃数据,例如用户注册,有的用户注册完就消失的无影无踪了,而有的用户则在不停的登录,因此,对于这两种不同的用户,我们可以将活跃用户分离出来,在主要操作的数据表中只保存活跃用户数据。每次用户登录,先去主表中查看有没有记录,有的话,直接登录,没有的话,再去查看其他表。
通过判断用户在某一段时间内的登录次数,就可以很快分离出热点数据。
5、合并数据库操作
这个方案的宗旨其实是减少数据库操作的次数,例如多次插入操作,我们可以合并成一条 SQL 搞定。多个不同条件的查询,如果条件允许的话,也可以合并成为一个查询,尽量减少数据库的操作,减少在网络上消耗,同时也降低数据库的压力。
6、数据库读写分离
数据库的读写分离其实在之前的 MyCat 中也和大伙聊过了(MyCat 系列),读写分离之后,一方面可以提高数据库的操作效率,另一方面也算是对数据库的一个备份。
7、分布式数据库
数据库读写分离之后,无形中增大了代码的复杂度,所以一般还需要借助分布式数据库中间件,这样可以有效提高数据库的弹性,可以方便的随时为数据库扩容,同时也降低代码的耦合度。
8、NoSQL 和 Hadoop
另外,引入 NoSQL 和 Hadoop 也是解决方案之一。NoSQL 突破了关系型数据库中对表结构、字段等定义的条条框框,使用户可以非常灵活方便的操作,另外 NoSQL 通过多个存储块存储数据的特点,使得天然具备操作大数据的优势(快)。不过,老实说,NoSQL 目前还是在互联网项目中比较常见,在传统的企业级应用中还是比较少见。
Hadoop 就不必说了,大数据处理利器。很多时候技术和架构只是一个工具,所有的东西都摆在你面前,关键是如何把这些东西组合在一起,使之产生最大化收益,这就需要大家慢慢琢磨。好了,简单的从 8 个方面和大家聊一聊这个问题,大家在工作中有没有遇到类似问题呢?你都是怎么处理的?欢迎留言讨论。
扩展阅读
警告:ORA-00600 2252 错误正在SCN问题下不断爆发
史上最全近百条Oracle DBA日常维护SQL脚本指令
开源正在吞噬软件业?看开源的7大理念
20万DBA都在关注的11个问题
DBA跳槽应该去大公司还是小公司?99%的人这样说...
MySQL DBA面试高频三十问
10个简单步骤,完全理解SQL
北冥有 Data,其名为鲲,鲲之大,一个 MySQL 放不下!
日均5亿查询量的京东订单中心,为什么舍MySQL用ElasticSearch?
史上最全Oracle体系结构整理
数据和云小程序『DBASK』在线问答,随时解惑 欢迎了解和关注。
在线问答即时回复
数据和云
ID:OraNews
如有收获,请划至底部,点击“在看”,谢谢!
公司简介 | 招聘 | DTCC | 数据技术嘉年华 | 免费课程 | 入驻华为严选商城
zCloud | SQM | Bethune Pro2 | zData一体机 | MyData一体机 | ZDBM 备份一体机
Oracle技术架构 | 免费课程 | 数据库排行榜 | DBASK问题集萃 | 技术通讯
升级迁移 | 性能优化 | 智能整合 | 安全保障 | 架构设计 | SQL审核 | 分布式架构 | 高可用容灾 | 运维代维
云和恩墨大讲堂 | 一个分享交流的地方
长按,识别二维码,加入万人交流社群
请备注:云和恩墨大讲堂
给数据库减负的八个思路,盘它!相关推荐
- 给数据库减负的八个思路
传统的企业级应用,其实很少会有海量应用,因为企业的规模本身就摆在那里,能有多少数据?高并发?海量数据?不存在的! 不过在互联网公司中,因为应用大多是面向广大人民群众,数据量动辄上千万上亿,那么这些海量 ...
- 零售门店促销创新的八个思路
每年的五一黄金周对于很多商家来说,都是一场你死我活的终端 促销 大战,如果活动做得好不但可以赚得个盆满钵满,还能赢得顾客口碑为后续销售打下良好基础,可一旦活动做不好,落得个赔了夫人又折兵的下场不说,甚 ...
- 完全优化MySQL数据库性能的八大巧方法
1.选取最适用的字段属性 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽 ...
- 多级缓存设计详解 | 给数据库减负,刻不容缓!
关注我们获得更多内容 作 者 简 介 王梓晨 物流研发部架构师,GIS 技术部负责人,2012 年加入京东,多年一线团队大促备战经验,负责物流研发一些部门的架构工作,专注于低延迟系统设计与海量数据处理 ...
- 【PHP MySQL】数据库专题 第八课 表连接
[PHP & MySQL]✔️数据库专题✔️ 第八课 表连接 概述 表连接 内连接 左连接 右连接 全连接 概述 从今天开始, 小白我将带领大家一起来补充一下 数据库的知识. 表连接 表连接 ...
- 正大国际期货:国际期货中的八条看盘技巧!
国际期货投资成为金融交易市场越来越受重视的投资品种,炒期货也并不再是什么新鲜词汇,跟炒股一样逐渐走进大众的视界,再加上期货是T+0多空双向交易,对比炒股T+1且只能做多不能空的交易机制而言,期货投资是 ...
- 数据库原理(八)- 关系代数
数据库原理(八)- 关系代数 前言 传统的集合运算 并(union) 差(except) 交(intersection) 笛卡尔积(cartesian product) 专门的集合运算 选择(sele ...
- 京东java多级缓存_京东技术:多级缓存设计详解 | 给数据库减负
来这里找志同道合的小伙伴! 作 者 简 介 王梓晨 自古兵家多谋,<谋攻篇>,"故上兵伐谋,其次伐交,其次伐兵,其下攻城.攻城之法,为不得已",可见攻城之计有很多种,而 ...
- 京东java多级缓存_多级缓存设计详解 | 给数据库减负,刻不容缓!
来这里找志同道合的小伙伴! 作 者 简 介 王梓晨 自古兵家多谋,<谋攻篇>,"故上兵伐谋,其次伐交,其次伐兵,其下攻城.攻城之法,为不得已",可见攻城之计有很多种,而 ...
最新文章
- [转载]“java.sql.SQLException:指定了无效的 Oracle URL”
- APACHE-TOMCAT集群环境部署
- WARN [com.mchange.v2.async.ThreadPoolAsynchronousRunner] - com.mchange.v2.as
- ant design中的栅格化系统
- 解决remove @override annotation
- 与众不同 windows phone (29) - Communication(通信)之与 OData 服务通信
- intellij中重命名一个文件
- Log4j配置学习文档之一 log4j配置
- vmware使用技巧
- org.apache.hadoop 的jar包下载地址
- DatagramPacket.getData()与DatagramPacket.getLength()的误区
- JNI中调用Java函数
- 【20CSPS提高组】动物园
- 大功率LED的热功率计算_51CAE_新浪博客
- discuz!3.3自带微信插件实现微信端自定义菜单
- 在php中phr是什么意思,虽败犹荣 AGO.phr:WESG让我们如获新生
- 洁厕灵的工作原理、使用方法和危害 //2021-1-27
- 生活随记 - 准备过苦日子咯^_^
- 第一节:基础概念介绍(黄老师)
- PS2021中文汉化版软件安装教程
热门文章
- 数据开放 数据集_您可以使用开放数据做什么?
- (18) Node.js npm包管理工具
- Python笔记(2) Python基础
- HTML5的web开发,基于Html5技术的WEB开发
- bullzip ms access to mysql_Bullzip MS Access To MySQL(Access转MySQL工具)
- mysql log stats_MySQL慢查询之pt-query-digest分析慢查询日志
- python3 一年中的天数 时间转化为北京时_Python3?环境搭建
- caffe,caffe2 and pytorch
- C# 使用Quartz简单实例以及备忘
- Oracle PLSQL 客户端 连接Oracle12.2 出现权限问题的解决办法以及绿色版Oracle客户端的使用....