Я работаю над таблицей лидеров в моем приложении Facebook, которое показывает, сколько раз вы выполняли действие (открывали веб-страницу) за последнюю неделю по сравнению с вашими друзьями.
Мне нужен какой-то способ храненияэти еженедельные данные в реляционной базе данных, и хотелось бы получить несколько советов по проектированию базы данных.
Вариант 1
Иметь таблицу для хранения каждого действия в виде строкис идентификатором пользователя и отметкой времени, а затем подсчитывает запрос для всех действий, связанных с каждым другом, у которого отметка времени> сегодня - 1 неделя.
Это решение легко реализовать, но меня беспокоит масштаб.Если у меня 1000 друзей на Facebook, мне придется 1000 раз выполнить этот суммарный запрос по набору данных, который может содержать миллионы действий.
Вариант 2
Иметь пользователяТаблица содержит столбец для каждого дня недели, содержащий количество действий, выполненных в этот день.Затем я могу суммировать по столбцам дня, чтобы получить сумму за неделю.Затем в начале каждого дня значение дня будет сбрасываться до 0.
Это решение будет хорошо масштабироваться, но я застрял на том, как реализовать логику, которая скажет моему приложению, перезаписывать ли запись для«сегодня» или увеличьте его.
Приветствуются любые предложения по альтернативным конструкциям или идеи относительно этих конструкций.