在 memcached 中存储百万键值——好主意还是坏主意?

Storing million key-value in memcached -- good or bad idea?

我正在考虑将 memcached 与我的 PHP 应用程序结合使用来存储 500 万个键值对。我的 objective 是为了避免从数据库(在我的例子中是文件系统)来回。我可能每秒对键值进行 100-500 次访问。键值都是 MD5,格式为:

array( 'MD5X' => 'MD5Y', ... )

我不确定数据是如何存储的,但是如果我们乘以 5 million * 16 bytes (keys) + 5 million * 16 bytes (values),我们得到 ~180MB。

(编辑:尝试使用真正的 memcached 实例后,我用了 750MB 来存储所有项目。)

数据集是固定的,所以我只会从中读取。

问题:

  1. 这是好设计还是坏设计?
  2. 我可以强制 memcached 永远(除非服务器崩溃)必须重新加载数据吗?假设内存上限高于存储的数据?如果不是,我可以采用哪些技术来实现相同的目标。

非常感谢!

你会得到你需要的表现吗?确实。 Memcache 的速度非常快。 我们存储了大约 1000 万个密钥,我们每秒访问内存缓存大约 700 次。它从未让我们失望。

你可以在启动应用的时候加载memcache中的所有key,设置过期时间很长。您必须记住的是,memcache 最终是一个缓存。而且它不应该用作存储引擎。你必须设计它,认为总是有可能找不到你需要的数据(键),并在这种情况下进行数据库调用。

您可以考虑像 cassandra 这样的 noSQL 数据库,它具有出色的读写速度,可以满足您的需求。唯一的问题是与 memcache 相比,微调 cassandra 有点困难。