上一篇 | 下一篇

使用 Java 在 DB2 UDB EEE 上的高性能插入

发布: 2008-7-01 13:13 | 作者: admin | 来源: | 查看: 0次

使用 Java 在 DB2 UDB EEE 上的高性能插入

热 荐

【字体:小 大】

使用 Java 在 DB2 UDB EEE 上的高性能插入

作者:- 文章来源:- 点击数:768 更新时间:2006-4-22

Krishnakumar Pooloth

Infosys Technologies Limited

2003 年 9 月 典型的决策支持系统定期载入和插入大量数据。大规模决策支持系统一般都部署在分区环境中。缓冲插入是由 DB2 提供的一种编程技术,使在分区环境中插入密集型工作负载能达到最佳的性能。本文讨论如何在 Java 中利用此功能。还将分析在不同的配置(象变化的行的长度和提交频率)下使用此功能的性能增益。

引言

典型的决策支持系统(decision support system,DSS)定期载入和插入大量数据。大规模 DSS 一般都部署于分区环境中。由于 Java™ 编程语言的普及,本文向您描述可以如何通过使用 Java 来利用 DB2® Universal Database™ 的缓冲插入选项,以使在分区环境中插入密集型(insert-intensive)工作负载达到最佳的性能。

本文假定您多少熟悉一些 Java、SQLJ 和 JDBC。请注意,本文中说明的概念只在 DB2 UDB EEE(即支持数据库分区的 UDB 版本)上有效。

比较 JDBC 和 SQLJ

JDBC 技术是一种 API,让您通过 Java 编程语言能实质地访问任何表格式数据源。它提供到大量 SQL 数据库的跨 DBMS 连通性。JDBC API 允许开发者利用 Java 平台的“一次编写,随处运行(Write Once, Run Anywhere)”的能力,以开发工业强度的、需要访问企业数据的跨平台应用程序。

SQLJ 是一种在 Java 中编写 SQL 访问的 ANSI 标准方法。SQLJ 比 JDBC 更加简明,因而更易于编写,并为更简单的调试提供了编译时模式验证和语法检查。在此方案中,SQL 语句嵌入在 Java 程序代码中,并且用 SQLJ 预编译程序将嵌入式 SQL 语句转换为 Java 方法调用。然而,由 SQLJ 预编译程序生成的代码不可能总是最佳的。关于 SQLJ 的更多信息,请参阅 SQLJ 教程。

分区数据库的能力

因为数据是跨数据库分区划分的,所以利用多个物理节点上多个处理器的能力来满足用户的请求成为可能。数据检索和更新请求都自动地分散到子请求中,并且在适用的数据库分区中并行地执行。对于发出 SQL 语句的应用程序,数据库被分区为多个数据库分区的事实是透明的。

应用程序交互作用发生在一个数据库分区(称为该应用程序的协调程序节点 - coordinator node)中。协调程序与应用程序运行在同一数据库分区上,或者如果是远程应用程序,则协调程序运行在应用程序连接到的数据库分区上。任何数据库分区都可以充当协调程序节点。关于分区数据库的更多信息,请参阅 Clustering for Scalability。

DB2 提供了一些特殊的编程功能以在分区环境中达到最佳的性能。缓冲插入(buffered inserts)便是一项技术的示例,该技术可以使决策支持系统中典型的插入密集型工作负载产生显著的性能增益。

本文中,我们将: 详细地讨论缓冲插入。 编写一个基于 SQLJ 的表接口类。为简单起见,该类将只支持向表插入数据的接口。 说明重复使用 RTStatement 对象的技术如何提高性能。 通过以变化的提交频率重复使用 RTStatement,来对 JDBC、基本 SQLJ 和 SQLJ 的性能进行基准测量。我们还将分析行的长度对缓冲插入的影响。

缓冲插入概述

在分区环境中,DB2 UDB 可以利用表队列来缓冲正在插入的行。在类似 DSS 的插入密集型应用程序中,该功能可以使性能显著地提高。要使用缓冲插入,应用程序必须是已准备好的或被绑定并启用了 INSERT BUF 选项的。下面将讨论简单插入和缓冲插入的差别。

分区数据库中的简单插入

图 1中显示的是分区环境中简单数据库插入(无缓冲)的事件流。

图 1. 分区环境中的简单插入处理

协调代理程序(Coordinator Agent)从客户机(Client)应用程序中接收行。 协调程序将其传送到该节点上的数据库管理器(Database Manager)。 数据库管理器在分区键值上应用散列逻辑并确定目标节点(Target Node)。 目标节点接收该行并在本地将其插入。 目标节点将响应发回协调代理程序。 协调程序将响应传送回客户机。

分区数据库中的缓冲插入

如 图 2所示,如果该应用程序被绑定并启用了 INSERT BUF 选项,事件流会稍有不同。

图 2. 分区环境中的缓冲插入

数据库管理器为该表所在的每个节点打开一个 4 KB 的页面。 在从协调代理程序接收该行之后,数据库管理器应用散列逻辑并确定目标节点。 然后将该行放置到对应的页面中。 数据库管理器将控制返回应用程序。 如果该连接只用来向同一表中插入行,则当缓冲区充满时或者在遇到 commit 或 rollback 语句时,缓冲区会清空。通常,除了 insert 语句外,向此表中插入任何其它语句都会使缓冲区清空。示例将会插入到另一张表、从表中删除、更新表等。

字号: | 推荐给好友

21/212>

评分:0

我来说两句