Как сохранить непрерывную неделю показов в реляционной базе данных? - PullRequest
3 голосов
/ 17 января 2012

Я работаю над таблицей лидеров в моем приложении Facebook, которое показывает, сколько раз вы выполняли действие (открывали веб-страницу) за последнюю неделю по сравнению с вашими друзьями.

Мне нужен какой-то способ храненияэти еженедельные данные в реляционной базе данных, и хотелось бы получить несколько советов по проектированию базы данных.

Вариант 1

Иметь таблицу для хранения каждого действия в виде строкис идентификатором пользователя и отметкой времени, а затем подсчитывает запрос для всех действий, связанных с каждым другом, у которого отметка времени> сегодня - 1 неделя.

Это решение легко реализовать, но меня беспокоит масштаб.Если у меня 1000 друзей на Facebook, мне придется 1000 раз выполнить этот суммарный запрос по набору данных, который может содержать миллионы действий.

Вариант 2

Иметь пользователяТаблица содержит столбец для каждого дня недели, содержащий количество действий, выполненных в этот день.Затем я могу суммировать по столбцам дня, чтобы получить сумму за неделю.Затем в начале каждого дня значение дня будет сбрасываться до 0.

Это решение будет хорошо масштабироваться, но я застрял на том, как реализовать логику, которая скажет моему приложению, перезаписывать ли запись для«сегодня» или увеличьте его.

Приветствуются любые предложения по альтернативным конструкциям или идеи относительно этих конструкций.

Ответы [ 2 ]

0 голосов
/ 17 января 2012

В итоге я выбрал вариант 2 и использовал логический флаг «сегодня - новый день» для каждого дня.Итак, мой стол выглядит так:

id   | monday | monday_new | tuesday | tuesday_new | ... | sunday | sunday_new | lifetime
INT  | INT    | BOOL       | INT     | BOOL        | ... | INT    | BOOL       | INT
0 голосов
/ 17 января 2012

Вариант 2 почти идеален.

Вместо дня слабого используйте день в качестве первичного ключа. Затем каждый раз увеличивайте значение дня.

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