例如,考虑复合主哈希和范围密钥表,其中散列密钥表示设备ID,并且特别严重请求设备ID“D17”。要增加此“热”散列键的读写吞吐量,请选择从固定集(例如1到200)中选择的随机数,并将其与设备ID连接(这样就可以得到D17.1,D17.2到D17.200)。由于随机化,设备ID“D17”的写入均匀分布在多个散列键值上,从而产生更好的并行性和更高的总吞吐量。
此策略极大地提高了写入吞吐量,但由于您不知道200个密钥中的哪个包含该项目,因此对特定项目的读取变得更加困难。您可以改进此策略以获得更好的读取特征:选择一个能够从项目的内在值计算的数字,而不是选择完全随机的数字。例如,如果项表示具有设备的人,则从其名称或用户ID计算哈希键后缀。该计算应计算1到200之间的数字,该数字在给定任何名称(或用户ID)的情况下均匀分布。简单的计算通常就足够了(例如,人名中的字母的ASCII值的乘积模200 + 1)。现在,写入均匀地分布在散列键(以及分区)上。并且您可以轻松执行get操作,因为您可以在要检索特定“设备所有者”值时确定所需的哈希键。查询操作仍然需要针对所有D17.x键运行,并且您的应用程序需要客户端上的某些逻辑来合并每个哈希键的所有查询结果(在本例中为200)。但是,架构避免了一个“热”哈希密钥占用了所有工作负载。
有人可以解释一下他们在上面的例子中说了什么吗?
提前致谢
Al Amin
答案 0 :(得分:1)
这只是一种尝试优化特定高度使用的哈希密钥的读/写吞吐量的策略。您基本上将一个哈希键分成(在这种情况下)200个不同的哈希键,其方式允许您根据某种哈希的计算读取和写入所需的键。实际上,读取需要散列,以便您可以确定要请求的密钥。