我的数据库中有一个表有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中的密钥是否会影响性能?
答案 0 :(得分:1)
您需要考虑两点:
使用memcached,往返的成本非常低,而且通常非常确定(在正确的网络上大约半毫秒)。使用mysql,往返的成本取决于更多因素(例如查询的复杂性,最终I / O的延迟等等)。你应该考虑到mysql往返的成本比memcached更贵。
现在往返次数怎么样?使用mysql,应用程序将只生成一个(前提是您一次获取所有行)。使用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正确实现会稍微提高效率,并且可扩展性更高。数据库压力越小,系统的可扩展性就越高。