1.1 数据冗余
数据冗余大致分为两种:
- 数据库冗余。是指为了防止数据丢失,或者为了提高数据库性能而对整个数据库进行备份操作,这样可以防止其中一台数据库崩溃时系统平台也崩溃的情况。
- 数据表字段冗余。是指在设计数据库时,某一字段数据一个表,但它又同时出现在另外一张表或者多个表中,并且和它在本来所属表中的意义相同,那么这个字段就是一个冗余字段。
这里讨论的数据冗余主要是指第二种,即数据库表字段冗余。
在进行关系数据库设计的时候,有两种选择:
- 尽量遵循范式理论的规约,尽可能减少冗余字段,可以让数据库设计看起来精致、优美
- 合理的加入冗余字段,减少join,让数据库执行性能更快。
选择第一种方案,所牺牲的性能可以通过增加服务器,构建数据库集群,进行读写分离,架设缓存等其他方法来弥补。
但是数据冗余也有一些缺点,比如给维护带来很大的麻烦,经常更新数据的时候,为了保持数据的一致性,要在业务逻辑里重复编写很多代码。
1.2 读写分离
数据分离是把对数据库读和写的操作分开对应不同的数据库服务器,这样能有效减轻数据库的压力,也能减轻IO压力,主数据库提供写操作,从数据库提供读操作,当主数据库进行写操作时,数据要同步到从数据库,这样才能有效保证数据库完整性。Mysql有自己的同步数据技术。可以通过二进制日志来复制数据。通过日志从数据库重复主数据库的操作达到复制数据目的。Mysql提供了mysql-proxy实现读写分离操作。
图2.1 mysql读写分离结构图
1.3 数据切分
数据切分是指将一台数据库上的数据分散到多台数据库服务器上,因为使用多台服务器,所以在分担数据库负载压力的同时,还能提高系统的总体可用性。
数据切分又分为两种:垂直切分和水平切分。
1.3.1垂直切分
垂直切分就是按照系统功能模块,将每个模块访问的数据表切分到不同的数据库当中,这种切分方法适用于各模块耦合度较小的系统。使用这种方法的优缺点主要有:
优点:数据库切分规则明确;容易整合;数据维护方便等。
缺点:无法在数据库内实现表连接,只能在程序中实现,并且对访问量大而且数据超大的数据库表仍然存在性能问题;事物处理变得复杂,跨服务器的分布式事物增多;并且会照成维护困难、无法扩展等问题。
1.3.2水平切分
水平切分主要是对数据量超大的表,按照其中数据的逻辑关系,根据某个字段的某种规则,将其中的数据切分到多个数据库上。水平切分主要是适用于具有超大数据量的表且有合适的字段和规则进行水平切分的数据库。它的优缺点主要是:
优点:可以在数据库中实现表连接,不会存在超大数据量且超高负载的数据表;可以再数据库内实现事物处理,事物处理相对简单;在合理的切分规则下,扩展性较好。
缺点:切分规则比较复杂,数据的维护难度增加,人工定位数据难度增加;系统模块耦合度较高,数据迁移拆分难度增加。
所以在进行数据切分的时候,应该综合考虑垂直切分和水平切分相结合的方式,对于合适的模块进行垂直切分,当模块细化到一定程度后,这是对于个别大数据量的表进行水平的切分这样可以综合两种切分方式的优点,将数据库达到最好的优化。
1.4 全文检索
全文检索是指计算机索引程序通过扫描文章中的每一个词,对每一个词建立一个索引,知名该词在文章中出现的次数和位置,在应用数据库当中,可以使用lucene来对字段进行模糊匹配,可以比在数据库当中使用like获得更高的效率。
使用hibernate search,可以对目标数据库当中的庞大字段建立全文索引,然后对这些字段进行全文检索后获得相应的POJO,从而加快了对内容庞大字段进行模糊检索的速度。
1.5 高速缓存
缓存是任何海量web应用程序不可或缺的部分,Memcached是一个高性能的分布式内存对象缓存系统,用以减轻动态web应用的数据库负载。它通过在内存中缓存数据和对象来减少读取数据库的次数,从而 提高动态数据库驱动网站的访问速度。
Memcached是基于一个存储键值对的hashmap,需要采用不同的方式来执行数据库的读取和写入操作。执行读取操作的顺序是从web层获取请求并检查之前在缓存中存储的查询结果。如果找到所需的值,则返回它。如果未找到,则执行查询并将结果存储在缓存中,然后再将结果返回到web层。在执行写入操作时,首先执行数据库写入操作,然后将之前缓存的任何受此写入操作影响的结果设定为无效,用以防止缓存和数据库之间出现数据不一致。
缓存的优缺点主要如下:
优点:可以大幅度降低数据库负载,更好的分配了资源,提供了更快速的数据访问;
缺点:在需要访问cache的对象比较多的时候,应用程序所需要的代码量会增加很多,同时系统复杂度以及维护成本也会增高。
相关推荐
简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习mysql的读者。 简单描述数据库优化方案,以及数据库一些常用的操作,包括一些简单的查询语句,函数使用,合适学习...
MySQL数据库优化方案及应用主要关注的是提升数据库性能和系统稳定性,以应对高并发访问场景。在本文中,我们将深入探讨数据库优化的各种策略和技术,以及如何通过Amoeba for MySQL中间层代理和分布式数据库架构实现...
【MySQL 数据库优化方案】 MySQL数据库是广泛应用的关系型数据库,尤其在互联网领域,因其轻量级、高效和开源特性而受到青睐。然而,随着数据量的增长和业务需求的复杂化,数据库性能问题变得日益突出。本文将深入...
MySQL数据库设计与优化是数据库管理中的重要环节,它关乎到系统的性能、稳定性和可扩展性。本讲座由叶金荣分享,主要涵盖了多个关键方面,包括规范、基础规范、命名规范、库表规范、字段规范、索引规范以及开发环境...
MySQL数据库优化SQL篇.ppt,适用于企业级项目开发
本文将深入探讨SQL数据库优化方案,包括查询优化、索引优化、存储优化和架构优化等策略,旨在帮助你提升数据库的运行效率。 一、查询优化 查询优化是数据库优化的基础,主要涉及SQL语句的编写。合理的SQL语句可以...
MySQL 数据库查询优化方案 MySQL 数据库查询优化是指对数据库中的查询语句进行优化,以提高查询效率和数据库性能。以下是 MySQL 数据库查询优化的一些重要知识点: 一、索引相关 索引是 MySQL 数据库查询优化的...
### MySQL数据库性能优化 #### 一、概览 在当今高度依赖互联网技术的世界里,数据库作为数据存储的核心组件,其性能直接影响着应用系统的响应速度和用户体验。MySQL作为一款广泛使用的开源关系型数据库管理系统,...
MySQL数据库后台优化方案.pdf
java开发之MySQL数据库性能优化
MySQL数据库概览 MySQL是由瑞典MySQL AB公司开发的小型数据库管理系统,它属于开源软件范畴,意味着其源代码是开放的,可以被公众查看和修改。MySQL广泛应用于从大型企业系统到专用的嵌入式应用系统中,支持各种不同...
MySQL数据库性能优化分析是数据库优化的重要环节,对于提高数据库的运行效率和工作能力具有重要的意义。本文将从数据库运行语句、数据库索引以及构造设计等层面对MySQL数据库进行深入的分析,并对数据库的索引进行...
MySQL 数据库与 SQL 优化 + 集群 + 负载均衡 MySQL 数据库与 SQL 优化是提高数据库性能的关键一步骤。 SQL 优化可以通过优化数据库结构、索引、查询语句等方式来实现。下面是 MySQL 数据库与 SQL 优化的主要知识点...
本文将深入探讨如何在C#中使用MySQL数据库连接池。 首先,我们需要了解什么是数据库连接池。数据库连接池是一种资源管理技术,它预先创建并维护一定数量的数据库连接,当应用需要时,可以从池中获取连接,使用完毕...
MySQL数据库是世界上最受欢迎的开源关系型数据库管理系统之一,其设计理念在于提供快速、可靠的数据存储解决方案。在《MySQL数据库原理及应用(第2版)(微课版)》中,我们通常会深入探讨数据库的基本概念、设计...
秒杀应用的MySQL数据库优化是一个重要的议题,尤其是在高并发、数据处理速度要求极高的场景下。这类应用常常面临巨大的压力,如瞬间涌入的大量请求、数据读写速度、以及资源的有效利用。本篇文章将深入探讨如何针对...
MySQL数据库架构优化方案 在面对日益增长的业务负载时,数据库架构的优化至关重要。本文将探讨如何通过一系列策略减轻MySQL数据库的压力,以提高系统性能。 一、引入读写分离,优化初见成效 针对业务库负载突然...