Задать вопрос

Можно ли в mysql хранить 200 колонок, для 10+млн записей?

Вопрос в том как это повлияет на скорость и много ли потребуется памяти для запроса.
Имеются метрики A, B, C их около 200 штук, с числовыми значениями, их нужно хранить хранить в ненормальной форме в виде колонок или в массиве: [ {a: 1, b: 7, c: 9} ] или [1, 7, 9, ...] с последующим подсчетом суммы каждой метрики в запросе. Например, есть строки вида
ключевое слово 1 | site 1 | [5, 7, 9, ...]
ключевое слово 1 | site 2 | [1, 3, 2, ...]
нужно сгруппировать ключевое слово, и подсчитать количество метрик, должно быть так
ключевое слово 1 | [6, 10, 11, ...]
  • Вопрос задан
  • 2637 просмотров
Подписаться 6 Простой 9 комментариев
Решения вопроса 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Смотрим здесь. Получаем для обычного INT 4 байта на одно число, для BIGINT 8 байт.
200 * 4 * 10'000'000 = 8'000'000'000 или 8Gb.
200 * 8 * 10'000'000 = 16'000'000'000 или 16Gb.
По нынешним меркам сущие пустяки.
Хранить, конечно же, нужно в нормальной форме, иначе суммирование придётся делать в приложении.
Ответ написан
2ord
@2ord
Колоночные СУБД как раз для таких целей и есть.
Попробуй хранить в MariaDB ColumnStore в 200 колонок.
Ответ написан
Комментировать
@rPman
Да, для хранения, добавления и чтения данных с анализом этот подход очень хорош, ценой незначительного для твоих объемов (кратного, Rsa97 все расписал) ты получишь огромный прирост производительности. Настоятельно рекомендую протестировать на тестовом стенде на своих данных, особенность хранения null записей в innodb и работа индесов с ними. Что лучше в твоем случае парный индекс в денормализованной форме или 200 индексов в нормальной можно будет определить только тестами (большая таблица может потребовать больше оперативной памяти на индексы).

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

Войдите, чтобы написать ответ

Похожие вопросы