【问题标题】:An efficient way to store view counts for objects?存储对象视图计数的有效方法?
【发布时间】:2011-05-31 06:49:29
【问题描述】:

我维护了一个应用程序,用户可以在其中存储图像,然后共享它们。该系统由后端的 MongoDB 提供支持。大多数图像描述页面都缓存为平面 HTML 文件,但我可以在加载文件之前运行一些代码。

我决定为系统实施查看计数。我想知道什么是最好的存储位置。它应该类似于 Memcached,但它应该每隔一小时左右保存一次观看次数,因此即使我们的服务器必须重新启动,我们也不会丢失观看次数。

什么是最好的解决方案(最好使用 PHP 扩展作为客户端)?

【问题讨论】:

    标签: php count memcached persistent-storage


    【解决方案1】:

    您可能会研究 Redis。有点像 NoSQL 和 memcached 之间的交叉。不过,您可以将 Redis 保存到磁盘。 Is memcached a dinosaur in comparison to Redis?

    【讨论】:

      【解决方案2】:

      做简单的事......如果您不需要实时报告/统计,您应该只解析每日 apache 日志并将匹配的数量存储到数据库中,甚至以平面文件格式存储。

      好处?

      1. 它不会损害您现有的应用程序
      2. 它不需要额外的内存缓存等
      3. 只需要解析每日日志apache(一天一次)
      4. 可恢复

      当然,这不会阻止您设置 cronjob 以定期读取/更新数据库(以获得更新的视图计数)

      【讨论】:

        【解决方案3】:

        我曾经通过将视图计数存储在 memcached 中,然后根据视图数量以随机间隔更新数据库来解决此问题。存储到数据库的概率是 1/sqrt(视图数)。这有很好的特性。如果视图数量很少,比如 4,那么写入数据库的概率是 1/2。如果对象上的视图数量很高,例如 1,000,000,则概率为 1/1000。它似乎运作良好。

        【讨论】:

          【解决方案4】:

          听起来视图计数是针对每个缓存的平面 HTML 文件的?为什么不将它们存储在文件开头的一些代码中。查看文件时可以取出来...

          【讨论】:

          • 查看次数由 PHP 作为 JS 变量添加到 HTML 文件中。然后 Javascript 将它放在正确的位置。而且,您的建议远非有效。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-02-29
          • 2016-03-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多