
# 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]。
 表14U16GB规格实例的节点数和表个数对应关系 
| **实例规格** | **节点数量** | **表个数** |
|:---|:---|:---|
| 4U16GB   | 3        | 21      |
| 4U16GB   | 4        | 21      |
| 4U16GB   | 5        | 32      |
| 4U16GB   | 6        | 32      |
| 4U16GB   | 7        | 42      |
| 4U16GB   | 8        | 42      |
| 4U16GB   | 9        | 53      |
| 4U16GB   | 10       | 53      |
| 4U16GB   | 11       | 64      |
| 4U16GB   | 12       | 64      |
   
![](https://support.huaweicloud.com/cassandraug-nosql/public_sys-resources/note_3.0-zh-cn.png)
- 单表占用内存为768MB，表tokens个数为默认值12，如果单独设置了tokens，则需要单独计算，换算公式为（768/12）\*tokens个数。
- 上述表个数都是按照普通表计算的，如果开启了流表，一张流表耗费的资源为2.5个普通表。
 
根据上述计算方式，8U32GB规格实例的节点个数和表个数对应关系，请参见[表2]。
 表28U32GB规格实例的节点个数和表个数对应关系 
| **实例规格** | **节点个数** | **表个数** |
|:---|:---|:---|
| 8U32GB   | 3        | 22      |
| 8U32GB   | 4        | 22      |
| 8U32GB   | 5        | 34      |
| 8U32GB   | 6        | 34      |
| 8U32GB   | 7        | 45      |
| 8U32GB   | 8        | 45      |
| 8U32GB   | 9        | 56      |
| 8U32GB   | 10       | 56      |
| 8U32GB   | 11       | 68      |
| 8U32GB   | 12       | 68      |
   
![](https://support.huaweicloud.com/cassandraug-nosql/public_sys-resources/note_3.0-zh-cn.png)
- 单表占用内存为1440MB，表tokens个数为默认值12，如果单独设置了tokens，则需要单独计算，换算公式为（1440/ 12 ）\* tokens个数。
- 上述表个数都是按照普通表计算的，如果开启了流表，一张流表耗费的资源为2.5个普通表。
 
根据上述计算方式，16U64GB规格节点个数和表个数对应关系，请参见[表3]。
 表316U64GB规格节点个数和表个数对应关系 
| **实例规格** | **节点个数** | **表个数** |
|:---|:---|:---|
| 16U64GB  | 3        | 45      |
| 16U64GB  | 4        | 45      |
| 16U64GB  | 5        | 68      |
| 16U64GB  | 6        | 68      |
| 16U64GB  | 7        | 91      |
| 16U64GB  | 8        | 91      |
| 16U64GB  | 9        | 113     |
| 16U64GB  | 10       | 113     |
| 16U64GB  | 11       | 136     |
| 16U64GB  | 12       | 136     |
   
![](https://support.huaweicloud.com/cassandraug-nosql/public_sys-resources/note_3.0-zh-cn.png)
- 单表占用内存1440MB，表tokens个数为默认值12，如果单独设置了tokens，则需要单独计算，换算公式为（1440/ 12 ）\* tokens个数。
- 上述表个数都是按照普通表计算的，如果开启了流表，一张流表耗费的资源为2.5个普通表。
 
根据上述计算方式，32U128GB规格节点个数和表个数对应关系，请参见[表4]。
 表432U128GB规格节点个数和表个数对应关系 
| **实例规格** | **节点个数** | **表个数** |
|:---|:---|:---|
| 32U128GB | 3        | 68      |
| 32U128GB | 4        | 68      |
| 32U128GB | 5        | 102     |
| 32U128GB | 6        | 102     |
| 32U128GB | 7        | 136     |
| 32U128GB | 8        | 136     |
| 32U128GB | 9        | 170     |
| 32U128GB | 10       | 170     |
| 32U128GB | 11       | 204     |
| 32U128GB | 12       | 204     |
   
![](https://support.huaweicloud.com/cassandraug-nosql/public_sys-resources/note_3.0-zh-cn.png)
- 单表占用内存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};
     ```
     
    
![](https://support.huaweicloud.com/cassandraug-nosql/public_sys-resources/note_3.0-zh-cn.png)
如果创建完成的表需要调整表规格，比如达到表上限，需要将表规格调小，以创建更多的表，则可以通过如下参数调整。
- 将所有创建表调小为medium，则可以多建一倍数量的表
  ```
  ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'medium';
  ```
  
- 将所有创建表调小为small，则可以多建两倍数量的表
  ```
  ALTER TABLE keyspace_name.table_name WITH Z00_THROUGHPUT = 'small';
  ```
  
 
