- 浏览: 215415 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
julyboxer:
http://www.baobao5u.com/Product ...
喝茶的十八个层次,你属于哪一层? -
xiaolong0211:
呵呵,学习了,这两天一直在装gcc,可算装上了,谢谢
Red Hat enterprise 5 gcc安装顺序 -
run_xiao:
翻译的不是很到位啊
推荐引擎mahout相关资料 -
julyboxer:
关键价值链
B2C网络站点资源梳理 -
julyboxer:
要买的书http://product.dangdang.com ...
B2C网络站点资源梳理
体系结构概述和对比 http://blog.chinaunix.net/u/17076/showart.php?id=174108#fig1 在 DB2 、MySQL 和 PostgreSQL 之间有许多差异。我们先看看这三种数据库 服务器在基本体系结构方面的一些差异和相似之处。
MySQL 和 PostgreSQL 数据库可以几乎每周都进行特性修改,但是 DB2 中的特性实现和修改要经过非常仔细的计划,这是因为有众多的业务依赖于使用 DB2 产品。请注意,在本文中我们使用 MySQL 5.1 、PostgreSQL 8.0.3 和 DB2 V8.2 进行比较,所以在阅读本文时请考虑到这一点。 图 1 、图 2 和 图 3 是 MySQL 、PostgreSQL 和 DB2 的体系结构图。我们在阅读一些文档之后竭尽我们的能力绘制出 MySQL 和 PostgreSQL 的体系结构图。如果您发现不符合实际情况的地方,请告诉我们,我们会进行纠正。 MySQL 使用一种基于线程的体系结构,而 PostgreSQL 和 DB2 采用基于进程的体系结构。正如在 图 1 中看到的,一个 MySQL 实例可以管理许多数据库。一个实例中的所有 MySQL 数据库共享一个公用的系统编目,INFORMATION_SCHEMA 。 DB2 中的数据库是一个单独的实体,有自己的系统编目、表空间、缓冲池等等。DB2 实例管理不同的数据库,但是数据库并不共享表空间、日志 、系统编目或临时表空间。 具有许多数据库的一个 MySQL 实例可以看作 DB2 中的一个数据库,而每个 MySQL 数据库相当于 DB2 中的一个模式。如果服务器上运行几个 MySQL 实例,每个实例管理几个数据库,那么可以采用以下迁移方式之一:
注意: 当我们提到基于进程的体系结构时,指的是 UNIX® 平台,因为 Windows 上的模型是基于线程的体系结构。DB2 和 PostgreSQL 都是这样的。 在一个 DB2 连接的范围内只能访问一个数据库资源,而 MySQL 允许在同一个连接的范围内访问多个数据库资源。 MySQL 最有意思的特性之一是可插入的存储引擎。可以选择 MyISAM 、InnoDB 、Archive 、Federated 、Memory 、Merge 、Cluster 、NDB 或 Custom 存储引擎。每个存储引擎具有不同的性质,可以根据自己的特定需求选择某一存储引擎。对于比较,我们发现 InnoDB 最接近于关系数据库。 MySQL 服务器进程(mysqld )可以创建许多线程:
MySQL 使用数据缓存、记录缓存、键缓存、表缓存、主机名缓存和特权缓存来缓存和检索服务器进程中所有线程所使用的不同类型的数据。 另外,MySQL 主进程(mysqld )具有用来处理数据库管理活动 的线程,比如备份、恢复、并发控制等等。 PostgreSQL
实例(见 图 2
)可以管理一个数据库集群。每个数据库有自己的系统编目,INFORMATION_SCHEMA
和 pg_catalog
。所有数据库共享 在逻辑上,PostgreSQL 数据库可以迁移到 DB2 数据库。这两种数据库都支持模式对象类型。不能从命名的连接访问其他 数据库。 PostgreSQL 和 DB2 之间最显著的差异与表空间相关。PostgreSQL 表空间可以跨越多个数据库,而 DB2 表空间特定于一个数据库。 PostgreSQL 会话由几个主进程组成:
图 3 显示 DB2 的体系结构。这张图解释了 DB2 如何使用缓冲池在磁盘之间处理数据(文件、原始设备、目录等等)。DB2 使用一个连接集中器来处理大量连接。DB2 页清理器和预获取器异步地工作,各个进程单独处理重做日志活动。关于 DB2 中锁和进程的工作方式的详细描述,请参见 参考资料 。 DB2 会话由几个进程组成:
DB2 服务器进程通过称为数据库管理器内存(Database Manager Memory )和数据库共享内存(Database Shared Memory )的内存区域相互通信,见 图 4 。
表 1 对比了 MySQL 、PostgreSQL 和 DB2 特性。这不是一个完整的列表,但是对比了最常用的特性。 |
|||
实例 |
通过执行 MySQL 命令(mysqld )启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 mysqld 实例。一个实例管理器可以监视 mysqld 的各个实例。 |
通过执行 Postmaster 进程(pg_ctl )启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装 时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。 |
实例是一个 DB2
安装,它管理一个或多个数据库。在安装期间创建一个默认实例。使用 |
数据库 |
数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 MySQL 实例中的所有数据库共享同一个系统编目。 |
数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases 。 |
数据库是命名的对象集合,是与其他数据库分离的实体。数据库是在物理上和逻辑上独立的实体,不与其他数据库共享任何东西。一个 DB2 实例可以管理一个或多个数据库。 |
数据缓冲区 |
通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80% 。 |
Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K 。可以通过设置 postgresql.conf 文件中的 shared_buffers 参数来更新缓冲区缓存。 |
在默认情况下分配一个缓冲池,并可以使用 CREATE BUFFERPOOL 命令添加其他缓冲池。默认的页大小在创建数据库时决定,可以是 4 、8 、16 或 32K 。 |
数据库连接 |
客户机使用 CONNECT 或 USE 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 |
客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用角色管理数据库中的用户和用户组。 |
客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 id 和密码。使用操作系统命令在数据库外创建用户和用户组。 |
身份验证 |
MySQL 在数据库级管理身份验证。 |
PostgreSQL 的身份验证取决于主机配置。 |
DB2 使用 API 通过各种实现(比如 Kerberos 、LDAP 、Active Directory 和 PAM )在操作系统级对用户进行身份验证,它的可插入身份验证体系结构允许插入第三方模块。 |
加密 |
可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT 和 AES_DECRYPT 函数对列数据进行加密和解密。可以通过 SSL 连接实现网络加密。 |
可以使用 pgcrypto 库中的函数对列进行加密/ 解密。可以通过 SSL 连接实现网络加密。 |
可以使用 DB2 提供的加密和解密方法 对列数据进行加密/ 解密。如果在实例级选择 DATA_ENCRYPT 身份验证方法,那么可以对客户机和服务器之间的网络通信进行加密。 |
审计 |
可以对 querylog 执行 grep 。 |
可以在表上使用 PL/pgSQL 触发器来进行审计。 |
DB2 提供的 db2audit 实用程序可以提供详细的审计,而不需要实现基于触发器或日志的审计。 |
查询解释 |
使用 EXPLAIN 命令查看查询的解释计划。 |
使用 EXPLAIN 命令查看查询的解释计划。 |
DB2 提供的 GUI 和命令行工具可以用来查看查询的解释计划。它还可以从 SQL 缓存捕获查询并生成解释计划。可以使用工具查看所有存储过程中的 SQL 的解释计划。 |
备份、恢复和日志 |
InnoDB 使用写前(write-ahead )日志记录。支持在线和离线完全备份以及崩溃和事务恢复。 |
在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。 |
使用写前日志记录。支持完全、增量、delta 和表空间级在线/ 离线备份和恢复。支持崩溃、时间点和事务恢复。 |
JDBC 驱动程序 |
可以从 参考资料 下载 JDBC 驱动程序。 |
可以从 参考资料 下载 JDBC 驱动程序。 |
支持 Type-2 和 Type-4 (Universal )驱动程序。JDBC 驱动程序是 DB2 产品的一部分。 |
表类型 |
取决于存储引擎。例如,NDB 存储引擎支持分区表,内存引擎支持内存表。 |
支持临时表、常规表以及范围和列表类型的分区表。不支持哈希分区表。 |
支持用户表、临时表、常规表以及范围、哈希和多维簇类型的分区表。 |
索引类型 |
取决于存储引擎。MyISAM :BTREE ,InnoDB :BTREE 。 |
支持 B- 树、哈希、R- 树和 Gist 索引。 |
支持 B- 树和位图索引。 |
约束 |
支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 |
支持主键、外键、惟一、非空和检查约束。 |
支持主键、外键、惟一、非空和检查约束。 |
存储过程和用户定义函数 |
支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL 和 C++ 编写。用户定义函数可以用 SQL 、C 和 C++ 编写。 |
虽然使用术语存储过程 ,但是只支持 CREATE FUNCTION 语句。用户定义函数可以用 PL/pgSQL (专用的过程语言)、SQL 和 C 编写。 |
支持 CREATE PROCEDURE 和 CREATE FUNCTION 语句。存储过程可以用 SQL (SQL PL )、C 、Java 、COBOL 和 REXX 编写。用户定义函数可以用 SQL (SQL PL )、C 和 Java 编写。 |
触发器 |
支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 |
支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。 |
支持行前触发器、行后和语句触发器、instead of 触发器和包含 SQL PL 复合语句的触发器。可以从触发器调用存储过程。 |
系统配置文件 |
my.conf |
Postgresql.conf |
Database Manager Configuration |
数据库配置 |
my.conf |
Postgresql.conf |
Database Configuration |
客户机连接文件 |
my.conf |
pg_hba.conf |
System Database Directory |
XML 支持 |
有限的 XML 支持。 |
有限的 XML 支持。 |
为访问 XML 数据提供丰富的支持。DB2 Viper (V9 )是第一个以原生形式存储/ 检索 XML 的混合型数据库。 |
数据访问和管理服务器 |
OPTIMIZE TABLE
——
回收未使用的空间并消除数据文件的碎片 |
Vacuum
——
回收未使用的空间 |
Reorg
——
用来重新整理数据并消除数据碎片 |
并发控制 |
支持表级和行级锁。InnoDB 存储引擎支持 READ_COMMITTED 、READ_UNCOMMITTED 、REPEATABLE_READ 和 SERIALIZABLE 。使用 SET TRANSACTION ISOLATION LEVEL 语句在事务级设置隔离级别。 |
支持表级和行级锁。支持的 ANSI 隔离级别是 Read Committed (默认 —— 能看到查询启动时数据库的快照)和 Serialization (与 Repeatable Read 相似 —— 只能看到在事务启动之前提交的结果)。使用 SET TRANSACTION 语句在事务级设置隔离级别。使用 SET SESSION 在会话级进行设置。 |
支持表级和行级锁以及 4 个隔离级别:RR (可重复读)、RS (读可靠)、CS (默认 —— 游标可靠)和 UR (未提交读)。使用 SET ISOLATION 在会话级、使用 WITH 子句在 SQL 语句级或使用数据库配置参数在数据库级设置隔离级别。 |
到目前为止,我们已经看到了 MySQL 、PostgreSQL 和 DB2 在体系结构和特性方面的一些差异。现在就来研究这些数据库服务器在数据类型方面的差异。
|
|||||
|
|||||
MySQL 、PostgreSQL 和 DB2 之间的数据类型对比 SQL ANSI 标准规定了关系数据库系统中使用的数据类型的规则。但是,并非每种数据库平台都支持标准委员会定义的每个数据类型。而且,特定数据类型的厂商实现可能与标准的规定不同,甚至在所有数据库厂商之间互不相同。因此,尽管许多 MySQL 、PostgreSQL 和 DB2 数据类型在名称和/ 或含义方面是相似的,但是也有许多需要注意的差异。 表 2 列出最常用的 DB2 数据类型。我们在后面的小节中提供 MySQL 和 PostgreSQL 数据类型与 DB2 最接近的匹配。 尽管 DB2 对 SQL 有一些限制(比如对约束名的长度限制、数据类型限制等等),但是各个新版本正在系统化地消除这些限制。 |
|||||
BIGINT |
存储有符号或无符号整数,使用 8 字节的存储空间。 |
||||
BLOB |
存储长度可变的二进制数据,长度最大为 2 GB 。超过 1 GB 的长度不进行日志记录。 |
||||
CHAR(n) |
存储固定长度的字符数据,长度最大为 254 字节。使用 ‘n’ 字节的存储空间。 |
||||
CHAR(n) FOR BIT DATA |
存储固定长度的二进制值。 |
||||
CLOB |
存储长度可变的字符数据,长度最大为 2 GB 。超过 1 GB 的长度不进行日志记录。 |
||||
DATE |
存储日历日期,不包含天内的时间。使用 4 字节的存储空间。 |
||||
DEC(p,s) |
采用精度(p )1 到 31 和刻度(s )0 到 31 来存储数值。使用 (p/2) +1 字节的存储空间。 |
||||
DOUBLE |
存储浮点数,使用 8 字节的存储空间。 |
||||
FLOAT(p) |
采用精度(p )1 到 53 来存储数值。如果 p <= 24 ,那么相当于 REAL 。如果 p >= 25 ,那么相当于 DOUBLE PRECISION 。 |
||||
GRAPHIC(n) |
用于 National Language Support (NLS )和长度固定的字符串(常常是 DBCS ),长度最大为 127 字节。对于双字节字符集,使用 n*2 字节的存储空间;对于单字节字符集,使用 n 字节的存储空间。 |
||||
INT |
存储有符号或无符号整数,使用 4 字节的存储空间。 |
||||
REAL |
存储浮点数,使用 4 字节的存储空间。 |
||||
SMALLINT |
存储有符号和无符号整数,使用 2 字节的存储空间。 |
||||
TIME |
存储天内的时间,使用 3 字节的存储空间。 |
||||
TIMESTAMP |
存储日期(年、月、日)和时间(小时、分钟、秒),最大精度 6 毫秒。使用 10 字节的存储空间。 |
||||
VARCHAR(n) |
存储长度可变的字符数据,长度最大为 32,672 字节。使用 n+2 字节的存储空间。 |
||||
VARCHAR(n) FOR BIT DATA |
存储长度可变的二进制数据。使用 n 字节的存储空间。 |
||||
VARGRAPHIC(n) |
存储长度可变的双字节字符数据,长度最大为 16,336 字符。使用 (n*2)+2 字节的存储空间。 |
||||
|
发表评论
-
SQLite的体系结构介绍
2009-04-24 11:23 1461这篇文档主要描述了SQLi ... -
Version 3.3.6源代码文件结构
2009-04-24 11:19 1037转自:http://www.cnblogs.com/hustc ... -
SQLite的原子提交原理
2008-12-28 14:56 1600目录 SQLite 的原子提交原理 ... 1 ... -
PLSQL常用方法汇总
2008-04-07 11:06 1234在SQLPLUS下,实现中-英字符集转换 alter sess ... -
Native Dynamic SQL
2008-03-24 09:36 2526This chapter shows you how to u ... -
关于领域模型的种种观点
2008-01-15 10:21 1410最近看了robbin关于再次 ... -
Oracle学习总结
2007-09-06 12:25 1268Oracle的物理结构有控制文件.数据文件.日志文件 Orac ...
相关推荐
PostgreSQL & Oracle-备份技术大比拼 PostgreSQL & Oracle-备份技术大比拼 PostgreSQL & Oracle-备份技术大比拼
PostgreSQL与mysql字段对比.docx
MySQL和PostgreSQL的各种性能比较
详细描述了DB2与GreenPlum/PostgreSQL在各方面的差异,主要用于DB2数据库向GreenPlum/PostgreSQL数据库的迁移。
PostgreSQL转MySQL工具
国外大牛写的一个mysql数据库转换postgresql的脚本。亲试可以无错误运行。
MySQL、PostgreSQL、Oracle比较; 数据库基础知识.ppt
postgresql &pg源码安装编译教程
本文档主要涉及Postgresql之体系结构,包括其客户端、服务器端的文件分布体系结构,其中也有提供一些好的学习方法和学习网站。
MySQL和PostgreSQL的对比选择
在本文中我们选用MySQL 4.0.2-alpha与PostgreSQL 7.2进行比较,这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会...
PostgreSQL和MySQL协议简介.pdf
mysql2postgresql, 转换mysql模式到 PostgreSQL mysql2postgresql转换mysql模式和数据到 PostgreSQL用法使用命令在xml格式中创建转储: mysqldump --xml -u USER_NAME DB_NAME> DUMP_FILE_NAME
PostgreSQL与MySQL比较,非常具备详细分析他们之间区别和使用的文档
db2,mysql,berby,oracle,postgresql,sqlserver,sybase数据库驱动jar包
White_Paper_PostgreSQL_MySQL 比较postgresql与mysql 对比很详细
nacos2.1.0版,jar包,支持postgresql和mysql两种数据库,亲测可用,包里有jar包,properties文件、postgresql和mysql两种数据库脚本
MySQL 和 PostgreSQL 协议解析和对比
关于mysql postgreSQL oracle 10g ibm db2的安装 配置和远程连接文档 其中mysql和postgreSQL介绍了在linux下的相关过程