下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

数据库的优化

作者:java乐园     来源: 今日头条点击数:697发布时间: 2020-02-29 16:57:58

标签: 数据库数据分析数据管理

数据库优化不为人知道的阶段。数据库(Database),简而言之可视为电子化的文件柜——存储电子文件的处所,用户可以对文件中的数据运行新增、截取、更新、删除等操作。 所谓“数据库”系以一定方式储存在一起、能予多个用户共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。一个数据库由多个表空间(Tablespace)构成。

面试的时候,经常会被面试官问到数据库优化方面的知识点。今天来总结一下数据库优化应该经过几个阶段,我觉得这样回答是一个比较优的答案。

数据库的优化_数据库_数据分析_数据管理_课课家

面试的时候,经常会被面试官问到数据库优化方面的知识点。今天来总结一下数据库优化应该经过几个阶段,我觉得这样回答是一个比较优的答案。

0x01:SQL优化及应用程序优化

一个系统总是从小到大,所以在系统还是小型系统的时候。首先应该注重表的设计,合理使用主键、外键、索引;字段选用合适的数据类型、合适的数据长度。使用SQL考虑索引什么情况是有效的;什么时候是失效的,避免使用索引失效的SQL。

另外应该程序优化也很重要,比如能批量执行SQL,就不要在程序中循环执行SQL。使用各种框架的缓存也非常重要,例如,如果使用MyBatis时,就好合理使用MyBatis的一级缓存和二级缓存;使用Hibernate时,就好合理使用Hibernate的一级缓存和二级缓存等。

0x02:数据库读写分类

当业务量达到一定程度时,可以考虑数据库的读写分离方案,让读写业务分离。但是一定要考虑如何解决写库与读库的数据一致性问题。目前,很多开源的读写分离服务和框架。主要基于如下两种方案:

  • 应用程序根据业务逻辑来判断,增删改等写操作命令发给写库,查询命令发给读库。
  • 利用中间件来做代理,负责对数据库的请求识别出读还是写,并分发到不同的数据库中。

0x03:引入缓存数据库

Nosql数据库目前也是大行其道,特别Redis数据库。例如使用Redis缓存服务器,可以把一些常用、不经常变化的数据缓存到内存。在内存读取数据的数据要比在硬盘读取的速度不知道快多少倍。引入缓存数据库增加了系统的复杂度,另外还有考虑关系型数据库与NoSQL数据库数据一致性的问题。

0x04:垂直拆分

一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:

优点:

  • 拆分后业务清晰,拆分规则明确
  • 系统之间整合或扩展容易
  • 数据维护简单

缺点:

  • 部分业务表无法join,只能通过接口方式解决,提高了系统复杂度
  • 受每种业务不同的限制存在单库性能瓶颈,不易数据扩展跟性能提高
  • 事务处理复杂

0x05:水平拆分

垂直拆分后遇到单机瓶颈,可以使用水平拆分。相对于垂直拆分的区别是:垂直拆分是把不同的表拆到不同的数据库中,而水平拆分是把同一个表拆到不同的数据库中。

相对于垂直拆分,水平拆分不是将表的数据做分类,而是按照某个字段的某种规则来分散到多个库之中,每个表中包含一部分数据。简单来说,我们可以将数据的水平切分理解为是按照数据行的切分,就是将表中 的某些行切分到一个数据库,而另外的某些行又切分到其他的数据库中,主要有分表,分库两种模式。如下图:

分库模式

分表模式

优点:

  • 不存在单库大数据,高并发的性能瓶颈
  • 对应用透明,应用端改造较少
  • 按照合理拆分规则拆分,join操作基本避免跨库
  • 提高了系统的稳定性跟负载能力

缺点:

  • 拆分规则难以抽象
  • 分片事务一致性难以解决
  • 数据多次扩展难度跟维护量极大
  • 跨库join性能较差
    大数据(big data)是指无法在一定时间内用常规软件工具对其内容进行抓取、管理和处理的数据集合。大数据有五大特点,即大量(Volume)、高速(Velocity)、多样(Variety)、低价值密度(Value)、真实性(Veracity)。它并没有统计学的抽样方法,只是观察和追踪发生的事情。 大数据的用法倾向于预测分析、用户行为分析或某些其他高级数据分析方法的使用。
赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程