<div style="font-size:16px;">
<p>从 MySQL 或 PostgreSQL 迁移到 DB2 Express-C</p>
<p>用三个简单步骤迁移到 DB2</p>
<p>Vikram Khatri, Nora Sokolof, 和 Manas Dadarkar</p>
<p>2006 年 9 月 11 日发布</p>
<p>体系结构概述和对比</p>
<p>在 DB2、MySQL 和 PostgreSQL 之间有许多差异。我们先看看这三种数据库服务器在基本体系结构方面的一些差异和相似之处。体系结构模型</p>
<p>MySQL 数据库服务器使用一种基于专用服务器线程的体系结构。</p>
<p>PostgreSQL 和 DB2 使用一种专用服务器进程模型体系结构。</p>
<p>存储引擎</p>
<p>MySQL 数据库使用可插入的存储引擎体系结构。</p>
<p>PostgreSQL 和 DB2 使用专用的存储引擎。</p>
<p>表空间模型</p>
<p>MySQL 对于 InnoDB 和 NDB 存储引擎使用表空间。</p>
<p>PostgreSQL 表空间可以跨越多个数据库。</p>
<p>DB2 表空间特定于一个数据库。</p>
<p>模式支持</p>
<p>PostgreSQL 和 DB2 具有真正的模式支持。</p>
<p>MySQL 不具有真正的模式支持。MySQL 中的模式可以被看作 MySQL 数据库。</p>
<p>数据库对象名是否是大小写敏感的</p>
<p>Linux 上的 MySQL 和 PostgreSQL 使用大小写敏感的数据库名、表名和列名。</p>
<p>所有平台上的 DB2 都使用大小写不敏感的名称。但是,DB2 只按照大写存储名称。</p>
<p>数组列</p>
<p>MySQL 和 DB2 不支持数组列。</p>
<p>PostgreSQL 支持数组列。</p>
<p>身份验证</p>
<p>DB2 使用各种外部安全机制来执行身份验证,比如操作系统、PAM、Kerberos、Active Directory、LDAP 等等。它还允许插入第三方安全模块。</p>
<p>PostgreSQL 按照许多不同方式之一执行身份验证。它可以使用数据库用户/角色、操作系统、PAM、Kerberos 等等,这取决于主机配置文件(pg_hba.conf)中的设置。</p>
<p>MySQL 在数据库级实现身份验证并对密码进行加密。</p>
<p>实例体系结构</p>
<p>DB2 实例管理不同的数据库,在同一台机器上可以有许多 DB2 实例。</p>
<p>PostgreSQL 的实例概念与数据库集群相似。</p>
<p>MySQL 实例与 DB2 数据库相似。</p>
<p>MySQL 和 PostgreSQL 数据库可以几乎每周都进行特性修改,但是 DB2 中的特性实现和修改要经过非常仔细的计划,这是因为有众多的业务依赖于使用 DB2 产品。请注意,在本文中我们使用 MySQL 5.1、PostgreSQL 8.0.3 和 DB2 V8.2 进行比较,所以在阅读本文时请考虑到这一点。</p>
<p>图 1、图 2 和 图 3 是 MySQL、PostgreSQL 和 DB2 的体系结构图。我们在阅读一些文档之后竭尽我们的能力绘制出 MySQL 和 PostgreSQL 的体系结构图。如果您发现不符合实际情况的地方,请告诉我们,我们会进行纠正。</p>
<p>MySQL</p>
<p>MySQL 使用一种基于线程的体系结构,而 PostgreSQL 和 DB2 采用基于进程的体系结构。正如在 图 1 中看到的,一个 MySQL 实例可以管理许多数据库。一个实例中的所有 MySQL 数据库共享一个公用的系统编目,INFORMATION_SCHEMA。</p>
<p>DB2 中的数据库是一个单独的实体,有自己的系统编目、表空间、缓冲池等等。DB2 实例管理不同的数据库,但是数据库并不共享表空间、日志、系统编目或临时表空间。</p>
<p>具有许多数据库的一个 MySQL 实例可以看作 DB2 中的一个数据库,而每个 MySQL 数据库相当于 DB2 中的一个模式。如果服务器上运行几个 MySQL 实例,每个实例管理几个数据库,那么可以采用以下迁移方式之一:将每个 MySQL 实例迁移为同一 DB2 实例下的一个 DB2 数据库。</p>
<p>将每个 MySQL 实例迁移为只包含一个 DB2 数据库的 DB2 实例,并为每个 MySQL 数据库分配不同的模式。</p>
<p>注意: 当我们提到基于进程的体系结构时,指的是 UNIX 平台,因为 Windows 上的模型是基于线程的体系结构。DB2 和 PostgreSQL 都是这样的。</p>
<p>在一个 DB2 连接的范围内只能访问一个数据库资源,而 MySQL 允许在同一个连接的范围内访问多个数据库资源。</p>
<p>MySQL 最有意思的特性之一是可插入的存储引擎。可以选择 MyISAM、InnoDB、Archive、Federated、Memory、Merge、Cluster、NDB 或 Custom 存储引擎。每个存储引擎具有不同的性质,可以根据自己的特定需求选择某一存储引擎。对于比较,我们发现 InnoDB 最接近于关系数据库。</p>
<p>图 1. MySQL 体系结构和进程概况</p>
<p align="center"><img alt="6e8a7b9f23c8cdf66547ed89d219e620.gif" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4ebdc92cdd146cf1d5a77e43755392e6.gif"></p>
<p align="center"><img alt="6e8a7b9f23c8cdf66547ed89d219e620.gif" src="https://beijingoptbbs.oss-cn-beijing.aliyuncs.com/cs/5606289-4ebdc92cdd146cf1d5a77e43755392e6.gif"></p>
<p>MySQL 服务器进程(mysqld)可以创建许多线程:一个全局线程(每个服务器进程有一个)负责创建和管理每个用户连接线程。< |
|