转载请标明出处谢谢合作:http://xiayuanfeng.iteye.com/blog/402250
如果没有一些实际的例子,上节所说的选择存储引擎可能很空洞。来让我们看下一普通的应用程序。接下来我们会看到各种各样的表以及选择哪个引擎适合它们。下一节会做个存储引擎的总结。
Logging(日志)
假如你想用MySQL实时记录电话交换机中每个电话的通话记录。还有你在APACHE安装了mod_log_sql,可以把每次访问网站的记录直接写入到表中。像这种应用,速度是最终的目标。你不想数据库作为瓶颈。MyISAM和Archive存储引擎都可以选择,因为它们消耗低以及每秒可以插入上千的记录。PBXT引擎也适合这种日志的系统。
然而,如果你决定汇总日志出报表,事情就变得有趣多了。这需要依靠查询语句了,但为了生成报表大量的收集数据会降低写入数据的错误。这样的话,应该怎么做呢?
一个解决方案是使用MySQL内部的复制特性把数据复制到第二个(子服务器)服务器上。然后把消耗时间和CPU的操作都放到这个服务器上。这就使主服务器自由的插入数据,运行查询在子服务器上,而不用担心影响实时的日志。
你也可以在低负载的时候查询数据,但是随着应用的使用越来越多,这种策略就变得不可靠了。
另一个解决方案是使用Merge表。调整程序去记录到很多表中,如web_logs_2008_01或者web_logs_2008_jan,而不是存储在一张表中。之后可以定义你想统计数据的表了。如果你想按日或者月来统计。这个策略可以使用。你仅仅是创建更多的表。如web_logs_2008_01_01。这样你查询的表是汇总表,并不会被写入了。你的应用就可以不间断的插入它自己的当前表。
只读或者经常读取的表
一些表包含的数据常用来构成一个分类或者一些排序的列表,这些数据读取的频率要高于写入的频率。如果不考虑MyISAM崩溃的情况,它还是个比较好的选择。千万不要低估崩溃的重要性。一些用户还没有明白使用一个连已写入硬盘的数据都读取不了的引擎有多么的危险。
不要相信MyISAM要比InnoDB快这些流言。这并不是绝对的正确。我们可以找出许多情形可以让InnoDB把MyISAM扔进垃圾桶。尤其针对那些集群索引和数据缓存的应用。读完了整本书,你就会明白影响存储引擎性能的因素(数据大小,I/O操作次数,主键相对的辅助索引)以及哪些对你的应用比较重要。
订单流程
当你处理任意种类的订单流程。事物处理是必须的。完成一半的订单,不会让你的客户喜欢你的服务。还有要考虑的就是引擎是否需要支持外键约束。目前为止,虽然有许多事物的引擎可以选择,但InnoDB看起来是最佳的引擎来处理这种订单式应用。
实时股票行情
如果你收集实时股票行情来做自己的分析。MyISAM可以很好的工作,然而,如果你运行的是高访问量的web service,这个服务为上千人提供了实时的股票报价。那么不应该去等待一个查询。许多客户端会同时读和写数据,因此行锁或者设计为最小化更新才是解决之道了。
公告栏和论坛
论坛对于MySQL用户是非常有趣的问题。现在已经有上百个免费的PHP和PERL的论坛了。它们之中有很多并没有有效地使用数据库。因此往往每个请求都要执行很多的语句。一般来说其中的一些语句都是独立于数据库的,因此那些语句都没有利用任意数据库的一些好的特性。他们也对于不同的论坛更新计数器和手机有用的统计信息。许多系统也常常使用一些单片表(monolithic table:译者注:我理解为一张表存放着太多不相干的字段,这张表就叫做monolithic table。可以把这张表分为不同的几张表。)来存储所有的数据。结果就是一些核心表变得频繁的读写。以及锁为了保持数据的一致性,而产生了大量的竞争。
除了设计的缺陷,大部分系统只能在中小的压力下很好的工作。然而如果网站足够的大了以及有了很大的流量。它就会变的很慢。
显而易见的解决方案是选择不同的存储引擎来处理频繁的读写。但是用户会发现系统比以前还更慢了。
用户没有发现系统使用了一些特殊的查询,像如下语句
select count(*) from table;
问题在于并不是所有的搜索引擎可以快速的执行它。MyISAM可以做到,但是其他的引擎可能做不到了。对于每个引擎都有相似的例子。下一章我们帮助你如何避免让你惊讶的事情发生以及教你怎样发现和解决这些问题。
CD-ROM的应用程序
如果你发布过使用MySQL数据文件的CD-ROM活着DVD-ROM的应用,考虑使用MyISAM或者压缩的MyISAM表。这样就非常容易保持表的独立,可以把它复制到其他的媒介中。压缩的MyISAM表比未压缩的表节省了不少空间。但是压缩的表是仅仅只读的。对于一些应用可能会有一定的问题,但是因为数据存放在只读的媒介中,对于这种特殊的情况,就没有理由不适用压缩的表了。
分享到:
相关推荐
1. **InnoDB存储引擎增强**:InnoDB是MySQL中支持事务处理的主要存储引擎,5.5版本对其进行了优化,提高了并发性能,并增强了对ACID(原子性、一致性、隔离性、持久性)的遵循。 2. **性能提升**:包括查询优化器的...
8. **新特性**:MySQL 5.7引入了一些关键特性,如InnoDB存储引擎的性能提升、JSON数据类型支持、增强的查询优化器、存储过程和函数的改进等。 9. **安全注意事项**:安装时应考虑安全最佳实践,如限制root用户远程...
### MySQL Innodb 底层存储架构详解 #### 一、概述 MySQL的InnoDB存储引擎是目前使用最为广泛的事务处理引擎之一,它提供了行级锁定、外键支持、崩溃修复能力以及多版本并发控制等功能。InnoDB存储引擎的底层存储...
此外,InnoDB存储引擎的增强使得事务处理能力更强大,减少了锁定时间,提升了并发性能。 2. **窗口函数**:MySQL 8.0引入了窗口函数,这使得在复杂查询中进行行级别的计算变得更加容易,如计算排名、移动平均等,而...
这个压缩包“mysql-odbc-5.1-Mac.zip”包含了适用于不同体系架构的驱动程序,即64位和32位版本,以确保在各种Mac系统上兼容性。主要文件“mysql-connector-odbc-5.1.13-osx10.7-x86-64bit.dmg”是针对OS X 10.7...
MySQL 5.5是一个重要的版本,因为它引入了许多性能改进和新特性,如InnoDB存储引擎的增强、更好的查询优化器以及更高效的并发处理能力。 描述中的"mysql mysql linux linxu 5.5 5.5"进一步确认了我们关注的是MySQL ...
1. **InnoDB存储引擎优化**:提高了并发性能,支持事务处理和行级锁定。 2. **查询优化器改进**:更好的查询计划选择,提高了查询效率。 3. **分区功能增强**:支持更多的分区类型和更灵活的分区策略。 4. **Full-...
**MVC三层架构详解** **一、MVC模式概述** MVC(Model-View-Controller)模式是一种软件设计模式,广泛...通过实践这个简单的MVC小例子,你可以深入理解每个组件的工作原理,并逐渐掌握如何在实际项目中运用MVC模式。
分布式存储架构是一种利用网络将多个物理存储设备互连在一起,协同工作以提供数据存储服务的架构。分布式存储系统具备高可靠、易扩展、高性能等特点,适用于大数据、云计算、高并发访问等应用场景。 首先,分布式...
在Java Web开发中,"jsp+servlet+bean+mysql"是一个经典的组合,它们共同构建了Web应用程序的基础架构。本文将详细解析这些技术及其在实际应用中的作用。 **JSP(JavaServer Pages)** 是一种动态网页技术,允许...
在Linux操作系统中,安装32位的MySQL数据库服务器是一个相对复杂的过程,特别是因为现代Linux发行版通常默认支持64位架构。以下是一个详尽的步骤指南,解释如何在Linux环境下安装MySQL 5.6.22 32位版本。 首先,...
【日志大数据架构演变分析实践】探讨了在大数据背景下,如何有效地管理和利用日志数据。日志数据在现代IT系统中扮演着至关重要的角色,它们是系统行为的记录,可以帮助我们进行故障排查、性能监控、安全审计以及业务...
根据给定的信息,本文将详细解释“Flex-Jsp-Mysql简单结合例子”这一主题,包括Flex、JSP以及MySQL在项目中的应用与交互,并重点分析MVC架构在Flex中的实现方式。 ### Flex简介 Flex是一种用于构建跨浏览器、跨...
### MySQL 实现树形查询的函数存储过程实例详解 #### 一、背景介绍与需求分析 在MySQL数据库中,有时我们需要处理具有层级关系的数据结构,例如产品分类、组织架构等。这种情况下,我们通常需要查询出某个节点及其...
在这个例子中,下载的是 `mysql-5.5.28-linux2.6-x86_64.tar.gz` 和 `libaio1_0.3.106-8ubuntu1_amd64.deb`。确保这两个文件与你的服务器架构相匹配,如果是32位系统,则需要下载相应的32位版本。 2、**安装 libaio...
在这个例子中,文件名为"MySQL-5.6.22-1.el6.i686.rpm-bundle.tar",这表明它是针对Red Hat Enterprise Linux 6 (RHEL 6)的i686架构。 2. **解压**:使用`tar -xvf MySQL-5.6.22-1.el6.i686.rpm-bundle.tar`命令来解...
在Android应用开发中,连接MySQL数据库是常见的需求,特别是在构建需要后台数据支持的应用时。这里我们将探讨如何在Android客户端通过网络连接到远程MySQL服务器,并执行相关的数据库操作。 首先,理解客户端-...
综上所述,这个简单的注册登录例子涉及了Java后端开发、数据库设计、Web交互等多个方面,是初学者学习Web开发和实践基础技能的一个良好起点。通过这个项目,开发者可以深入了解Java与MySQL的集成,以及如何构建一个...