2.6.2 本地查询如果对复制表执行查询,它将针对本地数据运行 。
对分区表的查询以分布式方式执行 。但是,您可以强制对分区表执行本地查询 。
2.6.3 SQL架构Ignite 有许多默认模式并支持创建自定义模式 。
默认情况下有两种可用的模式:
- SYS 模式,其中包含许多带有集群节点信息的系统视图 。您不能在此架构中创建表 。有关详细信息,请参阅系统视图页面 。
- PUBLIC 架构,在未指定架构时默认使用 。
- 您可以在集群配置中指定自定义模式 。
- Ignite 为通过其中一个编程接口或 XML 配置创建的每个缓存创建一个模式
2.自定义模式可以通过 的sqlSchemas属性设置自定义模式IgniteConfiguration 。您可以在启动集群之前在配置中指定模式列表,然后在运行时在这些模式中创建对象 。
下面是一个带有两个自定义模式的配置示例 。
IgniteConfiguration cfg = new IgniteConfiguration();SqlConfiguration sqlCfg = new SqlConfiguration();sqlCfg.setSqlSchemas("MY_SCHEMA", "MY_SECOND_SCHEMA" );cfg.setSqlConfiguration(sqlCfg);要通过例如 JDBC 驱动程序连接到特定模式 , 请在连接字符串中提供模式名称:
jdbc:ignite:thin://127.0.0.1/MY_SCHEMA3.缓存和架构名称当您使用可查询字段创建缓存时 , 您可以使用SQL API操作缓存的数据 。在 SQL 术语中,每个这样的缓存对应于一个单独的模式 , 其名称等于缓存的名称 。
同样,当您通过 DDL 语句创建表时 , 您可以通过 Ignite 支持的编程接口将其作为键值缓存进行访问 。可以通过在语句部分提供CACHE_NAME参数来指定相应缓存的名称 。WITHCREATE TABLE
CREATE TABLE City (ID INT(11),Name CHAR(35),CountryCode CHAR(3),District CHAR(20),Population INT(11),PRIMARY KEY (ID, CountryCode)) WITH "backups=1, CACHE_NAME=City";2.6.4 SQL索引Ignite 自动为每个主键和亲和键字段创建索引 。当您在值对象中的字段上定义索引时,Ignite 会创建一个由索引字段和缓存的主键组成的复合索引 。在 SQL 术语中,这意味着索引将由两列组成:要索引的列和主键列 。
1.使用注解配置索引@QuerySqlField可以通过注释从代码中配置索引以及可查询字段 。在下面的示例中 , Ignite SQL 引擎将为id和salary字段创建索引 。
public class Person implements Serializable {/** Indexed field. Will be visible to the SQL engine. */@QuerySqlField(index = true)private long id;/** Queryable field. Will be visible to the SQL engine. */@QuerySqlFieldprivate String name;/** Will NOT be visible to the SQL engine. */private int age;/*** Indexed field sorted in descending order. Will be visible to the SQL engine.*/@QuerySqlField(index = true, descending = true)private float salary;}类型名用作 SQL 查询中的表名 。在这种情况下,我们的表名将是Person(模式名称的使用和定义在模式部分中解释) 。
id和都是salary索引字段 。id将按升序(默认)和salary降序排序 。
如果你不想索引一个字段,但你仍然需要在 SQL 查询中使用它,那么该字段必须在没有index = true参数的情况下进行注释 。这样的字段称为可查询字段 。在上面的示例中,name被定义为可查询字段 。
该age字段既不可查询也不是索引字段 , 因此无法从 SQL 查询中访问 。
定义索引字段时,需要注册索引类型 。
2.索引嵌套对象嵌套对象的字段也可以使用注释进行索引和查询 。例如,考虑一个Person将Address对象作为字段的对象:
public class Person {/** Indexed field. Will be visible for SQL engine. */@QuerySqlField(index = true)private long id;/** Queryable field. Will be visible for SQL engine. */@QuerySqlFieldprivate String name;/** Will NOT be visible for SQL engine. */private int age;/** Indexed field. Will be visible for SQL engine. */@QuerySqlField(index = true)private Address address;}类的结构Address可能如下所示:
public class Address {/** Indexed field. Will be visible for SQL engine. */@QuerySqlField (index = true)private String street;/** Indexed field. Will be visible for SQL engine. */@QuerySqlField(index = true)private int zip;}
推荐阅读
- 快读《ASP.NET Core技术内幕与项目实战》WebApi3.1:WebApi最佳实践
- IQueryable和IEnumerable 快读《ASP.NET Core技术内幕与项目实战》EFCore2.5:集合查询原理揭秘
- Spring事务传播行为实战
- 四十八 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-使用第三方UI框架
- React +SpreadJS+Echarts 项目实战:在线报价采购系统
- 四十七 SpringCloud微服务实战——搭建企业级开发框架:【移动开发】整合uni-app搭建移动端快速开发框架-添加Axios并实现登录功能
- 【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
- Module XAF新手入门 - 模块
- 3 Python全栈工程师之从网页搭建入门到Flask全栈项目实战 - 入门Flask微框架
- 机器学习实战-AdaBoost