Python 当小于25KB最小有效负载单位时,如何有效地批处理放入Kinesis的记录?
更新: 为了更详细地说明这个问题,put_记录是根据提交的记录数(分区键)和记录大小收费的。任何小于25KB的记录都按一个PU()计费。我们的个人记录平均每秒大约100字节。如果我们把它们单独放在一起,我们在PUs上的花费将比我们需要的多出几个数量级 无论采用哪种解决方案,我们都希望给定的UID始终位于同一个碎片中,以简化动觉另一端的工作。如果将UID用作分区键,则会自然发生这种情况 解决这个问题的一种方法是继续为每个UID执行PUT,但要及时缓冲它们。但是为了有效地使用PUs,我们将在流中引入250秒的延迟 这里给出的答案与我的答案相结合,为我提供了一种策略,用于将多个用户ID映射到每个碎片的静态(预定)分区键 这将允许将多个UID批处理到一个有效负载单元中(使用目标碎片的共享分区密钥),以便在它们每秒出现时将其写入,同时确保给定UID最终位于正确的碎片中 然后,我只需要为每个碎片提供一个缓冲区,只要有足够的记录(总计不到25KB)或达到500条记录(每个put_记录调用的最大值),就可以推送数据 这就让我们提前知道,如果将给定UID用作分区键,它自然会映射到哪个分区 专家说这是一种方法: 分区键是Unicode字符串,最大长度限制为256 字节。MD5哈希函数用于将分区键映射到128位 整数值和,以将关联的数据记录映射到碎片 除非之前有人这样做过,否则我将尝试查看中的方法是否生成有效的映射。我想知道在执行MD5之前是否需要将常规Python字符串转换为unicode字符串Python 当小于25KB最小有效负载单位时,如何有效地批处理放入Kinesis的记录?,python,amazon-kinesis,Python,Amazon Kinesis,更新: 为了更详细地说明这个问题,put_记录是根据提交的记录数(分区键)和记录大小收费的。任何小于25KB的记录都按一个PU()计费。我们的个人记录平均每秒大约100字节。如果我们把它们单独放在一起,我们在PUs上的花费将比我们需要的多出几个数量级 无论采用哪种解决方案,我们都希望给定的UID始终位于同一个碎片中,以简化动觉另一端的工作。如果将UID用作分区键,则会自然发生这种情况 解决这个问题的一种方法是继续为每个UID执行PUT,但要及时缓冲它们。但是为了有效地使用PUs,我们将在流中引入
可能还有其他解决方案,但这应该是可行的,如果没有挑战者出现,我将在这里接受现有的答案。摘自上一个答案:
来源:如果问题是重复的,请将其标记为重复。我不确定,python标记有点混乱。其他问题不完全相同。有趣的解决方案,但在这种情况下并不可取,因为在随机分区键之间平衡实际UID将落在客户机身上,我们有1300万个UID。我们不能像其他答案所建议的那样为每个put随机生成分区键,因为我们将有多个使用者,并且我们希望给定的uid始终指向同一个使用者。此问题和答案是我当前正在查找的内容:。我们的想法是加载带有散列键范围的流描述,md5是uid,并将其与这些范围进行比较,以确定它最终会出现在哪个碎片中。您这里有两个问题还是只有一个问题?你能澄清你的确切要求吗?