You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Ignite Cache中使用In操作符查询及创建临时表批量更新

Ignite缓存批量更新多行:临时表创建与批量填充方案

一、创建会话级临时表

Ignite支持创建会话级临时表,仅在当前连接会话内有效,断开连接后自动销毁。语法和常规SQL一致,只需指定TEMPORARY关键字:

CREATE TEMPORARY TABLE tmp_update_ids (
    id INT PRIMARY KEY -- 列类型要和目标缓存表的主键/匹配列类型完全一致
);

若需关联多列,直接扩展字段定义即可,比如添加type VARCHAR(20)等。

二、批量填充临时表

有两种高效的批量填充方式:

1. SQL批量插入

直接用INSERT INTO的多值语法一次性插入批量数据,适合已知固定值的场景:

INSERT INTO tmp_update_ids (id)
VALUES (1), (2), (3), (10), (15); -- 一次性插入多个目标ID

无需额外API,直接通过SQL客户端执行即可。

2. Ignite API批量写入(Java示例)

如果数据是动态生成的集合,用Ignite的DataStreamer或直接调用缓存的putAll方法,性能比单条SQL插入更优:

// 获取Ignite实例
Ignite ignite = Ignition.ignite();

// 获取临时表对应的缓存(临时表本质是Ignite缓存,命名规则为SQL_PUBLIC_<表名大写>)
IgniteCache<Integer, Object> tmpCache = ignite.cache("SQL_PUBLIC_TMP_UPDATE_IDS");

// 准备批量数据
Map<Integer, Object> batchData = new HashMap<>();
batchData.put(1, new Object()); // 临时表仅需主键列时,值可使用占位符
batchData.put(2, new Object());
batchData.put(3, new Object());

// 批量写入临时表
tmpCache.putAll(batchData);

三、结合临时表执行批量更新

临时表填充完成后,即可关联目标缓存表执行批量更新,比如更新user_cache表中ID在临时表的记录:

UPDATE user_cache
SET status = 'ACTIVE'
WHERE id IN (SELECT id FROM tmp_update_ids);

也可使用JOIN语法,分布式场景下性能更优:

UPDATE user_cache u
SET u.status = 'ACTIVE'
FROM tmp_update_ids t
WHERE u.id = t.id;

注意事项

  • 临时表的列类型必须与目标缓存表的匹配列完全一致,否则会出现类型不匹配错误。
  • 会话级临时表仅对当前连接可见,不同会话的临时表相互独立。
  • 分布式集群中,临时表数据会自动分布在节点上,Ignite会处理分布式关联查询的逻辑。

内容的提问来源于stack exchange,提问作者Rohan19

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 22:49:52