为每个帖子分别获取请求和数据库命中以获得类似状态

时间:2015-08-30 07:25:31

标签: mysql django python-2.7 django-queryset django-filter

所以我想在Django上创建一个社交网络。与任何其他社交网络一样,用户可以选择喜欢帖子,并且每个喜欢的内容都存储在与用于在新闻Feed中显示的帖子的模型不同的模型中。现在我尝试了两种选择来获得同样的状态。

1.最少数据库命中:

创建一个sql查询,并为每个帖子ID获取类似条目(如果它们存在)。现在我使用自定义django模板标记,通过搜索包含类似状态的数组来查看Queryset中是否存在当前帖子的相似条目所有帖子。 这样我就可以使用数据库获取所有值,并使用python从列表中搜索特定值。

2.每个查询的单独数据库查询:

这里我使用相同的自定义模板标签,而是通过查询集搜索我使用mysql数据库进行大部分繁重的工作。 我为每个条目使用了model.objects.get()。

哪种算法更有效。此外,我计划获得另一个数据库服务器,如果网络延迟仅为0.1毫秒,这可以改变选择。

无论如何,我可以随时随地获得这些状态作为布尔值以及单个数据库查询中的所有帖子。

第一种方法的示例查询可以是

让post_list成为post QuerySet

models.likes.objects.filter(user=current_user,post__in = post_list)

1 个答案:

答案 0 :(得分:0)

这不是你问题的直接答案,但我希望它仍然有用。

  

并且这些喜欢中的每一个都存储在与用于新闻订阅的模型不同的模型中

我认为你有一个设计问题。最好是创建描述帖子的模型,然后将字段users_that_liked_it添加为many-to-many relationship到您的用户模型。然后,您可以执行post.users_that_liked_it之类的操作,并获取所有喜欢您网页的用户的查询集。

在我看来,你也应该避免尽可能多地将逻辑放在模板中。它们根本就不是为它而制造的。逻辑属于模型类,或者,如果它依赖于访问的页面,则在视图中。 (根据经验)。

最后,如果性能是您的主要担心,那么您可能不应该使用Django。它不是那么快。 Django给你的是能够编写干净,简洁的代码。对于新项目而言,这比绩效要重要得多。问问自己:有多少(个人)项目失败,因为他们的表现不好?还有多少失败,因为创建者陷入混乱的代码?

以下是我的建议:赞成清晰度而非性能。特别是在一个年轻的项目中。

相关问题