一.table 设计重要考虑因素
1.rowkey设计
2.列镞设计
二、列镞设计
1.块大小,
2.块缓存
3.数据压缩
4.filter
5.memory
6.Time to live (TTL): 数据的保留时间
7.最低版本
8.最高版本
1.salting
salting是指为行键添加一个随机分配的前缀,以使其排序与其他方式不同
example:
假设您有以下的行键列表,表格按照字母进行拆分,以便字母表中的每个字母都有一个区域。前缀'a'是一个区域,前缀'b'是另一个区域。在此表中,所有以'f'开头的行都在同一个区域中。如下的行健:
foo0001
foo0002
foo0003
foo0004
现在,想象你想要在四个不同的地区存储这些信息。你决定使用四种不同的salting:a,b,c和d。在这种情况下,每个这些字母前缀将位于不同的区域。应用salting后,您可以使用以下rowkeys。由于您现在可以写入四个不同的区域,因此理论上写入时的吞吐量是之前吞吐量的四倍,如果所有写入操作都进入同一个区域,则会有这样的吞吐量。
a-foo0003
b-foo0001
c-foo0004
d-foo0002
然后,如果添加另一行,它将随机分配四种可能的盐值中的一种,并最终靠近现有的一行
a-foo0003
b-foo0001
c-foo0003
c-foo0004
d-foo0002
优点:提供数据存储的效率,让数据分布更均匀
缺点:在读取期间会产生成本
2. Hashing
除了随机分配之外,您可以使用单向散列,这会导致给定的行总是被相同的前缀“salting”,从而将负载分散到RegionServers上,但允许在读取时进行预测。使用确定性散列允许客户端重建完整的rowkey并使用Get操作正常检索该行
example:
还是以上面的例子为例,您可以改为应用单向散列,这将导致密钥为foo0003的行始终可预见地接收前缀。然后,为了检索该行,您已经知道了密钥。例如,您也可以优化事物,以便某些键对总是在相同的区域中。
3.Reversing the Key
防止热点的第三种常用技巧是反转固定宽度或数字行键,以便最经常(最低有效位数)改变的部分在第一位。这有效地使行键随机化,但牺牲了行排序属性。
假设您有以下的行键列表,并且您的表格被拆分,以便字母表中的每个字母都有一个区域。前缀'a'是一个区域,前缀'b'是另一个区域。在此表中,所有以'f'开头的行都在同一个区域中。本示例重点关注具有以下键的行:
假设您有以下的行键列表,并且您的表格被拆分,以便字母表中的每个字母都有一个区域。前缀'a'是一个区域,前缀'b'是另一个区域。在此表中,所有以'f'开头的行都在同一个区域中。本示例重点关注具有以下键的行:
现在,想象你想要在四个不同的地区传播这些信息。你决定使用四种不同的盐:a,b,c和d。在这种情况下,每个这些字母前缀将位于不同的区域。应用盐后,您可以使用以下rowkeys。由于您现在可以写入四个不同的区域,因此理论上写入时的吞吐量是吞吐量的四倍,如果所有写入操作都进入同一个区域,则会有这样的吞吐量。
防止热点的第三种常用技巧是反转固定宽度或数字行键,以便最经常(最低有效位数)改变的部分在第一位。这有效地使行键随机化,但牺牲了行排序属性。