Ignite实战( 五 )

  • 所有地图查询都在所需数据所在的所有节点上执行 。
  • 所有节点都向查询发起者提供本地执行的结果集,查询发起者反过来会将提供的结果集合并到最终结果中 。
  • 您可以强制在本地处理查询,即在存储在执行查询的节点上的数据子集上 。
    2.6.2 本地查询如果对复制表执行查询,它将针对本地数据运行 。
    对分区表的查询以分布式方式执行 。但是,您可以强制对分区表执行本地查询 。
    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;}类的结构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;}

    推荐阅读