Итак, я пытаюсь создать социальную сеть на Django. Как и в любой другой социальной сети, у пользователей есть возможность лайкнуть пост, и каждый из этих лайков хранится в модели, которая отличается от модели, используемой для постов, отображаемых в ленте новостей. Теперь я попробовал два варианта, чтобы получить подобный статус на ходу.
1. Наименьшее количество попаданий в базу данных:
Сделайте один sql-запрос и получите похожую запись для каждого идентификатора сообщения, если они существуют. Теперь я использую собственный тег шаблона django, чтобы увидеть, существует ли похожая запись для текущего сообщения в Queryset путем поиска в массиве, который содержит похожие статусы всех сообщений . Таким образом, я использую базу данных для получения всех значений и поиска определенного значения из списка с помощью python.
2. Отдельный запрос к базе данных для каждого запроса:
Здесь я использую тот же настраиваемый тег шаблона, но для поиска в Queryset я использую базу данных mysql для большей части тяжелой работы. Я использую model.objects.get() для каждой записи.
Что является более эффективным алгоритмом. Также я планировал получить еще один сервер базы данных, может ли это изменить выбор, если сетевая задержка составляет всего около 0,1 мс.
В любом случае, я могу получить такие статусы на ходу в виде логических значений вместе со всеми сообщениями в одном запросе к базе данных.
Пример запроса для первого метода может быть таким:
Пусть post_list будет сообщением QuerySet
models.likes.objects.filter(user=current_user,post__in = post_list)
benchmarking
. Нет простого ответа, все будет зависеть от ваших моделей, структуры базы данных, конфигурации сервера и даже используемого оборудования. В некоторых случаях python будет быстрее, в других лучше фильтровать на уровне базы данных. - person GwynBleidD   schedule 30.08.2015"Make one sql query and get like entry every post id if they exist."
Я действительно не уверен, что вы пытаетесь сказать здесь. - person Konstantin Schubert   schedule 30.08.2015