2013-04-02 6 views
5

В настоящее время я работаю над проектом, который вычисляет данные и сохраняет их по идентификатору в базе данных аналитики.Сохранение статистики в течение более длительных периодов времени и времени

Например, количество раз, когда читается новостная статья (и поэтому есть 20 категорий данных, хранящихся как целое число).

Мы храним данные в полях, как следует: INT user_id INT value_type_id INT значение DateTime DateTime

Мы используем 4 таблицы, x_hour, x_day, x_week, x_month Таким образом, мы не должны вычислить данные в течение нескольких тысяч или даже миллионов записей.

Данные должны рассчитываться «на лету» и фильтроваться определенными соединениями. Все это не проблема и работает по назначению и со скоростью, которая является удовлетворительной.

Вопрос, который следует. Мы хотим, чтобы данные отображались в часовом поясе пользователя, который его просматривает, часовой пояс не всегда один и тот же, поскольку он может быть антиированием, например UTC-5 или UTC + 4.

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

Я читал решения, добавляя 24 столбца для хранения данных для каждого часового пояса, у любого есть другое решение.

+0

Я не уверен, если я получу вашу мысль. Вы говорите, что хотите сообщать о событиях в зависимости от времени, которое они происходят локально? – Mehran

+0

Нет, я храню их по дневному часу недели и месяца, поэтому нам нужно 40 столбцов для часовых поясов, так как все данные за неделю 20 могут отличаться в часовом поясе +12, как в +0. Но это было сделано. много лет назад;) –

ответ

1

Кажется, что единственный способ пойти - использовать ведра в 15 минут или точно определенные временные интервалы, из-за чего получится только около 40 столбцов.

Тогда у нас есть то же самое в течение нескольких недель и месяцев, поэтому у нас есть правильные данные для каждого часового пояса.

Немного больше времени и занимает больше места для хранения данных, но если мы будем хранить наши данные в чистоте, это может быть достаточно приемлемым решением.

+1

Вы не нашли другого продукта? – Aurel

+0

Нет другого достойного решения, лучше всего было бы заставить ваш mysql и все, что работает на SSD, сделать все быстро;). Но никаких других разрешений в коде нет. –

+0

Thx, Можете ли вы показать пример дизайна для этой таблицы, о которой вы говорили (15мин ведро + часовые пояса)? – Aurel

3

Продолжить хранение данных в UTC.

Передайте запрос по часовому поясу пользователя.

Преобразовать в SELECT, используя функцию CONVERT_TZ:

CONVERT_TZ(`datetimefield`, 'UTC', 'Europe/Amsterdam') 

Где Европа/Амстердам »заменяется на соответствующий часовой пояс.

Вам лучше использовать строки часовых поясов IANA, как указано выше, вместо смещений типа UTC-5, если у вас есть эти данные. Он правильно справится с проблемами, связанными с летней экономией в регионах, где это происходит.

Дальнейшие примечания: https://dev.mysql.com/doc/refman/5.5/en/mysql-tzinfo-to-sql.html - Эта программа используется для интуиции MySQL с данными о часовом поясе.

+1

Не совсем то, что мне нужно прочитать ниже (из символов) Что мне нужно знать, если есть правильный способ хранения данных на больших интервалах. Например, ежедневное хранилище будет содержать дату: 2013-03-29 00:00:00, это будет UTC. Но у него будут неправильные данные для кого-то в часовом поясе, отличном от UTC. Пример: я нахожусь в GMT + 1, если я опубликую что-то в 00:30 по местному времени, система будет генерировать данные, сообщающие зрителям, которые я опубликовал, накануне. Так как он хранится днем. Проблема в том, что если я буду продолжать использовать часы, система будет слишком медленной для данных в течение периодов месяца или дольше. –

+0

Я вижу, я бы предложил добавить столбцы 'to' и' from' datetime, которые представляют начало и конец каждого почасового интервала и таким образом сохраняют 24 строки по UTC для каждого дня и таких данных. Затем выбор будет способен получить правильный конвертированный набор из 24 строк для данного дня пользователя. – bcmcfc

+0

@bcmcfc - Это решение работает только в том случае, если все ваши целевые часовые пояса имеют полные смещения часа. У некоторых есть 30-минутные смещения, и есть даже пара, которая смещена на 45 минут. Поэтому, если вы хотите весь мир, вам нужны 15-минутные ведра. –