越来越多的密钥会影响memcached中的性能吗?

时间:2015-08-06 13:13:18

标签: mysql database caching memcached

我的数据库中有一个表有40000行。这些行的数量介于1到40000之间。现在我想获取ID数据[1,2,800,5006,12006,25001,35000,35018]

对于这种情况,我可以采用以下方法之一:

1.通过单个memcached密钥存储每一行​​。与key_1一样,将存储row1的数据,key_2将存储row2的数据,依此类推。所以memcached中会有40000个键。对于上面给出的场景,我必须对memcached进行8次调用(每个id一次)。

2.我可以使用'直接查询数据库。 operator.This只需要一个查询。

我应该遵循哪种方法? memcached中的密钥是否会影响性能?

1 个答案:

答案 0 :(得分:1)

您需要考虑两点:

  • 单次往返的费用
  • 应用程序生成的往返次数

使用memcached,往返的成本非常低,而且通常非常确定(在正确的网络上大约半毫秒)。使用mysql,往返的成本取决于更多因素(例如查询的复杂性,最终I / O的延迟等等)。你应该考虑到mysql往返的成本比memcached更贵。

现在往返次数怎么样?使用mysql,应用程序将只生成一个(前提是您一次获取所有行)。使用memcached,您还可以生成单个往返,因为:

  • GET命令可用于一次获取多个键
  • 好的memcached客户端无论如何都支持流水线

如果使用memcached的分布式部署(几个memcached实例),那么您的密钥将分布在多个节点上。同样,一个好的memcached客户端会将往返行程并行化到各个节点。由此产生的成本将是最慢的往返之一。

多次获取(来自telnet)的示例:

set didier1 0 0 1
x
STORED
set didier2 0 0 1
y
STORED
get didier1 didier2
VALUE didier1 0 1
x
VALUE didier2 0 1
y
END

你不应该对memcached进行8次调用。您应该进行一次调用以获取8个密钥,或者发送一批8个命令来获取密钥。

在您的示例中,我会说使用memcached正确实现会稍微提高效率,并且可扩展性更高。数据库压力越小,系统的可扩展性就越高。