Apache Ignite 的 JDBC Client Driver(JDBC 客户端驱动)

这段内容详细介绍了 Apache Ignite 的 JDBC Client Driver(JDBC 客户端驱动),以及如何使用它来连接和操作 Ignite 集群。我们可以从几个维度来逐步理解这段内容:


🧩 一、JDBC Client Driver 是什么?

JDBC Client Driver 是 Apache Ignite 提供的 JDBC 驱动程序,用于通过标准的 JDBC API 与 Ignite 集群交互。

  • 它通过 一个客户端节点(client node) 连接到集群。
  • 与集群的交互包括:
    • 执行 SQL 查询
    • 插入、更新、删除数据
    • 数据流式加载(streaming 模式)

📦 二、使用前的准备工作

1. 依赖配置

你需要将以下 JAR 包加入项目或工具的 classpath:

  • 所有 {IGNITE_HOME}/libs 目录下的 JAR 文件
  • {IGNITE_HOME}/ignite-indexing 和 {IGNITE_HOME}/ignite-spring 目录下的 JAR 文件

2. 配置文件

你必须提供一个 Spring XML 配置文件,用于定义客户端节点如何连接到 Ignite 集群。

  • 例如:ignite-jdbc.xml 文件中可能包含集群地址、端口、安全配置等。
xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!-- Ignite configuration bean -->
    <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">

        <!-- Set to true to enable client mode for the node -->
        <property name="clientMode" value="true"/>

        <!-- Setting up discovery mechanism, here using multicast for simplicity -->
        <property name="discoverySpi">
            <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
                <property name="ipFinder">
                    <!-- Multicast IP finder example -->
                    <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.multicast.TcpDiscoveryMulticastIpFinder">
                        <property name="addresses">
                            <list>
                                <!-- Replace with your cluster nodes addresses -->
                                <value>192.168.1.100:47500..47509</value>
                                <!-- Add more addresses as needed -->
                            </list>
                        </property>
                    </bean>
                </property>
            </bean>
        </property>

        <!-- Optional: Enable indexing for SQL queries -->
        <property name="cacheConfiguration">
            <list>
                <bean class="org.apache.ignite.configuration.CacheConfiguration">
                    <property name="name" value="default"/>
                    <property name="sqlSchema" value="PUBLIC"/>
                </bean>
            </list>
        </property>

        <!-- Additional configurations can be added here -->

    </bean>

</beans>

📡 三、JDBC 连接字符串格式

JDBC URL 的格式如下:

复制代码
jdbc:ignite:cfg://[<params>@]<config_url>

各部分说明:

参数 说明
<config_url> 必填,指向 Spring XML 配置文件的 URL(可以是本地文件路径或远程 URL)
<params> 可选,多个参数用 : 分隔,如:streaming=true:schema=MYSCHEMA

示例:

java 复制代码
// 连接到默认缓存
Connection conn = DriverManager.getConnection("jdbc:ignite:cfg://file:///etc/config/ignite-jdbc.xml");

// 使用 streaming 模式
Connection conn = DriverManager.getConnection("jdbc:ignite:cfg://streaming=true@file:///etc/config/ignite-jdbc.xml");

🧠 四、JDBC 驱动特点

特性 说明
基于客户端节点连接 实际是启动了一个轻量级客户端节点与集群通信
支持跨缓存查询(Cross-Cache Queries) 可以同时访问多个缓存(相当于多个表)
不总是支持最新 SQL 特性 因为是"更稳定的"驱动,可能不包含最新的 SQL 功能
支持数据流式写入(Streaming Mode) 可以批量插入数据到缓存中,效率高
支持标准 JDBC 操作 SELECT、INSERT、UPDATE、DELETE、MERGE 等

📥 五、Streaming Mode(流式写入模式)

用于 批量插入数据 到缓存中,适用于数据预加载、快速导入等场景。

如何启用 Streaming Mode:

在连接字符串中添加 streaming=true:

java 复制代码
Connection conn = DriverManager.getConnection(
    "jdbc:ignite:cfg://streaming=true@file:///etc/config/ignite-jdbc.xml"
);

注意事项:

  • 必须指定缓存名 :cache=myCache
  • 只支持 INSERT 操作
  • 可配置参数 (影响流式性能):
    • streamingPerNodeBufferSize:缓冲区大小
    • streamingFlushFrequency:刷新频率(毫秒)

示例代码:

java 复制代码
Connection conn = DriverManager.getConnection(
    "jdbc:ignite:cfg://streaming=true:streamingFlushFrequency=1000@file:///etc/config/ignite-jdbc.xml"
);

