【问题标题】:PHP - Redis/Memcachedb/Mongodb or other persistent storage to store counterPHP - Redis/Memcachedb/Mongodb 或其他持久存储来存储计数器
【发布时间】:2011-01-03 09:30:29
【问题描述】:

通过计数器,它可能是浏览量、下载量、投票数等。基本上,不是非常“关键”的数据。

存储这些信息的“最佳”方式是什么? Mysql 不是一个好的选择。你们都用什么?

【问题讨论】:

    标签: php redis memcachedb


    【解决方案1】:

    我想我会选择 Redis,因为:

    • Antirediz(他的昵称)正在积极开发Redis。 (每次我查看我的 github 仪表板时,他都会提交一些新代码)。他现在正在开发 redis fulltime 感谢 VMware
    • Redis 最终是持久的,因此性能非常出色(首先只使用快速的内存)。
    • Redis 有一个您需要的原子increment 操作。
    • Redis 有很多优秀的 PHP 库。还有一个写成C extension,所以它的性能非常好。 Redis website 也有这些扩展的概述。有些是纯 PHP 代码(运行一点点但速度较慢,但​​更容易配置)。

    【讨论】:

    • 我会说 redis。我正在做类似的事情,我在 20 美元的 512MB VPS 上每分钟推送 30k 个命令。 :)
    • 我们尝试将 redis 用于计数器系统。 Redis 的主要数据存储是 RAM,而我们的数据集太大而无法发挥作用。更像东京暴君的东西——不必一直将整个数据集保存在内存中——可能是更好的选择。
    • 一个简单的计数器不能保存在 RAM 中吗? Twitter 将几乎所有活跃的推文都存储在内存中。如果您想要性能,我认为您应该为内存模块支付一点现金。除此之外,您还可以便宜地买到几场公羊。
    【解决方案2】:

    带有 upserts 的 MongoDB 非常适合这个。

    如果您要存储以下内容:

    { "url" : "www.example.com", "pageviews" : 0 }
    

    您可以使用原子操作 $inc 以原子方式快速增加页面浏览量:

    db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}})
    

    如果您使用 upsert,则不必在更新文档之前检查文档是否存在。例如,如果你说:

    db.downloads.update({'url' : 'www.example.com'}, {'$inc' : {pageviews : 1}}, {"upsert" : true})
    

    如果 URL 为 www.example.com 的文档不存在(页面浏览量设置为 1),则将创建该文档,或者如果确实存在,则页面浏览量将增加。这意味着您不必担心预先填充集合。

    【讨论】:

      【解决方案3】:

      1990 年代著名的查看计数器使用简单的文件来存储数字。如果您只需要存储一个数字,那么任何东西都足够了。

      【讨论】:

      • 如果您获得任何有意义的流量,写入磁盘上的文件会出现并发问题。除非您使用文件锁定,否则您将面临锁定争用的风险。像 memcached 这样的项目存在是有原因的。
      • 但是,如果您只是将它用于一个简单(低流量)的网站,这可能会起作用并且很容易实现
      • 锁竞争并不难。 while(!get_lock() || count > 10000) { sleep(0.001); count++ }; fread() or fwrite(); remove_lock(); 像这样简单的东西可以轻松处理每秒数十万个请求...假设您选择的操作系统在文件系统操作方面速度很快。
      【解决方案4】:

      我会说 APC 或 memcached 是不错的选择。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-27
        • 2012-04-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-15
        • 2021-04-22
        • 2017-11-28
        相关资源
        最近更新 更多