обычный случай.У меня есть простое приложение, которое позволит людям загружать фотографии и следить за другими людьми.В результате у каждого пользователя будет что-то вроде «стены» или «ленты новостей», где он или она увидит последние фотографии, загруженные его друзьями (людьми, за которыми он или она следит).
Большинство функций легко реализовать.Однако, когда дело доходит до этой ленты активности истории, вещи могут легко превратиться в беспорядок из-за просто соображений производительности.
Здесь я столкнулся со следующей дилеммой: я могу легко спроектировать фид активности как нормализованную часть базы данных, что избавит меня от циклов записи, но значительно увеличит сложность при выборе этих результатов для каждого пользователя.(для каждой фотографии, загруженной в течение определенного периода времени, выберите определенное число, чьи загрузчики я отслеживаю / для каждого человека, которого я отслеживаю, выберите его фотографии)
Оптимизацией может быть введение серии пороговых значенийограничения, которые, например, позволят мне упорядочить людей, за которыми я следую, на основе даты их последней загрузки, даже исключая некоторые, чтобы сохранить циклы, и для каждого пользователя выберите только 5 (например) последних загруженных фотографий.
Второй подход заключается во введении полностью денормализованной схемы для ленты активности, в которой каждая строка представляет уведомление для одного из моих подписчиков.Это означает, что каждый раз, когда я загружаю фотографию, БД будет помещать n строк в это «поле ввода», n означает количество людей, за которыми я следую, то есть много циклов записи.Если бы у меня была такая таблица, я мог бы легко применить некоторые методы оптимизации, такие как умное индексирование, а также удаление записей старше определенного периода времени (очереди).
Тем не менее, третий подходна ум это даже менее денормализованная схема, в которой приложение на стороне сервера отнимает некоторую часть сложности у БД.Я видел, что некоторые социальные приложения, такие как Friendfeed, сильно зависят от хранения сериализованных объектов, таких как объекты JSON, в БД.
Я определенно все еще осваиваю навык проектирования масштабируемой БД, поэтому я уверен, что есть много вещей, которые я пропустил или еще предстоит изучить.Я был бы очень признателен, если бы кто-нибудь дал мне хотя бы свет в правильном направлении.