我正在为我的类似报纸的站点创建一个基于Django的站点。在整合网站的过程中,我遇到的最不明显和最常识的任务是如何最好地为页面的侧边栏生成一个“热门文章”列表。
首先想到的是某种更新的数据库列(基于什么?)每一种观点。在我的直觉看来,这似乎是可笑的数据库密集型和不切实际的,因此我想我想要找到另一个解决方案。
谢谢大家。
发布于 2010-07-29 14:57:38
我会尝试一下celery (使用django-celery)。虽然它不是那么容易配置和使用作为缓存,但它使您能够队列任务,如递增计数器,并在后台执行它们。它甚至可以与缓存技术相结合-在视图中增加缓存中的计数器,并定义将不时运行的PeriodicTask,重置计数器并将其写入数据库。
我想起来了--我曾经发现过this blog entry,它提供了一种很好的方法,可以通过AJAX JS调用在数据库中递增'viewed_count‘(或类似的)列。如果你的交通不是很拥挤,也许这是个好主意?
在这篇文章中也提到了django-tracking,但我对它了解不多,我自己还没有用过它。
发布于 2010-07-29 17:41:50
过早优化,首先尝试db方式,然后看看它是否真的对数据库太敏感。任何像样的数据库都有如此好的缓存,所以可能不会有太大的影响。即使这是一个问题,也可以看看这里的其他db/cache建议。
顺便说一句,与简单的视图更新相比,每个视图都有更密集的数据库查询。
发布于 2010-07-29 12:56:41
如果您执行类似于按顶部视图排序的操作,那么在DB中索引视图列将会更快。另一种选择是每小时左右只收集前x篇文章,然后将这些值放入Django的缓存框架中。
缓存列表的好处是,您用来确定热门文章的算法可以像您喜欢的那样复杂,而不会在每个页面视图中都对DB造成很大的影响。Django的缓存框架可以使用内存、数据库或文件系统。我更喜欢DB,但其他许多人更喜欢内存。我相信它使用了pickle,所以你也可以直接存储Python对象。它很容易使用,推荐。
https://stackoverflow.com/questions/3359214
复制相似问题