【问题标题】:Efficient rating system高效的评级系统
【发布时间】:2010-12-29 04:38:35
【问题描述】:

我正在为这个拥有大量用户的网站构建新闻评级脚本。我正在努力使这个网站尽可能高效,现在我想知道跟踪投票的最有效方法是什么。我当然不希望用户投票不止一次。

我的第一个想法是将它存储在我的 MySQL 数据库中,但我担心这会对我的网站速度产生负面影响,因为这个表会变得很大。

将其存储在数据库中仍然是最佳解决方案还是有更好的解决方案。

【问题讨论】:

  • 你能定义“很多”吗?一个有几百行的 MySQL 表,如果索引正确,一般不会有问题——你总是可以在这里和那里添加一些缓存。

标签: php performance rating


【解决方案1】:

既然你不能使用 memcached,我会这么说。一个体面的数据库服务器(体面的硬件 + 体面的数据库实现)应该能够很好地处理这个问题。一个带有article-id 物理索引和代表投票的第二个条目的单个表将轻松处理一些googillion(是的,我编造了这个词)文章:P

理由:

数据库服务器维护统计数据 -- 阅读:自我调整 -- 并且只有热门项目(索引 + 行条目)保留在内存中。

道德:

除非它们成为问题,否则不要担心这些事情——即,如果你的公司是 Facebook 的规模,我会担心。

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      使用正确索引的投票表,无论您的表有多大,您都可以保持合理的性能(当然,超过某个点,您的表将太大而无法放入缓存中,但这会涉及到一个非常大的用户和项目的数量)。

      添加一些针对每个用户的缓存(在客户端,在 $_SESSION 中,使用 memcached),您可以获得相当快的“否”响应时间)。

      【讨论】:

      • 客户端缓存不会让这个“很多”更有效率。用户对文章进行评分以供其他用户查看,而客户端缓存根本不会做任何事情......
      • 客户端缓存的重点是向用户自己提供“我已经投票”的信息。 “这篇文章的 N 票”信息必须以另一种方式提供。
      【解决方案4】:

      如果您计划拥有超过 1,000,000 条记录,则应确保表的结构是有效的(这对您的示例来说应该不难)并且您正确地对其进行索引。

      Memcached 将是实现缓存的最简单方法,并且在您的网站增长且需要更多服务器时易于扩展。

      【讨论】:

        【解决方案5】:

        Memcached 将是一个非常好的方法。您需要不时从 memcached 同步(我会在您的 mysql 服务器上使用 cron 脚本使用 pull 模型执行此操作)。

        【讨论】:

        • 我不允许在网络服务器上安装任何东西。
        • 您只需要在网络服务器上安装客户端库。但是,是的,我可以看到问题所在。您需要在某处安装 memcached。
        • 本文探讨了几种缓存选项。有些不需要安装额外的模块:blog.digitalstruct.com/2008/02/27/…
        猜你喜欢
        • 2023-03-14
        • 1970-01-01
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多