1.6.2 数据模型
问:如何理解SDS的数据模型?
以MySQL表为例子,假设某个表的主键是userid,然后有列name,age,sex,location。MySQL中的列即对应SDS表中的属性,MySQL表中的主键可以直接对应到SDS表中的主键。但因为SDS的表是分布式的存储到多台Server上的,所以需要选择一个实体组键来开启哈希分布,可以理解为MySQL里的分库分表,比如选择name这个列(属性)来进行哈希,SDS会根据name这个属性的哈希结果来将数据分散到多台Server,所以name就叫做该SDS表的实体组键。MySQL中的二级索引(又叫辅助索引,非聚集索引)概念可以对应到SDS表的全局二级索引,而SDS中的局部二级索引是指该索引只在某个哈希分布内有效,即索引的有效范围是只是在hash(name)相同的所有记录中有效。
问:SDS的数据模型是什么样的?
SDS的基本数据模型概念是表,记录,和属性。每个表有多条记录,每条记录有多个属性。每个属性是一对<key,value>,key是属性名,value是属性值。
问:什么是哈希分布?
分布式数据库需要首先把数据分散到多台机器上,常见的有Hash分布和Range分布两种做法。Hash分布将Hash结果相同的记录分到一起,而Range分布则将所有记录排序,根据Range拆分为多段来分布到多台机器。
问:什么是实体组键(Entity Group)?
实体组键用于记录分组,SDS支持哈希分布,可以根据实体组键的Hash结果来将表中的多条记录分开。同一实体组中支持batch原子性和局部二级索引。实体组键可以由一个或多个属性组成。
问:什么是主键(Primary Index)?
主键即主索引,使用实体组键+主键可以唯一确定一条记录。同时主键也可以由一个或多个属性组成。
问:什么是索引?
索引是数据库中用来加快查询速度的一种数据结构,可以根据索引快速查到某条数据记录。
问:什么是二级索引?
SDS中除了设置某些属性为主键外,还可以在其他属性上设置索引,这些新的索引叫做二级索引。二级索引需要占用额外的存储空间,二级索引会存储对应主记录的主键,用户根据二级索引查询时,首先通过索引获取所存储的主键,再根据此主键查询主记录,返回给用户。
问:什么是局部二级索引?
局部是指该索引只在实体组键相同的记录下有效,可以根据局部二级索引在某个实体组键下做到快速查询。其同样可以由一个或多个属性组成。
问:什么是全局二级索引?
全局是相对于局部的,即该索引在整个表内有效,可以根据全局二级索引快速查询到某条数据记录。
问:SDS支持强一致的索引是什么意思?
强一致是指SDS在写入主记录的同时一定会写入索引,所以开启二级索引需要占用额外的读写配额。
问:什么是唯一索引?
唯一索引是这样一种索引,即表中任何两条记录不会在该索引对应的属性上有完全相同的值。
问:什么是投影属性?
二级索引除了存储主记录的主键外,也支持存储主记录中除主键之外的其它属性,并且与主记录中属性值保持一致,这种属性称为投影属性。用户查询索引时,SDS直接返回索引中所存储的投影属性值,无需再次查询主记录,从而加快了查询速度。但开启投影属性会占用额外的存储空间。