KTS的数据模型概念包括表、行、主键、属性列。在KTS中,表是行的集合,而每个行是主键和属性列的集合。在关系型数据库中,表具有预定义的模式,例如表名称、主键、各列名称的列表以及各列的数据类型;表中存储的所有记录必须有相同的列集合。而KTS是NoSQL数据库:除了必须的主键外,KTS表没有固定模式,表中的每行可以有任意数量的属性列,目前我们没有单行数据总大小做限制,但是建议单行数据大小不超过400KB。
单行数据中的每个属性列都是一个名称/值对。属性列目前仅支持标量(单值)。
主键
创建表时,除表名称外,您还必须指定表的主键,主键是表中每一行数据的唯一标识。因此,任意两行数据的主键都不相同。KTS支持两种不同类型的主键:
属性列
属性存放行的数据,每一行可以包含任意数目的属性列。
命名规范
属性列的命名规范: 1. 必须由英文字母、数字和下划线组成 2. 首字母必须为英文字母或者下划线或者数字 3. 大小敏感 4. 长度在1~64K个字符之间。建议属性列使用短小的名字。
支持的数据类型
KTS目前仅支持标量数据类型:bool、int32、int64、double、string、binary。
类型 | 值 | 空间占用限制 |
---|---|---|
Bool | true或者false | 1个字节 |
Int32 | [-2^31, 2^31-1] | 4个字节 |
Int64 | [-2^63, 2^63-1] | 8个字节 |
Double | IEEE 754双精度浮点数据,提供15~16位有效数字:1.7x10^-308 ~ 1.7x10^308 | 8个字节 |
String | UTF-8编码的字符串,可以为空字符串 | 作为属性列不能超过400KB,作为主键不能超过2KB |
Binary | 二进制数据,可以为空 | 作为属性列不超过400KB,作为主键不能超过2KB |
行数据大小的计算
Table系统中每行数据都占用一定存储空间,存储空间的计算方式如下:
数据存储
KTS将数据按照主键值的范围进行水平切分存储在分片中。也就是说KTS的表中的数据是按照主键进行全局有序存储的。分片是为表分配的存储,由固态硬盘(SSD)提供支持,并可以在金山云服务区域内的三个可用区的机器上自动进行复制。分片管理由KTS全权负责,客户不需要亲自管理分片。在您创建表时,表的初始状态为CREATING。在此阶段,KTS会为表分配一个分片。表的状态变为ACTIVE后,您可以开始读取和写入数据。
当表中的数据量接近该分片的容量上限时,KTS会为表再分配一个分片,然后将该表中的数据分配到旧分片和新分片中。此活动在后台进行,对应用程序时透明的。您添加到表中的数据越多,KTS分配的分片越多,数量足以存储表的数据。
目前KTS不会释放或合并分片。如果一个表的数据跨多个分片,那么即使您删除了大部分的数据,这些分片仍然会分配给该表。后续版本会提供分片的自动合并功能。