我维护一个应用程序,用户可以在其中存储图像,然后共享它们。该系统由后端的 MongoDB 提供支持。大多数图像描述页面都缓存为平面 HTML 文件,但我可以在加载文件之前运行一些代码。
我决定为系统实施视图计数。我想知道什么是最好的存储位置。它应该类似于 Memcached,但它应该每隔一小时左右保存一次查看次数,因此即使我们的服务器必须重新启动,我们也不会丢失查看次数。
最好的解决方案是什么(最好使用 PHP 扩展作为客户端)?
我维护一个应用程序,用户可以在其中存储图像,然后共享它们。该系统由后端的 MongoDB 提供支持。大多数图像描述页面都缓存为平面 HTML 文件,但我可以在加载文件之前运行一些代码。
我决定为系统实施视图计数。我想知道什么是最好的存储位置。它应该类似于 Memcached,但它应该每隔一小时左右保存一次查看次数,因此即使我们的服务器必须重新启动,我们也不会丢失查看次数。
最好的解决方案是什么(最好使用 PHP 扩展作为客户端)?
你可以看看 Redis。有点像 NoSQL 和 memcached 之间的交叉。不过,您可以将 Redis 保存到磁盘。 与 Redis 相比,memcached 是恐龙吗?
做简单的事情......如果您不需要实时报告/统计,您应该只解析每日 apache 日志并将匹配的数量存储到数据库中,甚至以平面文件格式存储。
好处?
当然,这不会阻止您设置 cronjob 以定期读取/更新数据库(以获得更新的视图计数)
听起来视图计数是针对每个缓存的平面 HTML 文件的?为什么不将它们存储在文件开头的一些代码中。查看文件时可以取出来...
我曾经通过将视图计数存储在 memcached 中然后根据视图数量以随机间隔更新数据库来解决这个问题。存储到数据库的概率是 1/sqrt(视图数)。这有很好的特性。如果视图数量很少,比如 4,那么写入数据库的概率是 1/2。如果对象上的视图数量很高,例如 1,000,000,则概率为 1/1000。它似乎运作良好。