這段內容講的是 Apache Ignite 中的 SQL 模式(Schema)管理機制。我們可以從幾個方面來理解:
一、什么是 Schema(模式)?
在 SQL 中,Schema 是數據庫對象(如表、視圖等)的命名空間和組織單位。Ignite 支持多個 Schema,便于組織和隔離不同的數據對象。
二、Ignite 中的默認 Schema
Ignite 默認提供了兩個 Schema:
Schema 名 | 說明 |
---|---|
SYS | 系統 Schema,包含集群節點、緩存、SQL 元數據等系統視圖。你不能在這個 Schema 中創建表或對象。詳見 System Views。 |
PUBLIC | 默認 Schema。當你沒有顯式指定 Schema 時,Ignite 默認使用這個 Schema。例如通過 JDBC 連接時,不指定 Schema 就會連接到 PUBLIC。 |
三、自定義 Schema(Custom Schemas)
Ignite 允許用戶定義自己的 Schema,主要有兩種方式:
? 1. 通過配置文件定義自定義 Schema
你可以通過 SqlConfiguration.setSqlSchemas(...)
方法在集群啟動前定義多個自定義 Schema。
示例配置(XML):
<bean class="org.apache.ignite.configuration.IgniteConfiguration"><property name="sqlConfiguration"><bean class="org.apache.ignite.configuration.SqlConfiguration"><property name="sqlSchemas"><list><value>MY_SCHEMA</value><value>MY_SECOND_SCHEMA</value></list></property></bean></property>
</bean>
連接指定 Schema 的方式(如 JDBC):
jdbc:ignite:thin://127.0.0.1/MY_SCHEMA
? 2. 通過 Cache 自動創建 Schema
Ignite 中的每個 Cache(緩存)都可以通過 SQL 訪問,每個 Cache 對應一個 Schema,Schema 名稱就是 Cache 的名稱。
示例:
如果你創建了一個名為 PersonCache
的緩存,那么你可以通過 SQL 查詢:
SELECT * FROM PersonCache.Person
這里:
PersonCache
是 Schema 名;Person
是表名(對應緩存中的鍵值結構)。
四、通過 DDL 創建表時的 Schema 與 Cache 關系
當你使用 CREATE TABLE
語句創建表時,Ignite 會自動創建一個對應的 Cache(緩存)來存儲數據。
示例 SQL:
CREATE TABLE City (ID INT PRIMARY KEY,Name CHAR(35),CountryCode CHAR(3),District CHAR(20),Population INT
) WITH "backups=1, CACHE_NAME=City";
- 這里指定了
CACHE_NAME=City
,表示這個表對應的緩存名為City
。 - 如果你不指定
CACHE_NAME
,Ignite 會自動生成一個名字,格式為:
SQL_<SCHEMA_NAME>_<TABLE_NAME>
例如,如果在 MY_SCHEMA
中創建表 City
,生成的緩存名是:
SQL_MY_SCHEMA_CITY
五、Schema 與 Cache 的映射關系總結
來源 | Schema 名 | 對應的 Cache 名 |
---|---|---|
默認 | PUBLIC | 自動生成(如 SQL_PUBLIC_TABLENAME) |
自定義配置 | MY_SCHEMA | 自動生成或手動指定 |
緩存自動創建 | Cache 名即 Schema 名 | Cache 名 |
DDL 創建表 | 指定的 Schema | 指定的 CACHE_NAME 或默認生成 |
六、總結表格
類型 | 名稱 | 是否可寫 | 用途 |
---|---|---|---|
SYS | 系統 Schema | ? 不可寫 | 存儲集群信息、系統視圖 |
PUBLIC | 默認 Schema | ? 可寫 | 默認連接目標 |
自定義 Schema | 用戶定義 | ? 可寫 | 用于組織 SQL 對象 |
Cache Schema | 與 Cache 同名 | ? 可寫 | 用于 SQL 查詢緩存數據 |
DDL 表 Schema | 指定或默認 | ? 可寫 | 對應一個緩存 |
七、使用建議
- 使用 Schema 來組織不同業務模塊的數據,便于管理和權限控制;
- 如果需要 SQL 和緩存 API 混合訪問,注意 Cache 名和 Schema 名的對應關系;
- 使用 DDL 創建表時,建議顯式指定
CACHE_NAME
,便于后續管理; - 如果集群中有多個應用連接 Ignite,建議為每個應用配置不同的 Schema,避免命名沖突。