您的位置:首页 > 编程语言 > C语言/C++

用C语言扩展Python的功能

2009-09-03 21:39 459 查看
当今有许多免费的 RDBMS(Relational Database Management
System,关系数据库管理系统),其中一些是开放源码软件,另一些是商业厂商提供的免费产品。如果您正在使用 C/C++、Java™、.NET
或 PHP
开发应用程序,想寻找一种可靠的数据服务器,希望它支持先进的技术、具有不断扩大的开发人员社区并已经部署在许多关键的业务解决方案中,那么可以考虑采用
新的 DB2® Express-C。本文讨论如何很快地开始在自己的应用程序中使用 DB2
Express-C,本文还将提供一个针对应用程序优化的自动化与调优场景。

为什么要使用 DB2 Express-C?

DB2
Express-C 基于与 DB2 Universal Database™(UDB) Express Edition V8.2.2
产品一样的核心技术。Linux® 和 Windows® 平台(32 位和 64 位)上的 DB2 Express-C 可以从 IBM 免费 下载
。IBM
在 2006 年 1 月 1 日推出了 DB2 Express-C,这是 DB2 Universal Database Express
Edition(DB2 Express)的一个版本。它为 C/C++、Java、.NET、PHP
等应用程序的构建和部署提供了一个稳定的数据库环境。

IBM Cloudscape™ 和 Express-C 都可以从
IBM 免费获得,它们都可以用于开发和部署应用程序。因为这两种数据库服务器都基于开放标准,比如 SQL 和 JDBC,所以很容易在它们之间迁移
Java 应用程序和数据库。如果您目前正在使用 Cloudscape 或 Apache Derby,那么可以考虑使用免费的实用程序 Cloudscape Workbench
将数据库迁移到 DB2,并尝试一下新的 DB2 Express-C。虽然与 Cloudscape 相比,DB2 Express-C
的下载包和磁盘占用更大,但是 DB2 提供了更多的工具。它还提供更多的特性,比如全面支持 .NET 应用程序,而且适合 PHP
应用程序。DB2 Express-C 最多可以利用两个 CPU 和 4GB 内存,数据库的规模也不受限制。DB2
可以让一个数据库跨许多磁盘,从而改进可伸缩性和性能。

DB2 Express-C
是一种产品化的数据库服务器,它秉承了 Linux 和 Windows 上持续改进的 DB2 产品的创新技术。自 1995 年起已经可以在
Windows 上使用 DB2,Linux 版本是从 1999 年开始的。如果对 DB2 的历史感兴趣,建议阅读文章 “总览图: IBM DB2 通用数据库和信息管理
”(developerWorks,2003 年 1 月)。


可能会问,“如果数据库服务器需要超过 4GB 的内存和两个以上的 CPU 来支持我的应用程序,那么该怎么办?”
在这种情况下,可以很容易地迁移到 Linux、Windows 或 UNIX® 上的 UDB Enterprise Server
Edition(ESE)。DB2 ESE 是一种可靠的大规模数据服务平台,能够支持 TB 级数据量。DB2 ESE
可以可选地添加数据分区功能(Database Partitioning Feature,DPF),从而执行并行数据库操作。从 DB2
Express-C 迁移到其他 DB2 版本是很容易的,因为它们的核心数据库引擎是相同的。

随着 DB2 Express-C 的推出,IBM 还推出了一个新的交互式 论坛
,来自 IBM 的 DB2 专家会在这里帮助大家。如果您对这个新的免费数据服务器有什么疑问的话,可以在这里寻求解答。DB2 Express-C 有一套完整的 PDF 格式的手册,还可以在全面的可搜索 Web 站点 DB2 Information Center
上获得这些信息。DB2 Information Center 会不断更新,您还可以下载 DB2 Information Center 的最新版本并将它安装在专用的服务器上,或者获得所有 DB2 UDB 产品手册

注意,DB2 Information Center 是 Linux、UNIX 和 Windows 上所有 DB2 UDB
版本通用的,所以要认识到某些高级特性,比如 Database Partitioning Feature(DPF),不能应用于 DB2
Express-C 环境。

