一.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。由于您现在可以写入四个不同的区域,因此理论上写入时的吞吐量是吞吐量的四倍,如果所有写入操作都进入同一个区域,则会有这样的吞吐量。


防止热点的第三种常用技巧是反转固定宽度或数字行键,以便最经常(最低有效位数)改变的部分在第一位。这有效地使行键随机化,但牺牲了行排序属性。