当前位置: 首页 > news >正文

Apache Ignite 索引(Indexes)定义和使用

这段内容是关于 Apache Ignite 中如何定义和使用 索引(Indexes) 的说明。下面我将为你 逐段解释这段内容的含义,并帮助你理解 Apache Ignite 中 SQL 索引机制的核心概念。


📌 一、索引的定义

原文:

In addition to common DDL commands, such as CREATE/DROP INDEX, developers can use Ignite’s SQL APIs to define indexes.

理解:

除了使用标准的 DDL 命令(如 CREATE INDEX, DROP INDEX)外,开发者还可以通过 Ignite 的 SQL API 来定义索引。


📌 二、索引模块

原文:

Indexing capabilities are provided by the ‘ignite-indexing’ module. If you start Ignite from Java code, add this module to your classpath.

理解:

索引功能由 ignite-indexing 模块提供。如果你是通过 Java 代码启动 Ignite,需要将这个模块加入 classpath。


📌 三、自动创建索引

原文:

Ignite automatically creates indexes for each primary key and affinity key field.

理解:

Ignite 会自动为每个主键(primary key)和关联键(affinity key)字段创建索引。


📌 四、自定义索引字段

原文:

When you define an index on a field in the value object, Ignite creates a composite index consisting of the indexed field and the cache’s primary key.

理解:

当你在值对象(value object)中为某个字段定义索引时,Ignite 会创建一个 复合索引,包含这个字段和缓存的主键。也就是说,SQL 中的索引实际上是一个包含两个列的索引:你指定的字段 + 主键。

例如:

CREATE INDEX idx_name ON Person(name);

实际上创建的索引结构类似于:

CREATE INDEX idx_name ON Person(name, id);

📌 五、通过注解定义索引

原文代码:

public class Person implements Serializable {@QuerySqlField(index = true)private long id;@QuerySqlFieldprivate String name;private int age;@QuerySqlField(index = true, descending = true)private float salary;
}

理解:

  • @QuerySqlField(index = true):表示该字段会被索引,并可用于 SQL 查询。
  • @QuerySqlField(无 index = true):表示该字段是“可查询字段”,不会被索引,但可以在 SQL 查询中使用。
  • 未加注解的字段(如 age)既不可查询,也不可索引。
  • descending = true:表示该字段的索引是按降序排列。

📌 六、表名与类名的关系

原文:

The type name is used as the table name in SQL queries.

理解:

Java 类名将作为 SQL 查询中的表名。例如 Person 类对应 SQL 中的 Person 表。


📌 七、运行时更新索引

原文:

Use the CREATE/DROP INDEX commands if you need to manage indexes or make an object’s new fields visible to the SQL engine at runtime.

理解:

如果你需要在运行时修改索引结构或添加新的可查询字段,可以使用 CREATE INDEXDROP INDEX 命令。


📌 八、嵌套对象索引

原文代码:

public class Person {@QuerySqlField(index = true)private Address address;
}public class Address {@QuerySqlField(index = true)private String street;@QuerySqlField(index = true)private int zip;
}

理解:

  • 嵌套对象(如 Address)中的字段也可以被索引。
  • 在 SQL 查询中,可以直接使用嵌套字段,例如:
    SELECT * FROM Person WHERE street = 'Main St'
    
    不需要写成 address.street,因为嵌套字段会被“展平”处理。

⚠️ 注意:如果对嵌套对象创建了索引,将无法对表执行 UPDATEINSERT 操作。


📌 九、注册索引类型

原文:

After indexed and queryable fields are defined, they have to be registered in the SQL engine along with the object types they belong to.

理解:

在定义了索引和可查询字段之后,需要通过 CacheConfiguration.setIndexedTypes() 方法将这些类型注册到 SQL 引擎中。

示例代码:

CacheConfiguration<Long, Person> ccfg = new CacheConfiguration<>();
ccfg.setIndexedTypes(Long.class, Person.class);
  • 该方法接受键值对类型(key class 和 value class)。
  • 基本类型需要以包装类形式传入(如 Long.class 而不是 long.class)。

📌 十、预定义字段 _key_val

原文:

Each table will have two special predefined fields: _key and _val, which represent links to whole key and value objects.

理解:

每张表都会有两个预定义字段:

  • _key:表示整个 key 对象。
  • _val:表示整个 value 对象。

例如,你可以这样查询:

SELECT * FROM Person WHERE _key = 100

这对在 key 是基本类型时非常有用。


📌 十一、支持二进制对象(Binary Objects)

原文:

Since Ignite supports Binary Objects, there is no need to add classes of indexed types to the classpath of cluster nodes.

理解:

Ignite 支持二进制对象(Binary Objects),这意味着即使集群节点上没有类定义,SQL 引擎也能识别索引字段和可查询字段的内容,无需反序列化整个对象。


✅ 总结:Ignite 中索引机制的核心要点

项目说明
索引模块使用 ignite-indexing 模块
自动索引主键和关联键字段自动创建索引
索引字段使用 @QuerySqlField(index = true) 注解
可查询字段使用 @QuerySqlField(不带 index)
嵌套字段支持嵌套对象索引,但限制 INSERT/UPDATE
复合索引索引字段 + 主键组成复合索引
表名Java 类名作为 SQL 表名
注册类型使用 setIndexedTypes() 注册索引类型
预定义字段_key_val 可用于查询
二进制对象不需要类定义也能使用索引字段

如果你有具体的代码示例或问题,我可以进一步帮你分析和优化。是否需要我为你写一个完整的示例?

http://www.dtcms.com/a/292143.html

相关文章:

  • 【运维】SGLang服务器参数配置详解
  • Vue开发常用库(含npm安装命令)
  • IPv4枯竭时代:从NAT技术到IPv6的演进之路
  • C++函数 vs Go函数
  • C++ 中重载函数右值引用和左值引用匹配的优先级
  • 【机器学习】第四章 回归算法
  • 主流开源LLM架构对比与突破·
  • 控制器(Controller)模块的架构与工作流程 -OpenExo
  • Azure可靠性架构指南:构建云时代的高可用系统
  • Java函数指南:从Function到BiFunction的深度解析
  • 电商项目_秒杀_架构及核心
  • 【Linux】进程概念
  • 以Java程序员角度理解MCP
  • 项目复盘核心要点
  • SQL Server 查询优化
  • Vue 脚手架基础特性
  • 前端自动化埋点:页面模块级行为跟踪与问题定位系统​​的技术设计方案
  • 浏览器地址栏输入URL回车后白屏分析
  • 【Web APIs】JavaScript 节点操作 ④ ( 节点操作案例 - 下拉菜单案例 )
  • Java+Vue构建的固定资产内控管理系统,融合移动端便捷与后台管理强大功能,模块完备,提供全量源码,轻松实现资产智能管控
  • 第十二章 用Java实现JVM之结束
  • 学习pwn需要的基本汇编语言知识
  • 漫画版:细说金仓数据库
  • LangGraph基础教程
  • 理解后端开发中的API设计原则
  • 哈希算法(Hash Algorithm)
  • 2025乐彩V8影视系统技术解析:双端原生架构与双H5免签封装实战 双端原生+双H5免签封装+TV级性能优化,一套代码打通全终端生态
  • Visual Studio Code 远端云服务器开发使用指南
  • gflags使用
  • Java 大视界 -- Java 大数据在智能交通自动驾驶车辆与周边环境信息融合与决策中的应用(357)