6.3 数据库使用
6.3.3 GaussDB(for Cassandra)创表时需要注意什么
由于GaussDB(for Cassandra)存储使用的是RocksDB,在创建表的过程中,其实是对 底层存储RocksDB的操作。RocksDB存储引擎采用的是wal+memtable数据结构来实现 数据的写入,memtable的大小(write_buffer_size)和个数
(write_buffer_number)都需要提前配置。 其实是对集群内存的一种预分配操作,
所以GaussDB(for Cassandra)对表的数目会有一定上限要求。
使用须知
● 节点内存的一半分配给存储引擎RocksDB使用。
● 奇数数目集群容忍故障节点为N/2-1 , 偶数数目集群容忍故障节点为N/2。
集群可用内存=节点内存/2*(N/2+1)
● 偶数数目集群
集群可用内存=节点内存/2*(N/2) 例如:
● 3节点4U16GB实例的可用内存=16/2*(3/2+1)=16GB 创表数目上限=16*1024MB/768MB=21
● 4节点4U16GB实例的可用内存=16/2*(4/2)=16GB 创表数目上限=16*1024MB/768MB=21
● 5节点4U16GB实例可用内存=16/2*(5/2+1)=24GB 创表数目上限=24*1024MB/768MB=32
根据上述计算方式,4U16GB规格实例的节点个数和表个数对应关系,请参见表6-1。
表6-1 4U16GB 规格实例的节点数和表个数对应关系
实例规格 节点数量 表个数
4U16GB 3 21
4 21
5 32
6 32
7 42
8 42
9 53
10 53
11 64
12 64
说明
● 单表占用内存为768MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计 算,换算公式为(768/12)*tokens个数。
● 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。
根据上述计算方式,8U32GB规格实例的节点个数和表个数对应关系,请参见表6-2。
表6-2 8U32GB 规格实例的节点个数和表个数对应关系
实例规格 节点个数 表个数
8U32GB 3 22
实例规格 节点个数 表个数
4 22
5 34
6 34
7 45
8 45
9 56
10 56
11 68
12 68
说明
● 单表占用内存为1440MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独 计算,换算公式为(1440/ 12 )* tokens个数。
● 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。
根据上述计算方式,16U64GB规格节点个数和表个数对应关系,请参见表6-3。
表6-3 16U64GB 规格节点个数和表个数对应关系
实例规格 节点个数 表个数
16U64GB 3 45
4 45
5 68
6 68
7 91
8 91
9 113
10 113
11 136
12 136
说明
● 单表占用内存1440MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计 算,换算公式为(1440/ 12 )* tokens个数。
● 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。
根据上述计算方式,32U128GB规格节点个数和表个数对应关系,请参见表6-4。
表6-4 32U128GB 规格节点个数和表个数对应关系
实例规格 节点个数 表个数
32U128GB 3 68
4 68
● 单表占用内存1920MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计 算。换算公式为 (1920 / 12 )* tokens个数。
● 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。
创表参数
1. 吞吐量参数:Z00_THROUGHPUT – 低吞吐量
CREATE TABLE test1 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'small';
– 中吞吐量
CREATE TABLE test2 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'medium';
– 高吞吐量
CREATE TABLE test3 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_THROUGHPUT = 'big';
2. 指定表tokens数目:表示创建表时候表的tokens数目,tokens数目必须大于1。
CREATE TABLE test4 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z01_TABLE_TOKENS = 24;
3. 表参数:Z00_BUFFER_SIZE 、Z00_BUFFER_NUMBER(不推荐使用)。
创表时可以指定表存储层的cf(rocksdb层)的memtable的buffer_size大小和 buffer_number个数。
– Z00_BUFFER_SIZE为map类型,指定对应cf name和value值 ,value值取值 范围2~32之间。
CREATE TABLE test6 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_BUFFER_SIZE = {'default': 16};
– Z00_BUFFER_NUMBER为map类型,指定对应cf name和value值,取值范围 2~8之间。
CREATE TABLE test5 (k int,p int,s int static,v int,PRIMARY KEY (k, p)) WITH Z00_BUFFER_NUMBER = {'default': 3};
说明
如果创建完成的表需要调整表规格,比如达到表上限,需要将表规格调小,以创建更多的表,则 可以通过如下参数调整。
● 将所有创建表调小为medium,则可以多建一倍数量的表
ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'medium';
● 将所有创建表调小为small,则可以多建两倍数量的表
ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'small';