如果打算在 Linux 上使用 DB2 Express-C,那么最好实现检查经过测试的最新的 Linux 发行版
。关于 DB2 Linux 版的另一个参考资料是 DB2 Universal Database Version 8.2 for Linux HOWTO。(参见 “参考资料
”。)









回页首

设置和运行

安装 DB2 Express-C

DB2
Express-C 的最小内存需求是 256MB(不带图形化工具)或 512MB(带图形化工具)。本文使用的机器具有超过 2GB
的内存。对于本文,我下载了 DB2 Express-C for Windows(32位)。这个下载包有 391MB,安装非常简单。将 zip
文件解压之后(在我的系统上解压后的目录并没有大多少,只有 412MB),执行可执行文件
setup

。这会启动 DB2 Express Launchpad,如 图 1
所示。这个图形化安装程序询问的问题只有安装 DB2 Express-C 的位置以及 DB2 Administration Server 的用户 id 和密码。我执行的是 typical
安装,这包括开发工具和库。整个安装过程花费的时间小于四分钟。

图 1. DB2 Express-C Launchpad



在安装之后,显示一个 First steps 窗口(见 图 2
)。现在您可以开始创建第一个 DB2 数据库。DB2 Express-C 提供了一个示例数据库,名称为
SAMPLE

。我们将使用 DB2 Express-C 提供的一些工具针对生产环境的级别配置 SAMPLE 数据库,并解决当表增长到一百万行数据时出现的一个性能问题。

图 2. DB2 First steps











回页首

工具

DB2 Express-C 是一个维护成本很低的数据库服务器。它附带一组完整的图形化工具和命令行工具,帮助数据库管理员(DBA)进行管理。最常用的图形化工具是 DB2 Control Center
,最常用的命令行工具是 DB2 CLP
(Command Line Processor)。这些工具的名称很一般,但是它们的背后有许多先进的特性。

DB2 Express-C 提供的图形化工具可以分成几类,如 图 3
所示。可以在 General Administration Tools
类别中找到 DB2 Control Center。大多数其他图形化工具可以从 DB2 Control Center 中访问。

图 3. DB2 工具



DB2 Control Center(如 图 4
所示)向 DBA 提供数据库的操作状态。在这个示例中,SAMPLE 数据库的大小是 25MB,还没有备份。还没有配置自动维护。

图 4. DB2 Control Center - 自动化之前的 SAMPLE 数据库



可以使用 DB2 图形化工具向导快速学习如何对 DB2 执行常见的管理任务。对于 DB2 Control Center 中的每个对象,可以通过在对象上右击
进行操作。有许多向导(如 图 5
所示)可以帮助 DB2 DBA 执行常见的任务,比如创建备份数据库映像和恢复以前的映像。

图 5. DB2 工具向导



图 6
中,可以看到 SAMPLE 数据库已经增长到 537MB。这个数据库已经配置了自动备份和维护。DB2 Express-C 识别出了一个警告
状况,如 图 6
所示。我们现在研究这个状况并快速解决它。

图 6. DB2 Control Center - 自动化之后的 SAMPLE 数据库



DB2 的一个独特特性是它能够动态地监视环境,并将异常情况通知 DBA,DBA 应该及时解决这些问题,从而实现理想的环境。在 图 7
中,DB2 探测到 SAMPLE 数据库每小时的锁数量大量增加。DB2 使用数据库对象上的锁来确保事务的一致性。在这个示例中,DB2
在一小时中增加了 1150 个锁。利用分配给 DB2 服务器的内存,DB2 无法维护大量的行锁。通过增加用于锁管理的 DB2
服务器内存,就很容易解决这个问题。纠正措施可以由 DBA 执行,也可以自动执行。从 DB2 Express-C 到更大规模的 DB2
Enterprise Server Edition(ESE)环境都可以利用这种 DB2 状态监视功能。DB2 Express-C
总是为应用程序维护事务的一致性。对每个事务进行日志记录,从而确保数据库中数据的完整性。

图 7. DB2 Health Center - 锁增加



分析场景


