2012-12-28 111 views
0

例如,考虑一个复合主散列和范围密钥表,其中散列密钥表示设备ID,并且设备ID“D17”的请求特别严重。要提高此“热”散列密钥的读写吞吐量,请从固定集合(例如1至200)中选取一个随机数,然后将其与设备ID连接起来(这样您可以将D17.1,D17.2 D17.200)。由于随机化,设备ID“D17”的写入均匀分布在多个散列键值上,产生更好的并行性和更高的整体吞吐量。关于亚马逊dynamodb数据库

该策略大大提高了写入吞吐量,但由于您不知道200个密钥中哪些包含该项目,因此特定项目的读取变得更难。您可以改进此策略以获得更好的阅读特征:而不是选择一个完全随机的数字,而是选择一个数字,您可以从项目的固有内容进行计算。例如,如果项目表示拥有该设备的人员,则根据其名称或用户标识计算哈希键后缀。这个计算应该计算一个介于1和200之间的数字,在给定任何一组名称(或用户ID)的情况下,它是相当均匀分布的。一个简单的计算通常就足够了(例如,人名模板200中的字母的ASCII值的乘积+ 1)。现在,写入均匀分布在散列键(以及分区)之间。而且您可以轻松执行get操作,因为您可以在您想要检索特定“设备所有者”值时确定所需的哈希键。查询操作仍然需要针对所有D17.x密钥运行,并且您的应用程序需要客户端的一些逻辑来合并每个散列密钥的所有查询结果(本例中为200)。但是,该模式避免了让一个“热”散列键占用所有的工作量。

任何人都可以请解释他们在上面的例子中说什么?

在此先感谢

阿明

回答

1

这简直就是试图优化读/写吞吐量为特定的高度使用哈希键的策略。你基本上将一个散列键分割成(在本例中)200个不同的散列键,这样你就可以根据某种散列的计算来读写所需的键。真的,读取需要散列,以便您可以确定要请求的密钥。

+0

非常感谢您的回答。 –

+0

如果您对此感到满意,您应该在此答案上勾上勾号大纲(表示感谢) –