我有一个学习任务,我必须用Django实现一个页面视图计数器。我无法找到关于这个主题的好教程。目前,我不确定有关实施和奇迹的几个方面:
count()
缓慢(如果有数千页,那么cpu很难)?也许这个主题有很好的资源,或者我认为方向错误?谢谢。
答案 0 :(得分:1)
我认为你开始以正确的方式看待权衡。您的问题的答案与您的应用程序中的哪种操作会因性能损失而受到的影响更严重。
换句话说,a)人们更频繁地访问网页,或者b)是否有人经常检查页面数量?几乎可以肯定,答案是“a”。在这种情况下,有效地优化存储访问与有效查询访问次数更有意义。
是的,如果您使用带有“页面”列的表将“视图”存储为整数,则由于事务处理,性能可能会降低。对同一页面的多个入站请求都需要按顺序访问该行增加计数。请参阅Django文档here中的详细信息。
另一方面,创建一个“访问”记录,按设计最终会有很多行也可以。你是对的,计数可能会变慢,但有办法解决这个问题。您可以cache it,但缓存可以最佳地存储生成成本高但不经常更改的数据。此案例不符合该标准,因为页面查看计数可能会经常发生变化。
这还取决于您的计数需要多少准确。假设您使用的是PostgreSQL,getting approximate counts有一些有用的技术可以提高性能。
另请参阅this info关于PostgreSQL中COUNT()
性能的信息。获取整个大表的准确行数几乎总是很慢,但是如果您在访问表上使用“页面”键并使用WHERE
条件计数,则由于索引可能不会太糟糕。 / p>
最终解决问题的唯一方法就是尝试一下,看看痛苦的表现惩罚(头韵......)到底在哪里并修复它们。总是存在固有的权衡。