在django和postgres中实现like系统

在django和postgres中实现like系统,django,postgresql,Django,Postgresql,我想为我们的项目实现一个类似的系统,我的问题几乎是关于性能的,我想将django与Postgresql DB一起使用,在models.py中,我有一个类似的模型: class Like(models.Model): user = models.ForeignKey(User,on_delete=models.CASCADE,related_name = "like") place = models.ForeignKey(Places,on_delete=models.C

我想为我们的项目实现一个类似的系统,我的问题几乎是关于性能的,我想将django与Postgresql DB一起使用,在models.py中,我有一个类似的模型:

class Like(models.Model):
    user    = models.ForeignKey(User,on_delete=models.CASCADE,related_name = "like")
    place   = models.ForeignKey(Places,on_delete=models.CASCADE,related_name = "likedPlace")
当一个用户想看一篇文章时,我应该向他们展示他/她是否喜欢这篇文章,postgresql是否适合这个目的?或者任何其他关系数据库?如果我有50000个用户,每个用户都喜欢10篇文章,在最坏的情况下,每次我应该迭代500000行。
为此,我可以使用像cassendra这样的nosql数据库吗?

我不完全知道django对这个模型做了什么(我不使用任何ORM)。但是如果我理解正确的话,它是在用户和地点之间建立一个关联表,用户在其中表示他们喜欢这个地点。如果是这样,则可以通过单个查询和无迭代来解决此问题。如前所述,我无法为它编写django模型/查询,但我提供了一个SQL来实现它,您应该能够进行翻译。以下内容允许用户表示喜欢或不喜欢,并处理没有表示的情况

select case when exists (select like_dislike
                           from user_likes ul  
                          where ul.user_id  = &user_id_in
                            and ul.place_id = &place_id_in
                        )
            then (select like_dislike
                    from user_likes ul  
                   where ul.user_id  = &user_id_in
                     and ul.place_id = &place_id_in
                 )
            else 'Like/Dislike not set' 
        end "Like/Dislike";
这也可以很容易地转换为返回相同字符串的Postgres SQL函数

create or replace function User_Likes_Fnc( user_id_in  integer
                                         , place_id_in integer
                                         )
  returns text
  language sql
as  $$
select case when exists (select like_dislike
                           from user_likes ul  
                          where ul.user_id = user_id_in
                            and ul.place_id = place_id_in
                        )
            then (select like_dislike
                    from user_likes ul  
                   where ul.user_id = user_id_in
                     and ul.place_id = place_id_in
                 )
            else 'Like/Dislike not set' 
        end "Like/Dislike";
$$;  

希望这能有所帮助,但无论你决定做什么,都不要在绝对不必要的情况下迭代500000行。

谢谢你的回答,我所说的迭代是指数据库行为,如果最后一个喜欢某个地方的用户想看看他是否喜欢某个特定的地方,我将该like对象保存在第50000行,数据库应该迭代所有其他行以找到它?或者我误解了这种行为?您现在知道nosql数据库如何处理这种情况了吗?