Я - одинокий разработчик для телекоммуникационной компании, и я после некоторого совета по дизайну базы данных от любого, у кого есть немного времени, чтобы ответить.
Я вставляю в одну таблицу ~ 2 миллиона строк каждый день, затем эти таблицы ежемесячно архивируются и сжимаются. Каждая месячная таблица содержит ~ 15 000 000 строк. Хотя это увеличивается месяц за месяцем.
Для каждой вставки, которую я делаю выше, я объединяю данные из строк, которые принадлежат друг другу, и создаю другую "коррелированную" таблицу. Эта таблица в настоящее время не архивируется, так как мне нужно убедиться, что я никогда не пропущу обновление коррелированной таблицы. (Надеюсь, это имеет смысл) Хотя в целом эта информация должна оставаться довольно статичной после нескольких дней обработки.
Все вышеперечисленное работает отлично. Однако моя компания сейчас хочет выполнить некоторые статистические данные по этим данным, и эти таблицы становятся слишком большими, чтобы предоставить результаты в то время, которое будет считаться разумным. Даже с соответствующими установленными индексами.
Так что я думаю, после всего вышесказанного мой вопрос довольно прост. Должен ли я написать скрипт, который группирует данные из моей коррелированной таблицы в меньшие таблицы. Или я должен хранить наборы результатов запросов в нечто вроде memcache? Я уже использую кеш mysqls, но из-за ограниченного контроля над тем, как долго хранятся данные, он не работает идеально.
Основные преимущества использования Memcache:
- Никаких блокировок в моей коррелированной таблице после обнуления запроса.
- Большая гибкость обмена собранными данными между внутренним сборщиком
и интерфейсный процессор. (т.е. пользовательские отчеты могут быть написаны в
бэкэнд и результаты этого хранятся в кеше под ключом, который
затем передается всем, кто хочет просмотреть данные этого отчета)
- Избыточность и масштабируемость, если мы начнем делиться этими данными с большим количеством клиентов.
Основные недостатки, которые я вижу при использовании чего-то вроде memcache:
- Данные не являются постоянными, если компьютер перезагружен / кэш очищен.
Основные преимущества использования MySql
- Постоянные данные.
- Меньше изменений кода (хотя добавление
что-то вроде memcache тривиально
в любом случае)
Основные недостатки использования MySql
- Каждый раз, когда я хочу сохранить, нужно определять шаблоны таблиц, предоставляя новый набор сгруппированных данных.
- Необходимо написать программу, которая просматривает коррелированные данные и заполняет эти новые таблицы.
- Потенциально будет расти медленнее, поскольку данные продолжают заполняться.
Извиняюсь за довольно длинный вопрос. В любом случае, это помогло мне записать эти мысли, и любой совет / помощь / опыт по решению такого рода проблем был бы очень важен.
Большое спасибо.
Alan