#node.js #postgresql #database-design #redis
Вопрос:
У меня есть последние версии postgres и redis, которые используются из серверного приложения nodejs. Приложение выполняет тысячи запросов PG для извлечения строк из таблицы элементов, каждый элемент имеет внешний ключ, указывающий на идентификатор строки пользователя в таблице пользователей. При возврате набора данных мне нужно получить фактическое имя пользователя, которому принадлежит строка элемента, для каждой строки. Каждый набор строк имеет количество от 50 до 250 иш, и возможно, что многие из них принадлежат одному и тому же лицу (и, следовательно, одному и тому же имени пользователя).
Мне интересно, какой «правильный» способ справиться с этим. Вариант первый: я выполняю объединение в своем PG-запросе или делаю другой PG-запрос для получения каждого имени пользователя. Вариант второй: я сохраняю пользователей и их идентификаторы в redis и извлекаю их, как только PG вернет набор элементов.
Я склоняюсь к последнему, но если это то, что я в конечном итоге делаю, то, вероятно, существует более одной части данных, которые я хотел бы связать с каждым пользователем, и некоторые из них должны истечь через некоторое время. Так что, в конце концов, я мог бы выполнить полдюжины повторных запросов.set() на пользователя и столько же при извлечении этих данных, это все еще более эффективно, чем использование соединения в моем запросе PG?
Если что-то нуждается в доработке, пожалуйста, дайте мне знать, заранее спасибо !
Комментарии:
1. Я думаю, что ответ зависит от количества пользователей, которые у вас есть в вашей базе данных. Если он небольшой, вы можете использовать redis для обслуживания всех ваших пользователей и сохранения их в базе данных при их изменении. Если у вас почти одинаковое количество пользователей с вашими строками, будет лучше использовать первый подход.
2. @KemalKaplan таблица элементов составляет 5 миллиардов строк, а таблица пользователей-1000~ строк. Важно, чтобы запросы, относящиеся к элементам, выполнялись как можно быстрее, потому что они на сегодняшний день являются наиболее частыми и включают в себя самые большие наборы данных.