сортировка / извлечение записей по дате из большой базы данных MySQL - PullRequest
0 голосов
/ 13 июня 2009

У меня есть отдельная таблица для каждодневных данных, которые в основном относятся к типу веб-статистики: ключевые слова, посещения, продолжительность, IP-адрес, продажи и т. Д. (Возможно, всего 100 байт на запись) В каждой таблице будет около пары миллионов записей.

Что мне нужно сделать, так это создать веб-администратора, чтобы пользователь / администратор мог просматривать отчеты за разные периоды дат И сортировать их по определенным рассчитанным значениям. Например, пользователь может захотеть, чтобы результаты с 15-го числа прошлого месяца по 12-е числа этого месяца были отсортированы по SALE / VISIT в порядке убывания.

Администратор / пользователь должен просматривать (скажем) только 200 верхних записей одновременно и, вероятно, не будет просматривать более нескольких сотен записей за один сеанс

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

Мой вопрос: возможно ли иметь отчеты в режиме реального времени или они будут слишком медленными (таблицы не редко - если вообще когда-либо - обновляются после вставки данных дня)

Такой сценарий лучше подходит для индексов или табличных сканирований?

А также, будет ли лучше массивная таблица для всех дат, чем отдельные таблицы для каждой даты (объединений почти нет)

спасибо заранее!

Ответы [ 2 ]

1 голос
/ 13 июня 2009

С отдельной таблицей для данных за каждый день при суммировании за месяц потребуется провести один и тот же анализ для каждой из 30 с лишним таблиц. В течение года вам придется провести анализ на 365 или около того таблицах. Это будет кошмар.

Почти наверняка было бы лучше иметь единственную таблицу со здоровым индексированием, чем огромное количество таблиц. Некоторые СУБД поддерживают фрагментированные таблицы - если MySQL поддерживает, фрагментируйте одну большую таблицу по дате. Я был бы склонен к фрагментации по месяцам, особенно если обычные запросы относятся к одному месяцу или меньше и не пересекают границы месяца. (Даже если на это потребуется два месяца с надлежащим устранением фрагментов, обработчику запросов не придется считывать большую часть данных; только два фрагмента за два месяца. Возможно, он сможет выполнять такое сканирование параллельно, даже - снова в зависимости от СУБД.)

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

0 голосов
/ 13 июня 2009

Возможно, вы захотите попробовать другой подход. Я думаю, что Splunk будет работать для вас. Это было разработано для этого, они даже делают рекламу на этом сайте. У них есть бесплатная версия, которую вы можете попробовать.

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