具有历史记录的唯一视图计数

时间:2015-05-23 02:00:38

标签: python postgresql

我正在寻找一种简单的方法来存储和检索计数,无论用户多次查看唯一的帖子/页面。事后/ 1帖子/ 2。我也对帖子的总观看次数感兴趣。

我认为我应该如何实施:

  1. 使用列(userid,postid,datecreated)创建userpostview表
  2. 每次使用userid创建userpostview行,如果记录不存在则创建postid
  3. 检索userid == X
  4. 的行总数
  5. 检索postid == Y
  6. 的行总数

    对于有几行的小型应用程序是可以的。但我预计很多不同的用户每天都会阅读不同的帖子。因此,userpostview表将远大于用户表或post表的表。从长远来看,我相信这将是一个性能问题,对吗?例如,连续调用计数可能会减慢读取速度。我想知道在这种情况下缓存计数是否理想。或者是否应该有一个单独的表来保存增量计数器?

    我正在使用带有sqlalchemy后端的烧瓶来postgresql。这还够吗?

    然而,在做了一些研究后,我看到了这个:

    https://www.youtube.com/watch?v=G-lGCC4KKok

    http://highscalability.com/blog/2012/3/26/7-years-of-youtube-scalability-lessons-in-30-minutes.html

    我应该“假装”柜台吗?有更好的方法吗? 欢迎任何更好或改进的建议。

    提前致谢。

1 个答案:

答案 0 :(得分:1)

你是logging user interactions with your application吗?

记录可以是存储此类数据的好方法。只需在Flask应用程序中设置一个简单的记录器,每次用户加载帖子页面时都会创建一个日志。将user_id,post_id和timestamp保存到日志文件中。 (注意:如果您担心日志文件过大,可以configure the logger to start a new file every day)。

设置日志记录后,您可以使用实用程序来解析日志,并为您提供汇总结果,例如您要求的结果。或者您甚至可以使用Python解析日志并运行自定义"查询"。

我建议使用ELK stack。 Logstash,Elasticsearch和Kibana是免费的开源项目。在一小时内,您就可以获得用户网站上活动的精美图表和图表。