【问题标题】:Caching data vs. writing in memory table缓存数据与写入内存表
【发布时间】:2009-10-09 15:12:46
【问题描述】:

使用这三种方法之一实现快速哈希/会话存储的最佳方法是哪一种?

方式一: 在 MySQL 中创建一个内存表,用于存储创建条目时的哈希和时间戳。 MySQL 事件会自动删除所有超过 20 分钟的条目。这应该很快,因为所有数据都存储在内存中,但连接到数据库服务器的开销可能会破坏这一优势。

方式2: 我创建了一个以哈希作为文件名的空文件,并创建了一个自动删除所有超过 20 分钟的文件的 cronjob。由于 HDD 上的所有读取操作,这可能会变得很慢。

方式 3: 由于这将与 PHP 相关并且我们使用 Zend 框架,因此我可以使用 Zend_Cache 并以 20 分钟的生存时间存储散列。

我不想为此使用 Memcached 或 APC,因为我认为这对于一些小的哈希来说是一个很大的开销。

您有类似场景的经验吗?非常感谢您的经验和解决方案。

【问题讨论】:

  • 您的 方式 2 是 PHP 的默认会话处理程序正在执行的操作。
  • 是的。但是有很大的开销吗?高性能应用程序是否会因为性能问题而不使用默认会话处理程序?

标签: php session caching hash performance


【解决方案1】:

如果性能是一个问题,我肯定会选择 memcached。所有大型互联网站点都依赖 memcached 来缓存服务器密集型任务,甚至是会话存储和锁定机制。

如果你问我,Memcached 就是要走的路

【讨论】:

  • 我不使用 Memcached。我决定使用 APC,因为它的数据量很大。
【解决方案2】:

不要重新发明轮子 - 使用内存缓存。要么,要么衡量你的 MySQL 性能与 Memcache。请记住,无论如何,数据库访问通常始终是高性能环境中的瓶颈。

【讨论】:

    【解决方案3】:

    您是否还考虑所有这些方法的扩展问题?你说多少哈希?你说的是多少兆字节的数据?

    1. 如果可以,请将其保存在您的计算机内存中(您的变体 3)
    2. 将它放在磁盘上,但如果可以的话,将它保存在内存中(你的变体 2,如果你使用基于文件的会话,你可以使用 $session,正如有人指出的那样)
    3. 使用数据库

    你有很多数据吗?使用内存缓存。

    【讨论】:

      【解决方案4】:

      正如其他人所说,使用 memcached。如果 PHP 支持数据库连接池,例如 Java,我会推荐 MySQL,但 PHP 就是这样,memcached 是唯一真正的答案。

      【讨论】:

        猜你喜欢
        • 2014-05-06
        • 1970-01-01
        • 1970-01-01
        • 2021-10-14
        • 2010-12-21
        • 1970-01-01
        • 2016-06-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多