Skip to content

分布区

1.分布区是什么

Ignite 中的分布区是组合表集合并定义以下内容的实体:

  • 这些表如何在集群中分布,创建多少个数据副本,如何对数据进行分区,如何将分区分配给节点;
  • 这些表将存储在哪些集群节点上;
  • 集群对节点进入或离开集群的反应,例如当集群扩展时,表是否会自动开始使用新节点。

分布区不等同于云计算中常用的可用区概念。

可用区是一组具有独立硬件、网络和电源的基础设施资源,并且通常与其他可用区在物理上分开。

Ignite 集群可以跨越多个可用区,分布区也可以跨越多个可用区。这样即使其中一个可用区出现故障,表也可以继续可用。

2.默认分布区

Ignite 3 在启动时会创建一个默认的分布区。当表未配置为使用其他分布区或其他分布区不可用时,此分布区会存储表中的数据。此分布区有 25 个分区,1 个分区副本,并且不会根据进入或退出集群的新节点进行自我调整。如果面向生产,建议创建一个根据业务需求调整的新分布区。

3.创建和使用分布区

Ignite 3 中的分布区是使用 CREATE ZONE 命令创建的。创建时必须指定要使用的存储配置,存储配置确定将使用的存储引擎和存储属性。

以下示例使用默认存储配置创建分布区:

sql
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default'

3.1.配置数据复制

可以使用 PARTITIONSREPLICAS 选项控制分区数(数据拆分为多少个片段)和副本数(存储的数据副本数)。

如果未指定,则分布区的分区数为(dataNodesCount * coresOnNode * 2) / replicaFactor,不创建数据副本。

在下面的示例中,表将被拆分为 50 个分区,每个分区将在集群上存储 3 个自身的副本:

sql
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default', PARTITIONS=50, REPLICAS=3

3.2.节点筛选

分布区可以获取节点属性(可以在节点配置中指定),并且仅将数据动态分发到具有指定属性的节点。例如可以仅处理具有 SSD 设备的节点上的数据,如果没有节点与筛选条件匹配,则数据将存储在所有节点上。分布区筛选条件使用 JSONPath 规则。

以下示例创建一个分布区,其仅在具有 SSD 属性的节点上存储数据:

sql
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default',DATA_NODES_FILTER='SSD'

3.3.集群扩展

集群中的在线节点数在其运行期间可能会动态变化,因为添加了更多节点或关闭了节点进行维护。Ignite 将自动处理数据重新分布,但通常最好为其他任务提供一些缓冲时间以使其先完成。可以通过 DATA_NODES_AUTO_ADJUST_SCALE_UPDATA_NODES_AUTO_ADJUST_SCALE_DOWN 参数来指定节点进入或离开集群与分布区调整开始之间的延迟(秒)。

分布区默认不会根据集群更改进行调整。

sql
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 命令:

sql
SELECT * from system.zones

该命令会列出有关集群上所有分布区的信息。

5.调整分布区

使用 ALTER ZONE 命令可以更改分布区参数,可以使用与创建分布区时相同的参数,例如:

sql
ALTER ZONE IF EXISTS exampleZone SET REPLICAS=5

6.定义存储配置

在创建分布区时,可以定义一组可供其中的表使用的存储配置。创建完成之后就无法更改存储配置了,要创建将使用一个或多个存储配置的分布区,请使用以下 SQL 命令:

sql
CREATE ZONE exampleZone WITH PARTITIONS=2, REPLICAS=3, STORAGE_PROFILES='profile1, profile3'

这时在此分布区中创建的表只能使用 profile1profile3

7.复制区

要创建复制区(所有数据存储在所有节点上的分布区),需要指定副本数等于集群中的节点数,Ignite 会自动将副本分发到不同的节点。

sql
CREATE ZONE IF NOT EXISTS exampleZone WITH STORAGE_PROFILES='default', REPLICAS=3

7.1.使用示例

在下面的示例中,将创建一个分布区,然后创建 2 个表,这些表将在同一分布区中并置。

sql
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