大佬教程收集整理的这篇文章主要介绍了[转]DB2,PostgreSQL & MySQL体系结构概述和对比,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_944_6@DB2,POSTGResql & MysqL体系结构概述和对比 @H_944_6@在 DB2、@H_716_13@mysqL 和 POSTGResql 之间有许多差异。我们先看看这三种数据库服务器在基本体系结构方面的一些差异和相似之处。
图 1. MysqL 体系结构和进程概况 @H_944_6@@H_716_13@mysqL 服务器进程(@H_716_13@mysqLd)可以创建许多线程:
pg_databases 作为公用系统表。每个数据库是一个单独的实体,数据库的集合称为集群。一个 POSTGResql 实例可以管理一个数据库集群。一台服务器可以运行多个实例。 @H_944_6@在逻辑上,POSTGResql 数据库可以迁移到 DB2 数据库。这两种数据库都支持模式对象类型。不能从命名的连接访问其他数据库。 @H_944_6@DB2 之间最显著的差异与表空间相关。POSTGResql 表空间可以跨越多个数据库,而 DB2 表空间特定于一个数据库。 @H_944_6@2. POSTGResql 体系结构和进程概况POSTGResql 会话由几个主进程组成:
@H_944_6@特性对比 @H_944_6@表 对比了 DB2 特性。这不是一个完整的列表,但是对比了最常用的特性。
|
@H_489_4@
特性 |
@H_716_13@mysqL |
POSTGResql |
DB2 |
@H_489_4@
实例 |
通过执行 @H_716_13@mysqL 命令(@H_716_13@mysqLd)启动实例。一个实例可以管理一个或多个数据库。一台服务器可以运行多个 @H_716_13@mysqLd 实例。一个实例管理器可以监视 @H_716_13@mysqLd 的各个实例。 |
通过执行 Postmaster 进程(pg_ctl)启动实例。一个实例可以管理一个或多个数据库,这些数据库组成一个集群。集群是磁盘上的一个区域,这个区域在安装时初始化并由一个目录组成,所有数据都存储在这个目录中。使用 initdb 创建第一个数据库。 |
实例是一个 DB2 安装,它管理一个或多个数据库。在安装期间创建一个默认实例。使用 |
@H_489_4@
数据库 |
数据库是命名的对象集合,是与实例中的其他数据库分离的实体。一个 @H_716_13@mysqL 实例中的所有数据库共享同一个系统编目。 |
数据库是命名的对象集合,每个数据库是与其他数据库分离的实体。每个数据库有自己的系统编目,但是所有数据库共享 pg_databases。 |
数据库是命名的对象集合,是与其他数据库分离的实体。数据库是在物理上和逻辑上独立的实体,不与其他数据库共享任何东西。一个 DB2 实例可以管理一个或多个数据库。 |
@H_489_4@
数据缓冲区 |
通过 innodb_buffer_pool_size 配置参数设置数据缓冲区。这个参数是内存缓冲区的字节数,InnoDB 使用这个缓冲区来缓存表的数据和索引。在专用的数据库服务器上,这个参数最高可以设置为机器物理内存量的 80%。 |
Shared_buffers 缓存。在默认情况下分配 64 个缓冲区。默认的块大小是 8K。可以通过设置 POSTGResql.conf 文件中的 shared_buffers 参数来更新缓冲区缓存。 |
在默认情况下分配一个缓冲池,并可以使用 CREATE BUFFERPOol 命令添加其他缓冲池。默认的页大小在创建数据库时决定,可以是 4、8、16 或 32K。 |
@H_489_4@
数据库连接 |
客户机使用 CONNECT 或 USE 语句连接数据库,这时要指定数据库名,还可以指定用户 ID 和密码。使用角色管理数据库中的用户和用户组。 |
客户机使用 connect 语句连接数据库,这时要指定数据库名,还可以指定用户 ID 和密码。使用角色管理数据库中的用户和用户组。 |
@H_489_4@ | 身份验证 |
POSTGResql 的身份验证取决于主机配置。 |
DB2 使用 API 通过各种实现(比如 LDAP、Active Directory 和 PAM)在操作系统级对用户进行身份验证,它的可插入身份验证体系结构允许插入第三方模块。 |
@H_489_4@
加密 |
可以在表级指定密码来对数据进行加密。还可以使用 AES_ENCRYPT 和 AES_DECRYPT 函数对列数据进行加密和解密。可以通过 SSL 连接实现网络加密。 |
可以使用 pgcrypto 库中的函数对列进行加密/解密。可以通过 SSL 连接实现网络加密。 |
可以使用 DB2 提供的加密和解密方法对列数据进行加密/解密。如果在实例级选择 DATA_ENCRYPT 身份验证方法,那么可以对客户机和服务器之间的网络通信进行加密。 |
@H_489_4@
审计 |
可以对 querylog 执行 grep。 |
可以在表上使用 PL/pgSQL 触发器来进行审计。 |
DB2 提供的 db2audit 实用程序可以提供详细的审计,而不需要实现基于触发器或日志的审计。 |
@H_489_4@
查询解释 |
使用 EXPLAIN 命令查看查询的解释计划。 |
使用 EXPLAIN 命令查看查询的解释计划。 |
GUI 和命令行工具可以用来查看查询的解释计划。它还可以从 sql 缓存捕获查询并生成解释计划。可以使用工具查看所有存储过程中的 sql 的解释计划。 |
@H_489_4@
备份、恢复和日志 |
InnoDB 使用写前(write-ahead)日志记录。支持在线和离线完全备份以及崩溃和事务恢复。 |
在数据目录的一个子目录中维护写前日志。支持在线和离线完全备份以及崩溃、时间点和事务恢复。 |
使用写前日志记录。支持完全、增量、delta 和表空间级在线/离线备份和恢复。支持崩溃、时间点和事务恢复。 |
@H_489_4@
JDBC 驱动程序 |
可以从 参考资料 下载 JDBC 驱动程序。 |
可以从 参考资料 下载 JDBC 驱动程序。 |
支持 Type-2 和 Type-4(Universal)驱动程序。JDBC 驱动程序是 DB2 产品的一部分。 |
@H_489_4@
表类型 |
取决于存储引擎。例如,NDB 存储引擎支持分区表,内存引擎支持内存表。 |
支持用户表、临时表、常规表以及范围、哈希和多维簇类型的分区表。 |
@H_489_4@
索引类型 |
取决于存储引擎。@H_716_13@myISAM:BTREE,InnoDB:BTREE。 |
支持 B-树、哈希、R-树和 Gist 索引。 |
支持 B-树和位图索引。 |
@H_489_4@
约束 |
支持主键、外键、惟一和非空约束。对检查约束进行解析,但是不强制实施。 |
支持主键、外键、惟一、非空和检查约束。 |
支持主键、外键、惟一、非空和检查约束。 |
@H_489_4@
存储过程和用户定义函数 |
支持 CREATE PROCEDURE 和 create functION 语句。存储过程可以用 sql 和 C++ 编写。用户定义函数可以用 sql、C 和 C++ 编写。 |
虽然使用术语存储过程,但是只支持 create functION 语句。用户定义函数可以用 PL/pgSQL(专用的过程语言)、C 编写。 |
支持 CREATE PROCEDURE 和 create functION 语句。存储过程可以用 sql(sql PL)、C、Java、COBol 和 REXX 编写。用户定义函数可以用 Java 编写。 |
@H_489_4@
触发器 |
支持行前触发器、行后触发器和语句触发器,触发器语句用过程语言复合语句编写。 |
支持行前触发器、行后触发器和语句触发器,触发器过程用 C 编写。 |
支持行前触发器、行后和语句触发器、instead of 触发器和包含 sql PL 复合语句的触发器。可以从触发器调用存储过程。 |
@H_489_4@
系统配置文件 |
@H_716_13@my.conf |
Database Manager Configuration |
@H_489_4@
数据库配置 |
Database Configuration |
@H_489_4@
客户机连接文件 |
pg_hba.conf |
System Database Directory |
@H_489_4@
XML 支持 |
有限的 XML 支持。 |
有限的 XML 支持。 |
为访问 XML 数据提供丰富的支持。DB2 Viper(V9)是第一个以原生形式存储/检索 XML 的混合型数据库。 |
@H_489_4@
数据访问和管理服务器 |
OPTIMIZE table —— 回收未使用的空间并消除数据文件的碎片 |
VACUUM —— 回收未使用的空间 |
Reorg —— 用来重新整理数据并消除数据碎片 |
@H_489_4@
并发控制 |
支持表级和行级锁。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 语句级或使用数据库配置参数在数据库级设置隔离级别。 |
@H_824_607@
---|
@H_944_6@到目前为止,我们已经看到了 DB2 在体系结构和特性方面的一些差异。现在就来研究这些数据库服务器在数据类型方面的差异。 |
@H_489_4@
|
@H_489_4@
@H_944_6@
@H_944_6@DB2 之间的数据类型对比 @H_944_6@sql ANSI 标准规定了关系数据库系统中使用的数据类型的规则。但是,并非每种数据库平台都支持标准委员会定义的每个数据类型。而且,特定数据类型的厂商实现可能与标准的规定不同,甚至在所有数据库厂商之间互不相同。因此,尽管许多 DB2 数据类型在名称和/或含义方面是相似的,但是也有许多需要注意的差异。 @H_944_6@表 2 列出最常用的 DB2 数据类型。我们在后面的小节中提供 POSTGResql 数据类型与 DB2 最接近的匹配。 @H_944_6@尽管 DB2 对 sql 有一些限制(比如对约束名的长度限制、数据类型限制等等),但是各个新版本正在系统化地消除这些限制。 2. DB2 数据类型 |
@H_489_4@
数据类型 |
说明 |
@H_489_4@
@H_675_1688@ 存储有符号或无符号整数,使用 8 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储长度可变的二进制数据,长度最大为 2 GB。超过 1 GB 的长度不进行日志记录。 |
@H_489_4@
@H_675_1688@ 存储固定长度的字符数据,长度最大为 254 字节。使用 ‘n’ 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储固定长度的二进制值。 |
@H_489_4@
@H_675_1688@ 存储长度可变的字符数据,长度最大为 DATE |
存储日历日期,不包含天内的时间。使用 4 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 采用精度(p)1 到 31 和刻度(s)0 到 31 来存储数值。使用 (p/2) +1 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储浮点数,使用 8 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 采用精度(53 来存储数值。如果 p <= 24,那么相当于 REAL。如果 p >= 25,那么相当于 double precision。 |
@H_489_4@
@H_675_1688@ 用于 National Language Support(NLS)和长度固定的字符串(常常是 DBCS),长度最大为 127 字节。对于双字节字符集,使用 n*2 字节的存储空间;对于单字节字符集,使用 n 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储有符号或无符号整数,使用 4 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储浮点数,使用 smaLliNT |
存储有符号和无符号整数,使用 2 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储天内的时间,使用 3 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储日期(年、月、日)和时间(小时、分钟、秒),最大精度 6 毫秒。使用 10 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储长度可变的字符数据,长度最大为 32,672 字节。使用 n+2 字节的存储空间。 |
@H_489_4@
@H_675_1688@ 存储长度可变的二进制数据。使用 VArgraphIC(n) |
存储长度可变的双字节字符数据,长度最大为 16,336 字符。使用 (n*2)+2 字节的存储空间。 |
@H_489_4@
@H_944_6@ @H_944_6@DB2 @H_944_6@ @H_649_1976@ |
@H_489_4@
@H_674_541@ @H_944_6@理解 @H_690_7@mysqL 和 DB2 之间的数据类型问题 |
---|
BIGINT UNSIGNED NOT NulL auto_INCREMENT UNIQUE
。 @H_944_6@BOol 或 BooleAN 是 Tinyint(1) 的同义词。在 @H_716_13@mysqL 中,decimaL 的最大位数是 65,支持的最大小数位是 30。如果为 decimaL 指定 UNSIGNED,那么不允许负数。 @H_944_6@时间戳列不支持毫秒。 3. MysqL 数据类型
@H_489_4@数据类型
说明
BIT
固定长度的位串。
BooleAN
存储逻辑布尔值(true/false/unkNown),可以是 TRUE、true 和 1;falSE、false 和 0。
TinYBLOB
用于存储二进制对象(比如图形)的原始二进制数据,最大 255 字节。
BLOB
用于存储二进制对象(比如图形)的原始二进制数据,最大 65,535 字节。
用于存储二进制对象(比如图形)的原始二进制数据,最大 Font face="Times New Roman,777,215 字节。
LONGBLOB
用于存储二进制对象(比如图形)的原始二进制数据,最大 4GB。
CHAR(n)
CHaraCTER(n)
包含固定长度的字符串,用空格填充到长度 n。
DATE
用 3 字节的存储空间存储日历日期(年、月、日)。
datetiR_211_11845@E
用 8 字节的存储空间存储日历日期和天内的时间。
YEAR
用 1 字节的存储空间存储两位或四位格式的年份。
decimaL(p,s)
存储精确的数值,精度(p)最高为 65,刻度(s)为 30 或更高。
float
存储浮点数,限制由硬件决定。单精度浮点数精确到大约 7 位小数。UNSIGNED 属性不允许负数。
DOUBLE
REAL
存储双精度浮点数,限制由硬件决定。双精度浮点数精确到大约 15 位小数。Tinyint
存储有符号或无符号 1 字节整数。
smaLliNT
存储有符号或无符号 2 字节整数。
@H_716_13@mEDIUMINT
存储有符号或无符号 3 字节整数。
存储有符号或无符号 4 字节整数。
BIGINT
存储有符号或无符号 8 字节整数。
用于存储最多 255 字节的字符串数据。
TEXT
用于存储最多 Font face="Times New Roman,535 字节的字符串数据。
用于存储最多 Font face="Times New Roman,215 字节的字符串数据。
LONGTEXT
用于存储最多 4GB 的字符串数据。
TIME
用 3 字节的存储空间存储天内的时间。
timestAMP
VARCHAR(n)
character varying(n)
character varying
存储长度可变的字符串,最大长度由 n 指定。末尾的空格不存储。
ENUM
一种串对象,它的值只能是从值列表 ‘value1’,‘value2’,...,NulL 中选择的一个值。
SET
一种串对象,它可以具有零个或更多的值,这些值必须从值列表 ‘Font face="Times New Roman,... 中选择。
BINARY
与 CHAR 类型相似,但是存储二进制字节串而不是字符串。
VARBINARY
与 VARCHAR 类型相似,但是存储二进制字节串而不是字符串。
表 4. MysqL 数据类型到 DB2 的映射
@H_716_13@mysqL
DB2
说明
BIT
CHAR(n) FOR BIT DATA
关于用来简化迁移的 UDF 的细节,请参阅 参考资料。
BooleAN
CHAR(1)
使用检查约束来实施规则。
TinYBLOB
VARCHAR(255) fOR BIT DATA
可以使用 BLOB(255) 或 VARCHAR(255) fOR BIT DATA。在这种情况下,使用 VARCHAR 效率比较高。
BLOB
BLOB(64K)
如果长度小于 32K,那么考虑使用 VARCHAR(n) FOR BIT DATA。
BLOB(16M)
可以使用 NOT LOGGED 改进性能。
LONGBLOB
BLOB(2G)
支持的 BLOB 最大长度是 2GB。
CHAR(n)
CHaraCTER(n)
CHAR(n)
CHaraCTER(n)
在 DB2 中,‘n’ 的最大值为 254。
DATE
DATE
-
datetiR_211_11845@E
timestAMP
可以使用特殊寄存器 CURRENT TIMEZONE 对日期进行转换。
YEAR
smaLliNT
可以使用检查约束实施 YEAR 规则。
Font face="Times New Roman,s)
Font face="Times New Roman,s)
如果 p 大于 31,那么使用 DOUBLE。
float
REAL
_
DOUBLE
REAL
DOUBLE
smaLliNT
smaLliNT
使用检查约束限制值小于 256。
smaLliNT
@H_716_13@mEDIUMINT
如果需要,使用检查约束限制最大长度。
IntegeR
INT
BIGINT
BIGINT
VARCHAR(255)
对于少于 32K 的数据,使用 VARCHAR 比较高效。
TEXT
CLOB(64K)
DB2 允许为 CLOB 或 BLOB 指定长度参数。指定需要的长度,而不要使用 TinY、@H_716_13@mEDIUM 或 LONG CLOB。
CLOB(16M)
LONGTEXT
CLOB(2G)
最大长度是 2GB。如果使用 LOGGED,那么 BLOB 或 CLOB 的最大长度为 1GB。使用 NOT LOGGED 选项可以提高性能。
TIME
TIME
timestAMP
timestAMP
VARCHAR(n)
character varying(n)
VARCHAR(n)
character varying(n)
如果长度小于 32K,那么使用 VARCHAR。
ENUM
VARCHAR(n)
使用检查约束来实施规则。
SET
BINARY
CHAR(n) FOR BIT DATA
如果 n 小于 254,那么使用 CHAR(n) FOR BIT DATA;否则使用 VARBINARY
VARCHAR(n) FOR BIT DATA
如果 ‘n’ 小于 VARCHAR;否则使用 BLOB。
在 POSTGResql 中可以使用 TEXT 数据类型替代 CHAR(n) 或 VARCHAR(n)。如果存储的值的最大长度小于 32K,那么将 TEXT 列迁移为 CLOB 数据类型可能不是最好的选择。迁移工具通过检查数据对 TEXT 列进行正确的转换。
POSTGResql 可以使用精度大于 31 的 NUMERIC。将精度大于 NUMERIC 迁移为 DB2 的 DOUBLE 数据类型。
bigserial 数据类型映射到 BIGINT 并加上 IDENTITY 属性。
POSTGResql 支持对混合表达式中的数据类型进行隐式转换。DB2 支持对混合表达式中的数据类型进行显式转换。
inet
、cIDr
、@H_716_13@macaddr
。这些数据类型迁移到 DB2 中的 VARCHAR 数据类型。 @H_944_6@POSTGResql 还支持几何数据类型。迁移工具不处理几何数据类型。目前,我们假设不太需要支持对这种数据类型进行转换。如果您使用几何数据类型,那么请告诉我们,我们将在工具中提供补丁。 @H_944_6@处理 POSTGResql 中的位串数据类型需要在应用程序中做一些修改。目前,工具不提供这种支持。如果需要这种支持,请告诉我们。 @H_944_6@POSTGResql 还支持多维数组,它们最好迁移成 DB2 中的子表。但是,工具目前不支持多维数组。 5. POSTGResql 数据类型
@H_489_4@数据类型
说明
存储自动递增的惟一整数,最多 8 字节。
BIT
固定长度的位串。
BIT varying(n)
VARBIT(n)
可变长度的位串,长度为 n 位。
BooleAN
存储逻辑布尔值(t、true、y、yes 和 1,或者 f、false、n、no 和 0。
BYTEA
用于存储大型二进制对象(比如图形)的原始二进制数据。使用的存储空间是 4 字节加上二进制串的长度。
CHAR(n)
CHaraCTER(n)
包含固定长度的字符串,用空格填充到长度 n。
DATE
用 4 字节的存储空间存储日历日期(年、月、日)。
datetiR_211_11845@E
存储日历日期和天内的时间。
Font face="Times New Roman,s)
存储精确的数值,精度(p)和刻度(0 或更高。
float4
REAL
存储浮点数,精度为 8 或更低和 6 个小数位。
float8
double precision
存储浮点数,精度为 16 或更低和 15 个小数位。
smaLliNT
存储有符号或无符号 2 字节整数。
存储有符号或无符号 4 字节整数。
INT8
BIGINT
存储有符号或无符号 8 字节整数。
存储自动递增的惟一整数值,最多 4 字节存储空间。
TEXT
TIME (WITHOUT TIME ZONE |
WITH TIME ZONE)
存储天内的时间。如果不存储数据库服务器的时区,就使用 8 字节的存储空间;如果存储时区,就使用 12 字节。
存储日期和时间。可以存储或不存储数据库服务器的时区,使用 8 字节存储空间。
VARCHAR(n)
character varying(n)
character varying
存储可变长度的字符串,最大长度为 n。不存储末尾的空格。
6. POSTGResql 数据类型到 DB2 的映射
POSTGREsql
DB2
说明
BIGINT
使用 IDENTITY 属性模拟自动递增特性。
BIT
CHAR(n) FOR BIT DATA
对于长度最大为 254 字节的字符串。
BIT varying(n)
VARBIT(n)
VARCHAR(n) FOR BIT DATA
用于 Font face="Times New Roman,672 字节以下的字符串。
BYTEA
BLOB
用于 32K 和 2GB 字节之间的数据。
BooleAN
无布尔类型
CHAR(n)
CHaraCTER (n)
CHAR(n)
最多 254 字节。
DATE
DATE
可以使用特殊寄存器 CURRENT TIMEZONE 对日期进行转换。
datetiR_211_11845@E
timestAMP
可以使用特殊寄存器 Font face="Times New Roman,s)
Font face="Times New Roman,s)
如果精度大于 DOUBLE。
float4
REAL
REAL
可以使用 NUMERIC 或 float。
float8
double precision
对于大数值使用 double precision,如果精度小于 NUMERIC。
smaLliNT
smaLliNT
_
INT8
BIGINT
BIGINT
VARCHAR(n)
character varying(n)
character varying
VARCHAR(n)
如果 ‘n’ 小于等于 32K。DB2 要求指定 ‘n’,而 POSTGResql 不要求指定 ‘n’ 的值。
使用 IDENTITY 属性。
TEXT
VARCHAR(n)
CLOB
如果长度小于 VARCHAR;如果大于 BLOB。
TIME (WITHOUT TIME ZONE | WITH TIME ZONE)
TIME
没有时区。
timestAMP (WITHOUT TIME ZONE | WITH TIME ZONE)
timestAMP
没有时区。
来源:http://blog.chinaunix.net/u/17076/showart.php?id=174108
以上是大佬教程为你收集整理的[转]DB2,PostgreSQL & MySQL体系结构概述和对比全部内容,希望文章能够帮你解决[转]DB2,PostgreSQL & MySQL体系结构概述和对比所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。