据库应用程序的性能直接影响顾客对解决方案的满意度,实现优化的性能被认为是艺术和科学的结合。DB2 Express-C
提供了非常优秀的工具(包括图形化工具和非图形化工具)来帮助您实现高性能和可靠的应用程序。在这个场景中,我们尝试判断公司中工资最高的部门。为了实现
优化的性能,我们将使用 DB2 Express-C 提供的一些工具。

这个场景中使用的工具包括:

db2batch

Visual Explain

Design Advisor

Activity Monitor

db2batch 实用程序是对查询的运行时性能进行分析的好工具。在这个场景中,使用以下 SQL 语句执行分析:

SELECT DECIMAL(AVG(salary),12,2) as average_sal, location, deptname

FROM staff a, org b

WHERE b.deptnumb=a.dept

GROUP BY dept,location, deptname

ORDER BY average_sal DESC

STAFF

表已经增长到一百万条记录以上,因此这个查询花费的时间比以前长了。在 图 8
中显示,这个查询的执行时间是 18 秒(纽约总部办公室是工资最高的部门 —— 这并不意外)。

图 8. db2batch - 查询执行



图 9
显示,在 STAFF 表上会执行昂贵的表扫描,然后根据来自 ORG 和 STAFF 表的数据执行 Hash Join
操作。这些表上没有在执行查询期间 DB2 可用的索引。我们将使用 DB2 Design Advisor,让 DB2 在 ORG 或 STAFF
表上创建适当的新索引,从而改进这个查询的性能。

图 9. Visual explain - 查询分析



图 10
显示来自 DB2 Design Advisor 的反馈。它建议使用 DEPT 和 SALARY 列在 STAFF 表上创建一个索引。Design Advisor 的查询工作负载可以在一个文件中提供,也可以在应用程序执行期间捕获。

图 10. DB2 Design Advisor - 索引建议



图 11
显示这个索引确实对这个查询的执行有好处。它显示查询的执行时间得到了显著改进,现在只花费了 7 秒


图 11. db2batch - 查询执行的改进



图 12
确认查询的访问计划中使用了 STAFF 表上的新索引。执行查询的估计开销也显著降低了。

图 12. Visual explain - 查询计划的改变



最后,我们希望判断在这个查询执行期间使用的系统资源总量。DB2 UDB V8.2 中增加了一个新工具,称为 Activity Monitor
。它使用各种 SQL 函数和过程获得性能数据,对系统进行分析。在 图 13
中看到,查询执行了两个排序,花费的时间少于 12 秒。Activity Monitor 还提供许多其他报告,可以用来分析 DB2 Express-C 环境。

图 13. Activity Monitor - 运行时分析











回页首

开发人员、开发人员、开发人员

DB2
Express-C 的典型安装提供了开发 C/C++、Java 和 .NET 应用程序所需的驱动程序和接口。如果想为 DB2 开发 PHP 或
Perl 应用程序,也有 PHP 和 Perl 驱动程序可用。这些 PHP 和 Perl 接口由 DB2 团队中的工程师开发和维护。DB2
支持许多种数据库服务器端编程语言,包括存储过程、触发器和函数(表函数和标量函数)。可以使用 C/C++、COBOL、Java(JDBC 或
SQLJ)、.NET(CLR 兼容语言)和 SQL Procedure Language(SQL PL)编写 DB2
存储过程。存储过程语言由开发人员自己选择;但是,最常用的语言是 Java 和 SQL PL。

SQL Procedure Language(SQL PL)
存储过程被认为是本机的,因为它们作为对象存储在 Linux 和 Windows 上的 DB2 数据库中。SQL PL 已经发展成惟一的基于
ANSI SQL 标准的存储过程语言。Linux、UNIX、Windows、iSeries 和 z/OS 上的所有 DB2 数据库服务器都支持
SQL PL。DB2 Express-C 提供了一个非常有用的图形化工具 Development Center
,它用于管理 SQL 存储过程的开发、测试和部署,包括 Java 和 SQL PL 过程。在 图 14
中,使用 DB2 Development Center 来构建、测试和部署 SQL PL 过程。这里显示的过程称为 high_rollers
,它将在 DB2 Express-C 中存储并执行。因为可以在 DB2 中严密地控制存储过程的执行,所以它提供了一种控制用户对 DB2 进行访问的简便技术。

