例如,考虑一个复合主散列和范围键表,其中散列键表示设备 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)的所有查询结果。但是,该模式避免了让一个“热”散列键承担所有工作负载。
谁能解释一下他们在上面的例子中说了什么?
提前致谢
阿明