如果我有一组非常静态的数据,我希望能够尽快访问。我应该将数据缓存到Memcached中还是应该将其存储在HEAP表中或MySQL内部?一个人比另一个人更好吗?
还有其他选择更快吗?
答案 0 :(得分:20)
但是,memcached只是一个简单的键/值存储。如果您需要对数据执行更复杂的操作(即使是SELECT * WHERE x> 5),HEAP表也会更加强大。
Robert Munteanu提出了一个很好的观点。您的缓存层次结构应为:
如果您不需要将全局更改传播到此数据,则将其存储在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 的并发线程相互排队。”