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;}

    推薦閱讀