Я - одинокий разработчик для телекоммуникационной компании, и после некоторых советов по проектированию базы данных у кого-нибудь, у кого есть немного времени, чтобы ответить.Необходима консультация по проектированию базы данных
Я вставляю в таблицу ~ 2 миллиона строк каждый день, эти таблицы затем архивируются и сжимаются ежемесячно. Каждая ежемесячная таблица содержит ~ 15 000 000 строк. Хотя это увеличивается с каждым месяцем.
Для каждой вставки, которую я делаю выше, я совмещаю данные из строк, которые принадлежат друг другу, и создает другую «коррелированную» таблицу. В настоящее время эта таблица не архивируется, так как мне нужно убедиться, что я никогда не пропускаю обновление в коррелированной таблице. (Надеюсь, что имеет смысл) Хотя в целом эта информация должна оставаться довольно статической после нескольких дней обработки.
Все вышеперечисленное отлично работает. Однако моя компания сейчас хочет выполнить некоторые статистические данные против этих данных, и эти таблицы становятся слишком большими, чтобы обеспечить результаты в том, что будет считаться разумным временем. Даже при наличии соответствующих индексов.
Итак, я думаю, что после всего вышеизложенного мой вопрос довольно прост. Должен ли я писать сценарий, который группирует данные из моей коррелированной таблицы в меньшие таблицы. Или я должен хранить набор результатов запросов в чем-то вроде memcache? Я уже использую кеш mysqls, но из-за ограниченного контроля над тем, как долго хранятся данные, он не работает идеально.
Основные преимущества я могу видеть использовать что-то вроде кэша памяти:
- Нет блокировки на моем коррелировала таблице после того, как запрос был обналичить.
- Большая гибкость обмена собранными данными между внутренним коллектором и процессором переднего конца. (т. е. пользовательские отчеты могут быть записаны в бэкэнд и результаты их хранения в кеше под ключом, который затем будет передан всем, кто захочет просмотреть данные этого отчета)
- Резервирование и масштабируемость, если мы начнем разделяя эти данные с большим количеством клиентов.
Основные недостатки я вижу использовать что-то вроде кэша памяти:
- данных не сохраняется, если машина перезагружается/кэш очищается.
Основные преимущества использования MySql
- Стойкие данные.
- Меньше изменения кода (хотя добавление что-то вроде кэша памяти тривиальна в любом случае)
Основные недостатки использования MySql
- должны определить шаблоны таблицу каждый раз, когда я хочу, чтобы хранить обеспечить новый набор сгруппированных данных.
- Необходимо написать программу, которая перебирает коррелированные данные и заполняет эти новые таблицы.
- Потенциально по-прежнему будет расти медленнее по мере того, как данные продолжают заполняться.
Извинения за довольно длинный вопрос. В любом случае, это помогло мне записать эти мысли, и любой совет/помощь/опыт работы с такими проблемами будет очень признателен.
Большое спасибо.
Алан
Добро пожаловать в StackOverflow. Длинные вопросы обычно хороши, поскольку они, как правило, показывают несколько важных вещей: 1) вы действительно заботитесь о том, чтобы получить хороший ответ вместо «дать мне код» 2), как правило, они имеют все (или, по крайней мере, большинство) информации необходимо точно ответить на вопрос, после того, как весь мусор в == мусор. – UnkwnTech