图 14. Development Center - SQL PL



Java


DB2 开发 Java 应用程序是很容易的,因为每个 DB2 客户机和服务器都提供了兼容 JDBC 3 的(类型 4)驱动程序。实际上,DB2
当前包含两种不同的 JDBC 驱动程序。根据体系结构的不同,原来的驱动程序(db2java.zip)有时候称为 Application(类型
2)和 Network(类型 3)驱动程序。更灵活的新 JDBC 驱动程序(db2jcc.jar)可以用于类型 2 或类型 4
模式,而且最新的 Java 客户机/服务器工业基准测试中已经使用了它,比如针对 DB2 和 WebSphere® Application
Server 的 SPECjAppServer 2004(参见 “参考资料
”)。DB2 的 JDBC 驱动程序(db2jcc.jar)绑定在 DB2 Run-time 客户机中。如果应用程序是纯 Java 的,那么可以将
db2jcc_license_cu.jar

db2jcc.jar

放进
CLASSPATH

中。这些文件位于 <DB2 Installation location>/SQLLIB/java 目录。Java 2
Platform Enterprise Edition(J2EE)服务器(比如 IBM WebSphere Application
Server)以及 DB2 数据服务器,提供了一种任务关键的分布式应用程序体系结构,可以支持可伸缩的应用程序。

PHP

PHP(“PHP:
Hypertext Preprocessor” 的缩写)是一种被广泛使用的开放源码的通用脚本编程语言,尤其适合进行 Web 开发并可以嵌入
HTML 中。PHP 已经被广泛地用来开发可伸缩 Web 应用程序。DB2 对 PHP 开发人员的支持近来得到了增强,增加了由 IBM 支持的
DB2 PHP 本机扩展(参见 “参考资料
”)。
PHP 是一种开放源码的脚本编程语言,这推动了数百万 Web 应用程序的开发,而且自 1995 年问世以来 PHP 一直在发展。DB2 PHP
扩展也是开放源码的。如果希望在 Windows 上使用这个扩展,又不愿意对代码进行编译,那么也可以找到必要的 Windows 库(参见 “参考资料
”)。

要设置 DB2 环境并运行 PHP,最容易的办法是下载 IBM 和 Zend Technologies 开发的免费的 Zend Core™ for IBM
。Zend
Core for IBM 是一个 PHP 开发和生产环境,它与 DB2(IBM Cloudscape
数据库服务器)紧密地集成。它为快速开发和部署数据库驱动的应用程序提供了基础。如果需要受到全面支持的 Web 技术组合(包括 PHP 支持和
DB2 支持),也可以从 Zend Technologies 获得 Zend Core for IBM 的支持选项。Zend Core for
IBM 内嵌了 Cloudscape 数据库服务器和 DB2 Express 的免费版本,这简化了部署工作。如果以后决定购买完整的 DB2
Express Edition 许可证,也可以获得对绑定的 DB2 Express 产品的支持。在 图 15
中,Zend Core for IBM 管理 Web 控制台显示已经正确地配置了 DB2 PHP 本机扩展。

图 15. Zend Core for IBM



.NET

DB2
Express-C 提供了一个 DB2 .NET 1.1 Data Provider 和一组用于 Microsoft Visual
Studio .NET 2003 的插件。Visual Studio 中的 IBM explorer 和集成的 DB2 帮助如 图 16
所示。在安装 DB2 Express-C 时,它会检查 Visual Studio .NET 2003 是否存在;如果存在,就将 DB2
特有的功能添加到 Visual Studio 中。这些插件可以减少 .NET 应用程序的开发时间。随着 DB2 UDB v8.2
的发布,增加了 .NET(CLR,Common Language Runtime)存储过程支持。

图 16. 用于 Visual Studio .NET 2003 的 DB2 插件



还可以下载免费的用于 Visual Studio 2005 的 DB2 插件 - 开发人员版
。这个开发人员版包括一个 DB2 .NET 2.0 Data Provider 和一组用于新发布的 Microsoft Visual Studio 2005 IDE 的插件。

C/C++ 等等

