什么更快:内存表中的Memcached或MySQL如HEAP?

时间:2009-06-09 23:07:18

标签: mysql memcached

如果我有一组非常静态的数据,我希望能够尽快访问。我应该将数据缓存到Memcached中还是应该将其存储在HEAP表中或MySQL内部?一个人比另一个人更好吗?

还有其他选择更快吗?

4 个答案:

答案 0 :(得分:20)

对于简单的使用,memcached会更快,手动 - 连接设置在memcached上便宜得多,因为没有auth,缓冲区分配等。此外,memcached旨在轻松地在多个服务器之间分配密钥。

但是,memcached只是一个简单的键/值存储。如果您需要对数据执行更复杂的操作(即使是SELECT * WHERE x> 5),HEAP表也会更加强大。

Robert Munteanu提出了一个很好的观点。您的缓存层次结构应为:

  1. 全球(请求/流程的本地)
  2. APC(服务器本地)
  3. memcache(全球)
  4. 如果您不需要将全局更改传播到此数据,则将其存储在APC中是有意义的。如果在脚本执行期间需要多次访问它,则还应将其缓存在脚本中的globals中。

答案 1 :(得分:2)

最快的选择是本地系统上的内存缓存。这对于数百万的关系来说不会很好地扩展,但是非常快速且适用于小型数据集。

我没有在Memcached / MySQL HEAP之间进行性能测试,但我猜想Memcached会更快,因为它没有完整关系数据库引擎的开销。 Memcached几乎肯定会更好地扩展,因为你可以在服务器之间分配它,并在它们之间进行循环请求调度。

如果您需要在检索数据之前对数据执行任何过滤,则应使用MySQL。传输不需要的数据的性能开销可能会超过更快查找的好处。

如果我是你,我会将相关数据集加载到MySQL Memcached中,然后运行性能测试以查看哪个更适合您的数据集。如果有一个特别经常访问的数据核心,请考虑额外的机器本地缓存。

答案 2 :(得分:1)

如果它不是一个巨大的数额存储在你自己的过程中。那是最快的。

答案 3 :(得分:0)

我正在使用基于MYsql内存的表,由于查询的原因,Faster然后使用memcached。 Memcached是键值存储。

(即使是类似SELECT * WHERE x> 5之类的东西),弗兰克也已经写了。

我正在做非常复杂的查询。 2桌。如果键值上有1 GB数据,并且要过滤。这需要时间。这种情况下的MySQL速度更快,例如“ where dt> 123 and dt <321 and c = 0 。”

性能比较取决于使用情况。

“ MySQL内存存储引擎的并发性对于插入不利。所有进行 insert 的并发线程相互排队。”