让我们假设一个表test
cf:a cf:b yy:a kk:cat
"com.cnn.news" zubrava10 sobaka foobar
"ch.main.users" - - - purrpurr
第一个单元格(“zubrava”)有10个版本(10个时间戳)(“zubrava1”,“zubrava2”......)
该表的数据将如何存储在磁盘上?
我的意思是主索引总是
("row","column_family:column",timestamp) ?
因此10个时间戳的同一行的10个版本将一起存储?整个表格的存储方式如何?
对于给定列的所有值的扫描是否与面向列的模型一样快?
SELECT cf:a from test
答案 0 :(得分:2)
因此10个时间戳的同一行的10个版本将一起存储?整个表格的存储方式如何?
Bigtable是一个面向行的数据库,因此单行的所有数据都存储在一起,按列族进行组织,然后按列进行组织。数据以反向时间戳顺序存储,这意味着要求获取最新值很容易,而且很快,但很难要求最旧的值。
对于给定列的所有值的扫描是否与面向列的模型一样快?
SELECT cf:a from test
不,面向列的存储模型将所有行中的单个列的所有数据存储在一起。因此,面向列的系统(例如Google BigQuery)中的全表扫描比面向行的存储系统更快,但是面向行的系统提供基于行的突变和基于行的原子面向列的存储系统通常无法实现的突变。
除此之外,Bigtable以字典顺序提供所有行键的排序顺序;面向列的存储系统通常不做这样的保证。