Django中动态创建的顶级文章列表?

时间:2010-07-29 03:04:03

标签: python mysql django

我正在为我的报纸网站创建一个Django支持的网站。我在将网站整合在一起时遇到的最不明显和常识性的任务是如何最好地为页面的侧边栏生成“热门文章”列表。

首先想到的是某种数据库列,每个视图都会更新(基于什么?)。这似乎(以我的直觉)数据库密集且不切实际,因此我想我想找到另一种解决方案。

谢谢大家。

4 个答案:

答案 0 :(得分:1)

我会尝试celery(使用django-celery)。虽然配置和使用缓存并不那么容易,但它可以让您对增加计数器等任务进行排队,并在后台执行。它甚至可以与缓存技术相结合 - 在视图中增加缓存中的计数器,并定义将不时运行的PeriodicTask,重置计数器并将它们写入数据库。

我记得 - 我曾经发现this blog entry提供了使用AJAX JS调用在数据库中递增'seen_count'(或类似)列的好方法。如果你没有繁忙的交通,也许这是个好主意?

这篇文章中还提到了django-tracking,但我对此并不了解,我自己从未使用过它。

答案 1 :(得分:1)

过早优化,首先尝试db方式,然后查看它是否真的对数据库敏感。任何体面的数据库都有如此好的缓存,它可能无关紧要。即使这是一个问题,请在此处查看其他db / cache建议。

最有可能的是,对于每个视图,您将拥有比简单视图更新更多的密集数据库查询。

答案 2 :(得分:0)

如果您执行类似按顶视图排序的操作,则在索引数据库中的视图列时会很快。另一种选择是每小时左右只收集前x篇文章,并将该值投入Django的缓存框架。

缓存列表的好处在于,用于确定热门文章的算法可以像您希望的那样复杂,而不会在每个页面视图中都难以使用数据库。 Django的缓存框架可以使用内存,数据库或文件系统。我更喜欢DB,但许多人更喜欢记忆。我相信它使用pickle,所以你也可以直接存储Python对象。它很容易使用,推荐。

答案 3 :(得分:0)

索引不会有帮助因为它们的主要问题我认为并不是让排序列表有一篇文章用每页浏览写一篇文章。另一个指数实际上使这个问题变得更糟,尽管只是一点点。

所以我选择了缓存。我认为django的缓存垫片是一个问题,因为它需要在所有键上超时。我不确定这是由memcached强加的,如果不是那么请用redis。实际上只是使用redis,python库很棒,我之前从django项目中使用过它,它有原子增量和强大的排序 - 你需要的一切。