PreparedStatement stmt = conn.prepareStatement(
    "INSERT INTO Person(_key, name, age) VALUES(CAST(? as BIGINT), ?, ?)"
);

for (int i = 1; i < 100000; i++) {
    stmt.setInt(1, i);
    stmt.setString(2, "John Smith");
    stmt.setInt(3, 25);
    stmt.execute();
}

conn.close(); // 所有数据会在此时刷新到缓存中

📝 六、标准 SQL 操作示例

1. 查询数据(SELECT)

java 复制代码
ResultSet rs = conn.createStatement().executeQuery("SELECT name FROM Person");

while (rs.next()) {
    String name = rs.getString(1);
}

2. 带参数的查询(Prepared Statement)

java 复制代码
PreparedStatement stmt = conn.prepareStatement("SELECT name, age FROM Person WHERE age = ?");
stmt.setInt(1, 30);
ResultSet rs = stmt.executeQuery();

while (rs.next()) {
    String name = rs.getString("name");
    int age = rs.getInt("age");
}

3. 插入数据(INSERT)

java 复制代码
PreparedStatement stmt = conn.prepareStatement(
    "INSERT INTO Person(_key, name, age) VALUES(CAST(? as BIGINT), ?, ?)"
);
stmt.setInt(1, 1);
stmt.setString(2, "John Smith");
stmt.setInt(3, 25);
stmt.execute();

4. 合并数据(MERGE)

java 复制代码
PreparedStatement stmt = conn.prepareStatement(
    "MERGE INTO Person(_key, name, age) VALUES(CAST(? as BIGINT), ?, ?)"
);
stmt.setInt(1, 1);
stmt.setString(2, "John Smith");
stmt.setInt(3, 25);
stmt.executeUpdate();

5. 更新数据(UPDATE)

java 复制代码
conn.createStatement().executeUpdate("UPDATE Person SET age = age + 1 WHERE age = 25");

6. 删除数据(DELETE)

java 复制代码
conn.createStatement().execute("DELETE FROM Person WHERE age = 25");

🔐 七、安全性

  • 你可以通过 Ignite 的 Security 文档 来配置安全连接。
  • 支持 SSL、认证、权限控制等机制。

📌 八、总结

内容 说明
驱动类名 org.apache.ignite.IgniteJdbcDriver
连接方式 基于客户端节点连接
支持操作 SELECT、INSERT、UPDATE、DELETE、MERGE、Streaming 模式
配置文件 必须提供 Spring XML 配置文件
流式写入 支持批量插入,适合数据预加载
SQL 支持 支持 ANSI SQL,但可能不包含最新 SQL 特性
Schema 支持 可以通过参数或连接串指定默认 schema
多缓存查询 支持跨缓存查询(Cross-Cache Queries)

相关推荐
网络豆11 天前
Apache Maven 鸿蒙 PC 适配全记录:把 JVM 构建工具交付到 HiShell
maven·apache·harmonyos
网络豆11 天前
Apache Hive 鸿蒙 PC 适配全记录:以 Qt 客户端打通 HiveQL、监控与元数据访问
hive·apache·harmonyos
网络豆11 天前
Apache HBase 鸿蒙 PC 适配全记录:用 Qt 原生客户端打通 REST 管理与数据读写
apache·hbase·harmonyos
无巧不成书021812 天前
Apache Tomcat 9 下载全指南(Windows,Linux,macOS):版本选型、国内镜像、SHA-512 与 PGP 完整性校验
windows·tomcat·apache
Dream-Y.ocean12 天前
鸿蒙平台 Apache Tomcat 管理控制台适配实战:基于 Electron 壳方案的真实 HTTP 服务器实现
tomcat·apache·harmonyos
betazhou12 天前
Apache seatunel常用配置参数解析说明
apache·seatunnel
凤山老林13 天前
Spring Boot 集成 Apache Kafka Streams 构建流处理应用:状态存储、窗口聚合与
spring boot·kafka·apache
DolphinScheduler社区14 天前
Apache DolphinScheduler 8 月报:权限安全加固,调度补火上线,性能与稳定性持续提升
大数据·安全·开源·apache·任务调度·海豚调度
sbjdhjd14 天前
从 7 字符文件名拼接到二维数组取值:PHP 无参函数限制下的受控靶场复盘 | (7字符绕过)
网络·nginx·安全·网络安全·云计算·php·apache
Jackyzhe15 天前
Apache Iceberg Variant 类型:v3 半结构化数据不再「二选一」
apache