Ignite实战( 六 )


对分区表的查询以分布式方式执行 。但是,您可以强制对分区表执行本地查询 。
2.6.3 SQL架构Ignite 有许多默认模式并支持创建自定义模式 。
默认情况下有两种可用的模式:

  • SYS 模式,其中包含许多带有集群节点信息的系统视图 。您不能在此架构中创建表 。有关详细信息,请参阅系统视图页面 。
  • PUBLIC 架构,在未指定架构时默认使用 。
在以下情况下会创建自定义模式:
  • 您可以在集群配置中指定自定义模式 。
  • Ignite 为通过其中一个编程接口或 XML 配置创建的每个缓存创建一个模式
1.公共模式每当需要并且未指定模式时,默认使用 PUBLIC 模式 。例如,当您通过 JDBC 连接到集群而不显式设置模式时,您将连接到 PUBLIC 模式 。
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;}

经验总结扩展阅读