【发布时间】:2009-08-29 05:30:01
【问题描述】:
我有一个在没有 memcached 的共享主机中运行的站点。 那么,如何将 MySQL 内存 DB 像 memcached 一样作为对象缓存?
【问题讨论】:
我有一个在没有 memcached 的共享主机中运行的站点。 那么,如何将 MySQL 内存 DB 像 memcached 一样作为对象缓存?
【问题讨论】:
我会说,如果您运营的网站需要 memcached,那么您不应该在共享主机上运行它。
这是我轻率的回答。这是一个真正的答案:
Memcached 比 MEMORY 存储引擎有一些很好的优势。
作为缓存解决方案,我不会选择 MySQL MEMORY 存储引擎。由于您使用的是 PHP,因此您应该使用 APC 或 Xcache 或其他东西。它们具有数据缓存功能,更适合 PHP 中的典型用法。
如果您没有使用其中一种 PHP 缓存技术,那么与担心 memcached 与 MEMORY 存储引擎相比,这是一个更重要的改进领域。
【讨论】:
我同意 Bill 的观点,这样使用 MySQL 不会获得同样的性能提升。
假设:
确保您的主机启用了内存存储引擎。
SHOW ENGINES;
这将显示您的 mysql 实例中安装的所有存储引擎的列表和状态。
Memcache 允许您存储任意长度的数据。在内部,它会检查您的数据以查看它的长度,并将其放置在与您存储的项目大小最接近的预分配内存桶中。这部分逻辑,你需要自己实现。 MySQL 的内存存储引擎只接受固定长度的行。要在 mysql 中获得类似的效果,您需要在内存中创建多个具有不同长度的 char 字段的表来存储数据。 http://dev.mysql.com/doc/refman/5.0/en/memory-storage-engine.html
无论键实际存储在哪个表中,选择所有“桶”之间具有联合的表都会产生正确的值。
mysql 的一个陷阱,如果您将数据存储在比该字段长的字段中(例如 16 个字符字段中的 18 个字符),mysql 将截断它而不会出现任何错误。
这是一个更好的主意:将 Zend_Cache 与“文件”后端一起使用。 这将像 memcache 一样将内容存储在网络服务器本地磁盘上。 连接到共享主机中的数据库通常很昂贵。 (我的 Godaddy 帐户的第一次连接需要 1 到 2 秒。)即使是慢速磁盘也比这更快。 http://framework.zend.com/manual/en/zend.cache.html
【讨论】: