我想在“上次查看”列表中跟踪上次请求的文章。 我有RecentVisits模型这样做:
class RecentVisit(models.Model):
title = models.CharField(default='', blank='false', max_length=100)
slug = models.CharField(default='', blank='false', max_length=100)
我想将模型保持为固定宽度队列(FILA),所以我想知道最好的方法是什么?通过best
,我的意思是确实需要最少数据库命中的解决方案。
更新 这是我提出的解决方案:
l = RecentVisit.objects.values()
lastest_requests = l[::-1]
#Keep database table size constant by throwing away last element
if len(lastest_requests) > N_SAVED_ALLOWED:
lastest_requests.pop()
#Empty table
RecentVisit.objects.all().delete()
#Check of duplicates before saving to db
if not any(d['title'] == post.title for d in lastest_requests):
new_visit = RecentVisit(title= post.title, slug= post.slug)
new_visit.save()
#refill table with remaining (N-1) values
for r in lastest_requests:
req = RecentVisit(title= r['title'], slug= r['slug'])
req.save()
我在开发环境中增加了大约30ms的开销。但是我不确定它是最经济的,所以仍然在寻找更好的解决方案。