gpt4 book ai didi

performance - HMGET 以及字段数量和阅读性能之间的相关性

转载 作者:行者123 更新时间:2023-12-02 09:37:12 28 4
gpt4 key购买 nike

对 HMGET 性能有一些疑问。

您能解释一下哈希中的字段数量如何影响读取性能吗?

示例 1. 20000 个请求。 HMGET 有 4 个字段。管道中的命令。哈希包含760个字段在测试机上大约需要1500ms。

示例 2.20000 个请求。 HMGET 有 4 个字段。管道中的命令。 Hash包含30个字段在测试机上大约需要300ms。

最佳答案

在这两种情况下,它都应该是 O(1) - 与哈希中的字段数量无关。因此,20 倍的按键数量需要 5 倍的时间,这听起来有些过大。

我尝试复制并获得非常一致的性能。这是我所做的:

创建了三个哈希,每个哈希有 10、1000、100000 个字段:

> EVAL "for i=1,10 do redis.call('HSET', KEYS[1], i, i) end" 1 Test1HMGET
(nil)
> EVAL "for i=1,1000 do redis.call('HSET', KEYS[1], i, i) end" 1 Test2HMGET
(nil)
> EVAL "for i=1,100000 do redis.call('HSET', KEYS[1], i, i) end" 1 Test3HMGET
(nil)
> HLEN Test1HMGET
(integer) 10
> HLEN Test2HMGET
(integer) 1000
> HLEN Test3HMGET
(integer) 100000

然后运行redis-benchmark测试 HMGET:

$ redis-benchmark -n 200000 -c 1 -q HMGET Test1HMGET 4 6 7 9
HMGET Test1HMGET 4 6 7 9: 8841.73 requests per second
$ redis-benchmark -n 200000 -c 1 -q HMGET Test2HMGET 4 6 7 9
HMGET Test2HMGET 4 6 7 9: 8788.89 requests per second
$ redis-benchmark -n 200000 -c 1 -q HMGET Test3HMGET 4 6 7 9
HMGET Test3HMGET 4 6 7 9: 8863.68 requests per second
$ redis-benchmark -n 200000 -c 1 -q HMGET Test3HMGET 45 667 567 56789
HMGET Test3HMGET 45 667 567 56789: 8819.51 requests per second

如图所示,无论哈希长度如何,它始终获得约 8800 rps。

其他命令,例如 HGETALL,确实出现了下降。

$ redis-benchmark -n 20000 -c 1 -q HGETALL Test1HMGET
HGETALL Test1HMGET: 7840.06 requests per second
$ redis-benchmark -n 20000 -c 1 -q HGETALL Test2HMGET
HGETALL Test2HMGET: 600.08 requests per second

您的测试中一定有其他因素导致您观察到的差异,如果您使用不同的字段,则可能是有效负载差异。

更新:正如OP所指出的,一旦接近hash-max-ziplist-entries,就会出现性能差异。请参阅Antirez article ,和this post 。由于压缩,您的平均读取性能会下降。这是 CPU/内存的权衡。

在我的机器上,我的 max-ziplist-entries = 512。在键空间末尾,性能降低了 2.3 倍。一旦我们超过压缩优化阈值(514 个字段),它在整个键空间中保持不变,但内存使用量增加了 6.6 倍。

关于performance - HMGET 以及字段数量和阅读性能之间的相关性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59309254/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com