PHP、MySQL 内存数据库以及 memcached

5

我有一个网站,它在没有memcached的共享主机上运行。 那么,如何将MySQL内存数据库作为对象缓存,就像memcached一样呢?

2个回答

15

我认为,如果你经营的网站需要使用 memcached,就不应该在共享主机上运行。

这是我的轻率回答。以下是真正的回答:

与 MEMORY 存储引擎相比,Memcached 有一些优点。

  • 存储分布在多个服务器上。MEMORY 存储引擎仅限于单个主机,并受该主机的 CPU 和内存的限制。
  • 快速访问各个条目。MEMORY 存储引擎仅具有表级锁定,因此并发性受到影响。
  • 非关系型键值存储。MEMORY 存储引擎更加结构化,对于缓存类型的使用不太有用。此外 MEMORY 将 varchar 扩展为完整长度,因此存储效率较低。

作为缓存解决方案,我不会选择 MySQL 的 MEMORY 存储引擎。由于您正在使用 PHP,应该使用 APC 或 Xcache 等。这些具有更适合 PHP 典型使用的数据缓存功能。

如果您没有使用这些 PHP 缓存技术,那么改进这个更重要,而不是担心 memcached 与 MEMORY 存储引擎之间的区别。


1

我同意Bill的观点,使用MySQL不会获得相同的性能提升。

假设情况如下:

确保您的主机启用了内存存储引擎。

SHOW ENGINES;

这将显示您mysql实例中安装的所有存储引擎的列表和状态。

Memcache允许您存储任意长度的数据。在内部,它会检查您的数据以查看其长度,并将其放置在最接近您存储的项目大小的预分配内存桶中。那部分逻辑,您需要自己实现。MySQL的内存存储引擎仅接受固定长度的行。要在mysql中获得类似的效果,您需要创建几个具有不同长度字符字段的内存表来存储数据。 http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html

通过在所有“桶”之间进行联合选择表,无论密钥实际存储在哪个表中,都将产生正确的值。

在mysql中有一个问题,如果您将数据存储在比字段(例如16个字符的18个字符字段)更长的字段中,则mysql将在没有任何错误的情况下将其截断。

这里有一个更好的想法:使用Zend_Cache和'file'后端。 这将像memcache一样将东西存储在Web服务器本地磁盘上。 在共享主机中连接到数据库通常很昂贵。(在我的Godaddy帐户上,第一次连接需要1到2秒。)即使是慢速磁盘也比那快。 http://framework.zend.com/manual/en/zend.cache.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接