分布区
1.分布区是什么
Ignite 中的分布区是组合表集合并定义以下内容的实体:
- 这些表如何在集群中分布,创建多少个数据副本,如何对数据进行分区,如何将分区分配给节点;
- 这些表将存储在哪些集群节点上;
- 集群对节点进入或离开集群的反应,例如当集群扩展时,表是否会自动开始使用新节点。
分布区不等同于云计算中常用的可用区概念。
可用区是一组具有独立硬件、网络和电源的基础设施资源,并且通常与其他可用区在物理上分开。
Ignite 集群可以跨越多个可用区,分布区也可以跨越多个可用区。这样即使其中一个可用区出现故障,表也可以继续可用。
2.默认分布区
Ignite 3 在启动时会创建一个默认的分布区。当表未配置为使用其他分布区或其他分布区不可用时,此分布区会存储表中的数据。此分布区有 25 个分区,1 个分区副本,并且不会根据进入或退出集群的新节点进行自我调整。如果面向生产,建议创建一个根据业务需求调整的新分布区。
3.创建和使用分布区
Ignite 3 中的分布区是使用 CREATE ZONE
命令创建的。创建时必须指定要使用的存储配置,存储配置确定将使用的存储引擎和存储属性。
以下示例使用默认存储配置创建分布区:
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default'
3.1.配置数据复制
可以使用 PARTITIONS
和 REPLICAS
选项控制分区数(数据拆分为多少个片段)和副本数(存储的数据副本数)。
如果未指定,则分布区的分区数为(dataNodesCount * coresOnNode * 2) / replicaFactor
,不创建数据副本。
在下面的示例中,表将被拆分为 50 个分区,每个分区将在集群上存储 3 个自身的副本:
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default', PARTITIONS=50, REPLICAS=3
3.2.节点筛选
分布区可以获取节点属性(可以在节点配置中指定),并且仅将数据动态分发到具有指定属性的节点。例如可以仅处理具有 SSD
设备的节点上的数据,如果没有节点与筛选条件匹配,则数据将存储在所有节点上。分布区筛选条件使用 JSONPath
规则。
以下示例创建一个分布区,其仅在具有 SSD 属性的节点上存储数据:
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default',DATA_NODES_FILTER='SSD'
3.3.集群扩展
集群中的在线节点数在其运行期间可能会动态变化,因为添加了更多节点或关闭了节点进行维护。Ignite 将自动处理数据重新分布,但通常最好为其他任务提供一些缓冲时间以使其先完成。可以通过 DATA_NODES_AUTO_ADJUST_SCALE_UP
和 DATA_NODES_AUTO_ADJUST_SCALE_DOWN
参数来指定节点进入或离开集群与分布区调整开始之间的延迟(秒)。
分布区默认不会根据集群更改进行调整。
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default',DATA_NODES_AUTO_ADJUST_SCALE_UP=100,DATA_NODES_AUTO_ADJUST_SCALE_DOWN=20.
4.检查分布区属性
可以通过system.zones
系统视图查看分布区的属性,具体可以使用以下 SQL 命令:
SELECT * from system.zones
该命令会列出有关集群上所有分布区的信息。
5.调整分布区
使用 ALTER ZONE
命令可以更改分布区参数,可以使用与创建分布区时相同的参数,例如:
ALTER ZONE IF EXISTS exampleZone SET REPLICAS=5
6.定义存储配置
在创建分布区时,可以定义一组可供其中的表使用的存储配置。创建完成之后就无法更改存储配置了,要创建将使用一个或多个存储配置的分布区,请使用以下 SQL 命令:
CREATE ZONE exampleZone WITH PARTITIONS=2, REPLICAS=3, STORAGE_PROFILES='profile1, profile3'
这时在此分布区中创建的表只能使用 profile1
或 profile3
。
7.复制区
要创建复制区(所有数据存储在所有节点上的分布区),需要指定副本数等于集群中的节点数,Ignite 会自动将副本分发到不同的节点。
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default', REPLICAS=3
7.1.使用示例
在下面的示例中,将创建一个分布区,然后创建 2 个表,这些表将在同一分布区中并置。
CREATE ZONE IF NOT EXISTS EXAMPLEZONE WITH STORAGE_PROFILES='default', PARTITIONS=20, REPLICAS=3
CREATE TABLE IF NOT EXISTS Person (
id int primary key,
city_id int,
name varchar,
age int,
company varchar
) PRIMARY ZONE EXAMPLEZONE
CREATE TABLE IF NOT EXISTS Account (
id int primary key,
name varchar,
amount int
) PRIMARY ZONE EXAMPLEZONE
18624049226