一,前文回顾
前文《Derby数据库简介及其在Nacos中的应用》介绍了Derby数据库的基本信息、优缺点、运行模式、使用方法及其在Nacos中的应用场景。其中,运行模式包含内嵌模式和网络模式,文章通过数据库自带的ij工具演示了如何访问数据库并执行SQL语句。一般而言,Derby是一种嵌入式的Java关系型数据库管理系统(RDBMS),通常用于本地应用程序。但是,通过一些额外的配置和操作,我们可以实现Derby数据库的远程访问。
二,网络架构对比
内嵌模式下,我们需要运行一个java进程来管理内嵌Derby数据库,同一个JVM进程内部,通过Derby Driver连接Derby数据库;自带的ij工具,本质上就是一个java进程,使用内嵌模式用来管理指定的Derby数据库;
网络模式下,Derby Server不需要用户启用独立的Java程序进行管理,通过脚本启动server模式,开启端口监听,可以接收来自多个用户的数据库访问 请求;
三,Derby网络模式特点:
- 多用户支持: Derby网络模式支持多个客户端同时连接到同一个数据库,每个客户端都可以执行读写操作。
- 跨平台: 由于Derby是Java编写的,因此它可以在支持Java的各种平台上运行。
- 独立性: Derby网络服务器独立于客户端,客户端可以运行在与服务器不同的Java虚拟机上。
四,Derby网络模式的使用实践
数据库自带工具
Derby数据库的安装目录中有一个bin子目录,其中包含多种自带工具(本文基于10.14系列版本),可以利用这些工具快速启动网络模式Derby。
名称 | 功能 |
ij | 交互式的JDBC脚本工具,可用于创建或者查询数据库 |
sysinfo | 显示java和derby环境变量 |
startNetworkServer | 以网络模式启动derby |
stopNetworkServer | 停止网络模式derby |
setNetworkServerCP | 配置Derby Network Server运行时所需的Java类路径 |
setNetworkClientCP | 配置Derby Network Client运行时所需的Java类路径 |
setEmbeddedCP | 配置内嵌式Derby运行时所需的Java类路径 |
NetworkServerControl | Derby Server控制工具,用于管理和控制 Apache Derby Network Server,如启停 ,获取sysinfo |
dblock | 查看指定数据库的DDL |
使用脚本启动Derby server
1,使用ij创建数据库
在Apache Derby官网下载文档版本,由于我们使用的是JDK8,选择最新的稳定版本10.14.2.0; 解压到任意路径$DERBY_HOME,使用下面命令创建数据库test-db,创建PERSON表,随便插入一条数据,然后退出;
${DERBY_HOME}/bin/ij
connect 'jdbc:derby:test-db;create=true';
CREATE TABLE APP.PERSON(id int,name varchar(8));
INSERT INTO APP.PERSON (ID,NAME) VALUES (1,'Jackson');
exit;
2,使用脚本启动Derby Server
${DERBY_HOME}/bin/startNetworkServer
可以看到日志显示,默认打开了1527端口,监听客户端连接;
Thu Dec 14 19:52:03 CST 2023 : 已使用基本服务器安全策略安装了 Security Manager。
Thu Dec 14 19:52:04 CST 2023 : Apache Derby 网络服务器 - 10.14.2.0 - (1828579) 已启动并准备接受端口 1527 上的连接
3,使用Java语言编写Derby client访问Derby Server
public class DerbyClient {
static {
try {
Class.forName("org.apache.derby.jdbc.ClientDriver").newInstance();
} catch (Exception e) {
System.err.println("failed to load derby client driver.");
}
}
public static void main(String[] args) throws Exception {
Connection conn = DriverManager.getConnection("jdbc:derby://127.0.0.1:1527/derby-data;");
PreparedStatement ps = conn.prepareStatement("SELECT * from APP.PERSON");
ResultSet rs = ps.executeQuery();
while (rs.next()) {
int id = rs.getInt("ID");
String name = rs.getString("NAME");
System.out.println(String.format("table record: ID:%d:,Name:%s" ,id,name));
}
}
}
至此,我们通过一个demo试验了客户端通过网络访问Derby Server的场景;
五,网络传输协议
Derby Client与Derby Server之间是通过DRDA协议传输;
DRDA(Distributed Relational Database Architecture)是一种用于分布式数据库通信的协议。它最初由IBM开发,用于支持其关系数据库管理系统(RDBMS)产品,如DB2。DRDA允许不同计算机上的数据库系统进行通信和协作,支持跨平台的分布式数据库环境。
1. 目标与用途:
-
跨平台通信: DRDA允许不同类型和品牌的数据库系统在网络上进行通信,使得分布式数据库系统能够在多个计算机和操作系统之间协同工作。
-
支持多种数据库系统: DRDA不仅用于IBM的DB2,还支持其他厂商的数据库系统,包括Oracle、Microsoft SQL Server等。
-
标准化: DRDA是一个开放的、标准化的协议,它定义了通信的规范和数据格式,确保了不同数据库系统之间的互操作性。
2. 组成要素:
DRDA协议由多个组成要素组成,其中一些关键的要素包括:
-
网络层: 定义了数据的传输方式,可以通过TCP/IP等协议进行通信。
-
传输层: 负责数据的打包、解包和传递,定义了消息格式和编码规范。
-
数据库请求层: 包括查询请求、更新请求等,定义了客户端与服务器之间的数据库操作。
-
数据定义层: 包括数据库模式、表、视图等的定义,确保在分布式环境中对数据的一致性和准确性。
3. DRDA协议通信流程:
DRDA通信的一般流程包括以下步骤:
-
连接建立: 客户端通过网络连接到数据库服务器。
-
身份验证: 客户端和服务器相互验证身份。
-
请求传递: 客户端发送数据库请求,请求可以是查询、更新、事务管理等。
-
数据传递: 服务器执行请求,将结果或响应传递回客户端。
-
连接关闭: 客户端和服务器之间的连接关闭。
六,总结
本文介绍了Derby Server的特点,以及与内嵌模式下Derby的架构差异,并通过一个简单的案例介绍了DerbyServer的一般使用方法。