数据库的一些基本知识(1)------数据库引擎,------数据库引擎
MySQL数据库提供了十三种不同的存储引擎来应对不同的数据处理。大部分使用过MySQL的人应该都知道MySQL所常用的两个存储引擎:MyISAM 和 InnoDB。大多数情况下,MyISAM 是作为MySQL默认的存储引擎而存在的。事实上我们大多数人在使用MySQL的时候都没有去配置存储引擎而直接采用MySQL默认的MyISAM 。如果你需要在特定的表上面使用特定的存储引擎,你可以使用下面的命令行:
CREATE TABLE tablename (column1, column2, [etc...]) ENGINE = [storage_engine].
那么什么是数据库引擎呢?
简单说来,一个数据库的存储引擎就是用来对数据表进行信息存储、处理、查询等操作。这个世界上不存在十全十美的存储引擎,但是对于大部分的应用来说,默认的MyISAM 就够用了。在MySQL内置的10种不同的存储引擎中,并不是所有的引擎都是可用的。你可以使用下面的命令来查询你的MySQL服务器提供的存储引擎:
代码:mysql -uroot -p Password: mysql> show engines;这个命令会列出你的服务器所支持的存储引擎列表:
- MyISAM
- InnoDB
- MERGE
- MEMORY (HEAP)
- BDB (BerkeleyDB)
- EXAMPLE
- ARCHIVE
- CSV
- BLACKHOLE
- ISAM
MyISAM
MyISAM 事实上是 ISAM 存储引擎的一个分支。如果你的应用不需要TRANSACTION,也不需要行级别的锁(它只提供表级别的锁),那么这是选择MyISAM是最优方案了。MyISAM 特别适合于INSERT/UPDATE操作少而SELECT 操作多的应用场景。当你的应用需要进行大量的INSERT/UPDATE操作时,你需要考虑是否应该换一个存储引擎,因为表级别的锁会让这个操作造成性能问题。
MyISAM 支持的最大行数为 ~4.29E+09,每个表的索引数目限制为64。MyISAM 同时也为 TEXT/BLOB类型的列提供了全索引支持,这样很方便进行搜索等操作。InnoDB
相对于MyISAM, InnoDB提供了更多特性来提升系统性能。这也导致了InnoDB在初始化的时候会比MyISAM花更多的时间,但是这样带来的好处远比初始化额外花的时间要多。其中一个主要的不同就是InnoDB提供了行级别的锁。这就为并发的 INSERT/UPDATE/DELETE 操作提供了可能,不像MyISAM那样要等一个操作完成才能进行下一个操作。
同时, InnoDB 还提供了外键功能。这可以保证你在往表二插入数据之前表一的相关数据已经存在。而且这还会阻止你在表一中删除表二所依赖的数据。InnoDB还提供了数据的缓存已经在内存和磁盘上建立索引,这样可以大大的提升系统性能。也许对于那些低内存的系统来说,这不是一个理想的解决方案,但是对于内存足够的系统来说就不是问题了。
MERGE
MERGE ,从MySQL 3.23.25 开始添加的存储引擎。它让用户可以对一个MyISAM 集合进行统一操作,就像是操作一个表一样。但是使用这个引擎有一些约束,比如所有的表格都必须是统一的定义。
MEMORY (HEAP)
HEAP 存储引擎,也叫做 MEMORY,允许在内存里面建表。MySQL 服务器会保留表的格式,这样可以快速的创建一个“trash”表,然后快速的读取数据以便更好的处理。不过这也使得这个存储引擎不适合长期的数据处理。
BDB (BerkeleyDB)
BerkeleyDB存储引擎处理事务安全的表,并以哈希为基础的存储系统。这个存储引擎适合快速的读写某些数据,特别是不同key的数据。但是这个存储引擎有不少缺点,比如在没有索引的列上速度很慢。也因为这个原因人们都忽视了它。我还是相信它有它的用武之地。
EXAMPLE,从MySQL 4.1.3 开始添加的存储引擎。这个存储引擎主要是为程序员服务的。EXAMPLE 提供了创建表的能力,但是无法插入或者查询信息。
ARCHIVE,从MySQL 4.1.3 开始添加的存储引擎,它经常被用来存储大规模数据(无需索引)。这个存储引擎只支持 INSERT 和 SELECT操作,而且所有的信息都是被压缩过的。这些特性让ARCHIVE很适合用来存储日志、交易记录、账户等。不过需要注意的是,在读取数据的时候,整个表都需要在数据返回之前解压并读取。因此这个存储引擎最适合使用频率较低的场景。
CSV
CSV, 从MySQL 4.1.4开始添加的存储引擎,以逗号分隔的字符串存储数据。因此这个存储引擎不适合大规模的数据存储或者需要索引的数据表等场景。这个存储引擎适合将数据转成spreadsheet 文件。
BLACKHOLE
这个存储引擎似乎看起来没什么用处,因为它不允许任何数据的存储或者查询。因此BLACKHOLE 通常被用来测试数据库的结构、索引和擦查询。你仍然可以使用 INSERTS 命令来插入,只不过所有的数据都是void
ISAM
最原始的存储引擎就是ISAM, 它管理着非事务性表。后来它就被MyISAM 代替了,而且MyISAM 是向后兼容的,因此你可以忘记这个ISAM存储引擎。
总结
总的说来,没有十全十美的数据库存储引擎。对于大多数的应用和DBA来说,选用InnoDB 和 MyISAM 基本就够用了。但是也要记住,InnoDB 和 MyISAM 虽然比较通用,但是它们并不是对所有的场景都是完美支持的,也许其他的存储引擎可以很好地支持你的应用。
下一集预告:
数据库事务隔离机制及特点;
参考文献:
1、http://www.linux.org/threads/an-introduction-to-mysql-storage-engines.4220/
1.数据库引擎
Microsoft JET (Joint Engineering Technologe) 是Access和Visual Basic所提供的内嵌数据库功能的核心元素。JET是一种全能关系数据库引擎,可用来处理大多数中小型数据库。所谓数据库引擎是应用程序和数据库存储之间的一种接口,它将与数据库有关的内存管理、游标管理和错误管理等具体而复杂的细节问题抽象为一个既高度一致又简化的编程接口。
Jet数据库引擎包含在一组动态链接库(DLL)文件中,在运行时,这些文件被链接到Visual Basic程序。它把应用程序的请求翻译成对.mdb文件或其他数据库的物理操作。它真正读取、写入和修改数据库,并处理所有内部事务,如索引、锁定、安全性和引用完整性等。它还包含一个查询处理器,用于接收并执行结构化查询语言(SQL)的查询来实现所需的数据库操作。另外,Jet数据库引擎还包含一个结果处理器.用来管理查询所返回的结果。
2.ODBC
Open DataBase Connectivity(ODBC,开放数据库互连)是由Microsoft定义的一种数据库访问标准,它提供一种标准的数据库访问方法以访问不同平台的数据库。一个ODBC应用程序既可以访问在本地PC机上的数据库,也可以访问多种异构平台上的数据库,例如SQL Server、Oracle或者DB2。
ODBC本质上是一组数据库访问API(应用编程接口),但编程人员通过ODBC访问数据库时无需深入理解ODBC函数就可以访问ODBC功能,这是因为象Visual Basic这样的开发工具都提供了一些对象封装了ODBC函数。
3.OLE DB
OLE DB是Microsoft开发的最新数据库访问接口,Microsoft将其定义为ODBC接班人。与ODBC类似,OLE DB提供了对关系数据库的访问,同时在此基础上,它对ODBC所提供的功能进行了一部分的扩展。作为一种标准的接口,OLE DB可以访问所有类型的数据,包括关系数据库、dBase等ISAM(索引序列访问方法)类型的文件、甚至E-MAIL或者Windows 2000活动目录等。
OLE DB应用程序可以分为两种:OLE DB提供者(OLE DB Provider)和OLE DB使用者(OLE DB Consumer),OLE DB使用者就是使用OLE DB接口的应用程序,而OLE DB提供者负责访问数据源,并通过OLE DB接口向OLE DB使用者提供数据。
SQL Server FullText Search (MSSQLSERVER):全文检索服务
如果有全文索引的话要启动SQL Server FullText Search 没有的话启动不启动没有影响的
SQL Server Agent 是一个任务规划器和警报管理器,在实际应用和环境下,您可以将那些周期性的活动定义成一个任务,而让其在SQL Server Agent 的帮助下自动运行;假如您是一名系统管理员,则可以利用SQL Server Agent 向您通知一些警告信息,来定位出现的问题从而提高管理效率。SQL Server Agent 主要包括以下几个组件:作业;警报;操作。
主要执行以下步骤在SQL Server Enterprise Manager 中配置SQL Server Agent:
(1) 启动SQL Server Enterprise Manager, 登录到指定的服务器打开Management 文件夹,启动SQL Server Agent。
(2) 右击SQL Server Agent 图标,在弹出菜单中选择Properties 选项。打开SQL Server Agent Properties 对话框,选中General 标签页。如图17-1 所示。其中各选项的含义为:
System account: 定义SQL Server Agent 运行于哪个系统账号下,该系统账号是sysadmin 角色的成员;
This account: 定义SQL Server Agent 运行于哪一个NT 账号下,该账号必须是运行SQL Server Agent 服务器上的sysadmin 角色,选择此选项,必须在Password处提供密码。常在下列情况中选中该选项:
把事件转寄到其它NT 计算机的应用日志;
如何来创建一个作业,该作业要使用多个计算机上的资源;
通过电子邮件或寻呼通知操作员消息。
Mail Profile 有效的邮件配置文件名,该文件保存通过SQL Mail 为SQL ServerAgent 运行账号配置的邮件系统正常工作的配置信息;
Save copies of the sent messages in the Sent Items folder: 指定发送消息存放的文件目录;
File name: 指定SQL Server Agent 日志文件名,缺省名为C:\Mssql7\Log\Sqlagent.out;
Error message pop-up recipient 指定接收网络弹出错误消息的接收者名字,这些错误消息由SQL Server Agent 写入它的错误日志。
(3) 选中Advanced 标签页
Auto restart SQL Server if it stops unexpectedly :表示如果SQL Server 意外停止运行,则将自动重新启动;
Auto restart SQL Server Agent if it stops unexpectedly: 表示如果SQL Server Agent意外停止运行,则将自动重新启动;
Forward events to a different server: 表示将事件转寄给其它服务器。在Server 旁的下拉列表中选择接收服务器;
Unhandled events: 表示转寄那些不是在本地服务器上处理的事件;All 表示所有事件;
If error has sever......余下全文>>