文档首页/ 云数据库 GeminiDB/ GeminiDB Cassandra接口/ 常见问题/ 数据库使用/ GeminiDB Cassandra创表时需要注意什么
更新时间:2024-08-08 GMT+08:00

GeminiDB Cassandra创表时需要注意什么

由于GeminiDB Cassandra存储引擎的特点,为了保证高性能需要在创表的过程中对内存进行预分配,因此GeminiDB Cassandra对表的数目有一定的上限要求。

使用须知

  • 系统将节点内存的一半分配给存储引擎使用。
  • 节点数量为奇数的集群容忍故障节点为N/2-1 , 偶数的集群容忍故障节点为N/2。
  • GeminiDB Cassandra中的hash环为表级别,tokens参数为表所对应的数据分片数,与开源Cassandra的num_tokens有差异。

创表数目计算方式

根据实例规格不同,创表需要的内存稍有不同,以4U16GB实例为例,可以简单按照单张表768MB计算。

所以创表数目上限=集群可用总内存/单表所需内存

  • 奇数数目集群

    集群可用内存=节点内存/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规格实例的节点个数和表个数对应关系,请参见表1
表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规格实例的节点个数和表个数对应关系,请参见表2
表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规格节点个数和表个数对应关系,请参见表3
表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规格节点个数和表个数对应关系,请参见表4
表4 32U128GB规格节点个数和表个数对应关系

实例规格

节点个数

表个数

32U128GB

3

68

4

68

5

102

6

102

7

136

8

136

9

170

10

170

11

204

12

204

  • 单表占用内存1920MB,表tokens个数为默认值12,如果单独设置了tokens,则需要单独计算。换算公式为 (1920 / 12 )* tokens个数。
  • 上述表个数都是按照普通表计算的,如果开启了流表,一张流表耗费的资源为2.5个普通表。

创表参数

  1. 吞吐量参数:Z00_THROUGHPUT,该参数与表的写性能上限有关,默认值为 big,即标准写性能上限。
    • 低吞吐量
      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(不推荐使用)。

    创表时可以指定存储层memtable的大小和个数。

    • 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';