внедряя подобную систему в django и postgres - PullRequest
0 голосов
/ 18 марта 2020

Я хочу реализовать подобную систему для нашего проекта, мой вопрос почти о производительности, я хочу использовать django с Postgresql БД, в models.py у меня есть модель Like:

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 строк в худшем случае. Могу ли я использовать для этой цели не sql базу данных, как cassendra?

1 Ответ

0 голосов
/ 19 марта 2020

Я не полностью знаю, что 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 строк, когда это абсолютно не нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...