mysql - 增加键的数量是否会影响 memcached 的性能?

标签 mysql database caching memcached

我的数据库中有一个表,它有大约 40000 行。这些行的 ID 在 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.我可以使用“in”运算符直接查询数据库。这只需要一次查询。

我应该遵循哪种方法? memcached 中的泛洪键会影响性能吗?

最佳答案

你有两点需要考虑:

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

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

现在往返次数如何?使用 mysql,应用程序将只生成一个(假设您一次性获取所有行)。使用 memcached,您还可以生成单次往返,因为:

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

如果您使用分布式部署的 memcached(多个 memcached 实例),那么您的 key 将分布在多个节点上。同样,一个好的 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 个 key ,或者发送一批 8 个命令来获取 key 。

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

关于mysql - 增加键的数量是否会影响 memcached 的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31856807/

相关文章:

php - mysql: 1 INSERT INTO 查询两个结果

android - 如何让 webview 在 html 内容发生变化时自动刷新其缓存?

java - 缓存条目不会从缓存存储 (SingleFileCacheStore) 中删除

mysql - 如何从 mysqldump 添加特定数据库

postgresql - 应该如何更新 CRUD 应用程序中的 Redis 缓存?

mysql - 可能有多个返回的匹配连接到 MySQL 表

mysql - 使用更新和连接时未知列,即使该列存在

mysql - 如何从一个表中返回一行,其中包含 MySQL 中第二个表中匹配 ID 的数量?

sql - 使用DDD,如何实现批处理?

php - 从数据库中旋转图像并保存到数据库 blob 类型