BigTable 文档引用了每行重复的
column qualifier
,并建议使用数据本身作为限定符。但对于column family
空间使用方面却没有类似的提及。
所以我很困惑 BigTable 是否在每一行中存储列族,或者 Google 是否有一些技术不在每一行中存储
column family
。列族需要使用 UI 控制台或 cbt CLI 工具(或 SDK 和 API)创建,而列限定符是在写入数据时动态创建的。因此,可能会对列族存储进行一些优化,因为在写入数据之前 BigTable 引擎已经知道了。
这是我迄今为止检查过的一些参考资料,
将列限定符视为数据。由于您必须为每列存储列限定符,因此您可以通过用值命名列来节省空间。
column family
存储在每一行中,因为关键结构似乎是(列族+列限定符+时间戳)-ref,行本质上是键/值条目的集合,其中键是列族、列限定符和时间戳的组合。
每行重复列族和列限定符名称。因此,名称尽可能短,以减少 HBase 存储和读取的数据量。
目前,我计划使用列族名称作为单个字母,例如,
d
用于默认,或 m
用于元数据等。但想检查是否可以使用全名本身,以防列族不占用每一行的存储空间。
Bigtable 为每个列族创建一个内部整数 id,这个整数存储在底层 SSTable 中。因此,不必担心较长列族名称的存储影响 - 它只是元数据。