DB2 Express-C 为数据访问提供了两个主要的 C API —— DB2 CLI 和 Embedded SQL。当今最常用的 C/C++ API 是 DB2 Call Level Interface(CLI)

它基于 X/Open CLI 标准。这个 API 与许多 Windows 应用程序中使用的 Microsoft ODBC(Open
Database Connectivity)API 相似。用于 DB2 数据访问的 Embedded SQL
方式需要使用应用程序预处理器,将所有 SQL 引用转换为 DB2 服务器的本机访问接口。如果在应用程序开发期间 SQL 语句已经定义好了,那么
Embedded SQL 的效果非常好,因为 SQL 是可以检验的,可以在开发期间创建和锁定访问计划,这会改进应用程序性能。但是,SQL
语句常常是动态的,在这种情况下,DB2 CLI API 这样的动态 SQL 访问技术更合适。

DB2 Express-C 为开发人员提供了许多其他选择,包括 COBOL、Perl 和 Python。Perl
驱动程序可以从开放源码 Perl 社区获得,它们由 IBM 维护和支持。SourceForge.net 提供了一个更新的 DB2 Python
驱动程序(参见 “参考资料
”)。
Perl、PHP 和 Python 驱动程序都需要有效的 DB2 Run-time 客户机(用于部署)和 DB2 Application
Development Client(或完整的 DB2 Express-C)安装(用于对应用程序进行编译和构建)。









回页首

部署指导

部署数据库应用程序需要注意一些事项,包括:

安装 DB2 服务器

安装 DB2 客户机

部署应用程序本身

部署数据库

安装 DB2 服务器环境可以使用 DB2 图形化安装程序(Linux 上的
db2setup

/ Windows 上的
setup

)来完成,也可以使用响应文件(Linux 上的
db2setup -R

/ Windows 上的
setup /U <file-name>

)执行自动安装。

DB2 Run-Time Client 提供了直接访问 Linux、UNIX 或 Windows 上的 DB2 所需的所有应用程序编程接口(API)和网络客户机驱动程序。在 Windows 上还有一种更简洁的客户机,称为 DB2 Run-Time Client Lite

它的内存占用更小。DB2 Run-Time Client Lite 还提供 Merge Modules,其他基于 Windows
Installer 的安装可以使用 Merge Modules 将连接 DB2 的功能轻松地嵌入 Windows 应用程序中。


署应用程序超出了本文的范围,但是需要确保应用程序具有所需的 DB2 客户机访问库。部署数据库本身可以使用 DB2
备份映像来完成,或者数据库可以从数据摘要重新构造成加载文件。要确保应用程序依赖的任何对象(比如存储过程、触发器、视图和用户定义函数)被正确地定义
并可访问。









回页首

操作指导

DB2
Express-C 采用的核心数据库服务器技术与 Linux、UNIX 和 Windows 上的所有 DB2 服务器是一样的,而且 DB2
UDB V8.1 和 V8.2 中引入的许多特性大大简化了 DBA 监视、调整和管理 DB2 服务器操作的任务。DB2
DBA(数据库管理员)往往要管理非常大的 DB2 系统或者分散在大型组织中的许多 DB2 服务器。DB2 Express-C
中的自我管理和自我调整功能可以帮助管理大型企业 DB2 部署,所以使用 DB2 Express-C 数据库服务器时,只需要基本的 DB2
DBA 技能就能够维持很高的应用程序可用性。









回页首

关于 Cloudscape

Cloudscape 是一个纯 Java 数据库服务器,很适合作为 Java 应用程序或中小规模 Web 应用程序的嵌入式数据库引擎。Cloudscape V10
是最初由 IBM 于 2004 年发布的免费数据库服务器。同时,启动了使用相同代码基础的 Apache Derby Project,作为
Apache Software Foundation 中的孵化项目。(关于 Apache Derby Project 的更多信息,请参见 “参考资料
”)。
Cloudscape V10.1 于 2005 年 8 月发布了更新。在新的 Cloudscape 10.1 发布之前,Apache
Software Foundation 中的 Derby Project 结束了孵化阶段,现在已经是顶级 Apache DB
项目的一部分。有大量活跃的开发人员和用户参与 Derby
Project,许多顾客、研究人员和业务伙伴正在使用这种数据库服务器。Cloudscape V10.1 采用 Derby 10.1
代码基并增加了一些安装程序、驱动程序和工具。IBM 为 Cloudscape V10.1 顾客提供支持。









