如何正确实施评级系统(Django)?

2024-03-28 21:20:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个研究任务,我必须用Django实现一个页面视图计数器。关于这个问题,我找不到好的教程。目前,我对实施的几个方面还不确定,我想知道:

  1. 如果我保留一个结构类似(“Page”、“Views”)的表,那么Django是否会以某种方式锁定该表,那么当我现在有多个页面视图时,所有这些视图都会正确地添加到“Views”中?在
  2. 如果答案是肯定的,那不是很慢吗?在
  3. 如果我只使用“Page”列将数据写到表中,那么count()不是很慢吗(如果有数千页的话,cpu也很难做到)?在

也许在这个问题上有很好的资源,或者我认为方向不对?谢谢您。在


Tags: 数据django答案视图count方式page计数器
1条回答
网友
1楼 · 发布于 2024-03-28 21:20:10

我想你开始用正确的方式来权衡了。问题的答案与应用程序中的哪种操作会受到性能惩罚的影响更大有关。在

换言之,a)人们是否更经常访问页面,或者b)是否有人更频繁地检查页面数量?几乎可以肯定的是,答案是“a”。在这种情况下,与高效查询访问计数相比,优化存储访问更为合理。在

如果使用的表的“page”列将“views”存储为整数,则性能可能会因事务处理而降低。同一页的多个入站请求都需要访问该行才能增加计数。请参阅Django文档here中的详细信息。在

另一方面,创建一个“访问”记录(按设计,最终会有很多行)也是可行的。你说得对,计数可能会变慢,但有办法解决这个问题。您可以cache it,但缓存最适合于存储生成成本很高但很少更改的数据。这种情况不符合这个标准,因为页面视图计数可能会非常频繁地更改。在

这也取决于你的计数需要多精确。假设您使用的是PostgreSQL,对于getting approximate counts有一些有用的技术,它们的性能更好。在

另请参阅PostgreSQL中的this infoon COUNT()性能。获取整个大表的精确行数几乎总是很慢的,但是由于索引的关系,如果您在visits表上使用“page”键并使用WHERE条件进行计数,则可能不会太糟糕。在

最终解决问题的唯一方法就是尝试一下,看看痛苦的性能惩罚(头韵…)到底在哪里,然后解决它们。总有内在的权衡。在

相关问题 更多 >