最小写入副本数
默认情况下,数据导入要求至少有超过半数的副本写入成功,导入才算成功。然而,这种方式不够灵活,在某些场景会带来不便。
举个例子,对于两副本情况,按上面的多数派原则,要想导入数据,则需要这两个副本都写入成功。这意味着,在导入数据过程中,不允许任意一个副本不可用。这极大影响了集群的可用性。
为了解决以上问题,Doris允许用户设置最小写入副本数(Min Load Replica Num)。对导入数据任务,当它成功写入的副本数大于或等于最小写入副本数时,导入即成功。
用法
单个表的最小写入副本数
可以对单个olap表,设置最小写入副本数,并用表属性min_load_replica_num来表示。该属性的有效值要求大于0且不超过表的副本数。其默认值为-1,表示不启用该属性。
可以在创建表时设置表的min_load_replica_num。
1. CREATE TABLE test_table1
2. (
3. k1 INT,
4. k2 INT
5. )
6. DUPLICATE KEY(k1)
7. DISTRIBUTED BY HASH(k1) BUCKETS 5
8. PROPERTIES
9. (
10. 'replication_num' = '2',
11. 'min_load_replica_num' = '1'
12. );
对一个已存在的表,可以使用语句ALTER TABLE来修改它的min_load_replica_num。
1. ALTER TABLE test_table1
2. SET ( 'min_load_replica_num' = '1');
可以使用语句SHOW CREATE TABLE来查看表的属性min_load_replica_num。
1. SHOW CREATE TABLE test_table1;
输出结果的PROPERTIES中将包含min_load_replica_num。例如:
1. Create Table: CREATE TABLE `test_table1` (
2. `k1` int(11) NULL,
3. `k2` int(11) NULL
4. ) ENGINE=OLAP
5. DUPLICATE KEY(`k1`)
6. COMMENT 'OLAP'
7. DISTRIBUTED BY HASH(`k1`) BUCKETS 5
8. PROPERTIES (
9. "replication_allocation" = "tag.location.default: 2",
10. "min_load_replica_num" = "1",
11. "storage_format" = "V2",
12. "light_schema_change" = "true",
13. "disable_auto_compaction" = "false",
14. "enable_single_replica_compaction" = "false"
15. );
全局最小写入副本数
可以对所有olap表,设置全局最小写入副本数,并用FE的配置项min_load_replica_num来表示。该配置项的有效值要求大于0。其默认值为-1,表示不开启全局最小写入副本数。
对一个表,如果表属性min_load_replica_num有效(即大于0),那么该表将会忽略全局配置min_load_replica_num。否则,如果全局配置min_load_replica_num有效(即大于0),那么该表的最小写入副本数将等于min(FE.conf.min_load_replica_num,table.replication_num/2 + 1)。
对于FE配置项的查看和修改,可以参考这里。
其余情况
如果没有开启表属性min_load_replica_num(即小于或者等于0),也没有设置全局配置min_load_replica_num(即小于或等于0),那么数据的导入仍需多数派副本写入成功才算成功。此时,表的最小写入副本数等于table.replicatition_num/2 + 1。