回页首

为合作伙伴提供的参考资料

IBM 虚拟创新中心
(如 图 17
所示)专门为 ISV(Independent Software
Vendor,独立软件厂商)和其他业务伙伴提供应用程序开发帮助。如果计划在自己的解决方案中采用 DB2 Express Edition
V8.2.2,那么应该考虑注册并利用这个程序提供的参考资料。

图 17. IBM 虚拟创新中心 - DB2 Express











回页首

结束语

DB2 Express-C 是一种令人兴奋的新型数据服务器,具有独特的特性。请下载免费的 DB2 Express-C,加入不断增长的 DB2 用户社区。

参考资料

学习

您可以参阅本文在 developerWorks 全球站点上的 英文原文


DB2 Universal Database Express Edition for Linux and Windows
产品页面:DB2 Universal Database Express Edition V8.2 具有基于开放标准的数据库服务器的功能和可靠性,简化了打包、安装和部署,只需要很少的投资。

DB2 Universal Database, Version 8.2 for Linux HOWTO
:获得关于 Linux 上的 DB2 的更多信息。

SPECjAppServer 2004 with DB2 and WebSphere Application Server
使用了新的更灵活的 JDBC 驱动程序 db2jcc.jar。

Apache Derby Project
:Derby 项目开发开放源码的数据库技术,这种技术是纯 Java 的、容易使用、内存占用小、基于标准而且安全。

DB2 应用程序开发
”(developerWorks,2005 年 11 月):包含三篇文章,解释了如何构建 DB2 应用程序。

如果希望在 Visual Basic .NET 或 C# .NET 应用程序中使用 DB2,那么请阅读来自 Sonali Surange 的最新文章:

面向 Visual Studio 2005 开发人员的 DB2 UDB,第 1 部分: 针对 Visual Studio 2005 的 IBM 数据库插件概述
”(developerWorks,2006 年 1 月):这篇文章概述了 IBM 为 Visual Studio 2005 提供的新功能。

面向 Visual Studio 2005 开发人员的 DB2 UDB,第 2 部分: 利用 IBM Database Add-ins for Visual Studio 2005 构建针对 DB2 的应用程序和 Web 站点
”(developerWorks,2006 年 1 月):使用 IBM 的 Visual Studio 2005 工具,为 DB2 构建 Windows 应用程序和 Web 站点。

随时关注 developerWorks 技术活动和 webcast


developerWorks 中国网站 DB2 专区
:学习关于 DB2 的更多知识。在这里可以找到技术文档、how-to 文章、培训、下载、产品信息等等。

获得产品和技术

DB2 Express-C
:下载 DB2 Express-C 的免费版本。

Zend Core for IBM
:尝试使用免费的 Zend Core for IBM 为 DB2 构建和部署 PHP 应用程序。尝试使用 Zend Studio V5.1
,它是一种出色的 PHP 集成开发环境(IDE),支持 DB2 PHP 扩展以及连接 DB2 和 Cloudscape 的能力。

PHP 扩展:

DB2 PHP 扩展

Windows 扩展库

SourceForge.net 提供了 更新的 DB2 Python 驱动程序


使用 IBM 试用软件
构建您的下一个开发项目,这些软件可以从 developerWorks 直接下载。

讨论

参与论坛讨论


参与 developerWorks blogs
并加入 developerWorks 社区。

关于作者







Grant
Hutchison 是一位高级产品经理,负责支持 IBM 数据库服务器的应用程序开发社区,包括 DB2 UDB 和
Cloudscape/Apache Derby。Grant 从 University of Waterloo 获得了软件工程学位,从
Wilfrid Laurier University 获得了理学士学位。他是第一本 DB2 UDB Certification
Guide(1996)的合著者,他在 IBM Toronto 实验室的 DB2 数据库团队中担任各种技术和管理职位已经超过了 14 年。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: