我的编程空间,编程开发者的网络收藏夹
学习永远不晚

优化MySQL 还是使用缓存?

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

优化MySQL 还是使用缓存?

  今天我想对一个Greenfield项目上可以采用的各种性能优化策略作个对比。换言之,该项目没有之前决策强加给它的各种约束限制,也还没有被优化过。

  具体来说,我想比较的两种优化策略是优化MySQL和缓存。提前指出,这些优化是正交的,唯一让你选择其中一者而不是另一者的原因是他们都耗费了资源,即开发时间。

 优化MySQL

  优化MySQL时,一般会先查看发送给mysql的查询语句,然后运行explain命令。稍加审查后很常见的做法是增加索引或者对模式做一些调整。

  优点

  1、一个经过优化的查询对于所有使用应用的用户来说都是快速的。因为索引通过对数复杂度的速度来检索数据(又名分制,正如你搜索一个电话簿一样,逐步缩小搜索范围),而且随着数据量的递增也能维持良好的性能。对一个未经索引化的查询的结果做缓存随着数据的增长有时候则可能会表现得更差。随着数据的增长,那些未命中缓存的用户可能会得到很糟糕的体验,这样的应用是不可用的。

  2、优化MySQL不需要担心缓存失效或者缓存数据过期的问题。

  3、优化MySQL可以简化技术架构,在开发环境下复制和工作会更加容易。

  缺点

  1、有一些查询不能光通过索引得到性能上的改善,可能还需要改变模式,在某些情况下这对于一些应用可能会很麻烦。

  2、有些模式的更改可能用于反规范化(数据备份)。尽管对于DBA来说,这是一项常用的技术,它需要所有权以确保所有的地方都是由应用程序更新,或需要安装触发器来保证这种变化。

  3、一些优化手段可能是MySQL所特有的。也就是说,如果底层软件被移植到多个数据库上工作,那么很难确保除了增加索引外一些更复杂的优化技术可以通用。

 使用缓存

  这种优化需要人来分析应用的实际情况,然后将处理代价昂贵的部分从MySQL中剥离出来用第三方缓存替代,比如memcached或Redis。

  优点

  1、缓存对于一些MySql自身很难优化的查询来说会工作地很好,比如大规模的聚合或者分组的查询。

  2、缓存对于提高系统的吞吐率来说可能是个不错的方案。比如对于多人同时访问应用时响应速度很慢的情况。

  3、缓存可能更容易构建在另一个应用之上。比如:你的应用可能是另一个用MySQL存储数据的软件包的前端,而要对这个软件包做任何数据库方面的改动都非常难。

  缺点

  1、如果数据对外提供多种存取范式(例如,在不同的页面上用不同的形式展示),那么让缓存过期或者更新可能会很难,同时/或者可能需要容忍已过期的数据。一个可行的替代方案是设计一套更加精细的缓存机制,当然它也有缺点,即多次获取缓存会增加时延。

  2、缓存一个产生代价昂贵的对象对于那些未命中缓存的用户(见优化MySQL的优势#1)而言可能会产生潜在的性能差异。一些好的性能实践表明你应该尽量缩小用户之间的差异性,而不仅仅是平均化(缓存倾向于这么做)。

  3、幼稚的缓存实现无力应对一些微妙的漏洞,比如雪崩效应。就在上周我帮助了一个人,他的数据库服务器被多个试图同时再生同样缓存内容的用户请求冲垮。正确的策略是引入一定级别的锁来将缓存再生的请求序列化。

 总结

  一般情况下,我会建议用户先对MySQL进行优化,因为这是我认为开始阶段最合适的解决方案。但长期来看,大部分应用都会有一些用例需要一定程度上同时实现以上这些方案。

  原文链接: Morgan Tocker   翻译: 伯乐在线 - 高磊

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

优化MySQL 还是使用缓存?

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

优化MySQL 还是使用缓存?

今天我想对一个Greenfield项目上可以采用的各种性能优化策略作个对比。换言之,该项目没有之前决策强加给它的各种约束限制,也还没有被优化过。具体来说,我想比较的两种优化策略是优化MySQL和缓存。提前指出,这些优化是正交的,唯一让你选择
2022-05-28

Android编程使用缓存优化ListView的方法

本文实例讲述了Android编程使用缓存优化ListView的方法。分享给大家供大家参考,具体如下: ListView调用Adapter的getView方法获取每一个Item布局,将这些已经获得的Item布局放入缓存,将大大提高获取数据的效
2022-06-06

如何使用php函数来优化缓存机制?

引言:在开发网站时,为了提高性能和访问速度,缓存机制是非常重要的。PHP内置了一些函数和扩展来帮助我们实现缓存功能。本文将介绍如何使用PHP函数来优化缓存机制,并提供具体的代码示例。一、了解缓存机制在开始优化缓存机制之前,首先需要了解缓存的
2023-10-21

如何实现MySQL底层优化:缓存机制的应用与优化策略

如何实现MySQL底层优化:缓存机制的应用与优化策略引言:MySQL 是世界上最流行的关系型数据库管理系统之一,广泛应用于各类业务系统中。然而,随着数据量的增长和业务的复杂化,MySQL 在高并发场景下的性能问题越来越显著。为了提升 MyS
如何实现MySQL底层优化:缓存机制的应用与优化策略
2023-11-08

Django项目缓存优化的介绍及具体使用

这篇文章主要讲解了“Django项目缓存优化的介绍及具体使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Django项目缓存优化的介绍及具体使用”吧!一、为什么要使用缓存大家可以想一下Dj
2023-06-02

如何实现MySQL底层优化:查询缓存的使用和性能分析

如何实现MySQL底层优化:查询缓存的使用和性能分析MySQL是一种常用的关系型数据库管理系统,在大数据量的场景下,优化数据库性能是非常重要的。其中,查询缓存是一个可以帮助提高MySQL性能的重要组件。本文将介绍如何使用查询缓存以及如何进行
如何实现MySQL底层优化:查询缓存的使用和性能分析
2023-11-09

分布式缓存在PHP接口性能优化中的应用(PHP接口性能优化中分布式缓存的使用)

分布式缓存(Redis、Memcached、Varnish等)可优化PHP接口性能,其工作原理是存储常用数据的副本,减少数据库访问频率。应用方式包括:存储会话数据、缓存动态内容、减轻数据库负载、改进全局一致性、提高吞吐量。优化策略有:选择合适的缓存技术、设置缓存到期时间、使用一致性哈希、限制缓存大小、实施缓存清除策略、使用缓存封装库。好处包含:降低数据库负载、减少API响应时间、提高吞吐量、增强可扩展性、降低成本。需要注意:数据一致性、缓存开销、缓存穿透、缓存雪崩、缓存停电。通过有效应用分布式缓存,PHP
分布式缓存在PHP接口性能优化中的应用(PHP接口性能优化中分布式缓存的使用)
2024-04-02

编程热搜

目录