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