一个 hash 表里大约有 20W 个字段,每个字段 2kb 。
使用 HMGET 一次获取 2W 个字段会有问题吗,如果优化。
HMGET 的性能瓶颈大约是达到多少量级
1
sinksmell 2023-12-21 13:31:18 +08:00 via Android
有问题,命令执行太慢了会阻塞后面的请求,网络带宽占用也高。优化,可以改成 pipeline 。
|
2
zdt3476 2023-12-21 13:44:24 +08:00
有没有性能瓶颈取决于你这个接口的请求频率了,具体问题楼上也说了。话说什么行为会一次性要用到两万的字段。
|
4
Lax 2023-12-21 13:56:24 +08:00
好奇 20 万个字段的 key 都是啥
|
5
unt OP @sinksmell #1 HMGET 的时间复杂度 On ,这个 n 是要查询的字段数量吗,和数据库大小有关系吗。换言之,从 20W 条数据的表里 HMGET 1 个字段 和 从 1W 条数据的表里 HMGET 1 个字段, 时间上有差别吗
|
7
jyao 2023-12-21 17:04:00 +08:00
BigKey 通常以 Key 的大小和 Key 中成员的数量来综合判定,例如:
Key 本身的数据量过大:一个 String 类型的 Key ,它的值为 5 MB Key 中的成员数过多:一个 ZSET 类型的 Key ,它的成员数量为 10,000 个 Key 中成员的数据量过大:一个 Hash 类型的 Key ,它的成员数量虽然只有 1,000 个但这些成员的 Value (值)总大小为 100 MB 推荐值: 单个 key 的 value 小于 10KB 对于集合类型的 key ,建议元素数量小于 1000 个人推荐你可以把 key 拆分一下, 拆成多个 key, 这样避免对元素较多的 hash 、list 、zset 等做运算会耗时较旧,使主线程被阻塞, 这样可能会导致一条命令干死一个实例 |
8
cnleon 2023-12-21 19:35:21 +08:00
比较好奇为啥要一次取那么多?
|