Подтвердить что ты не робот

Насколько большой размер для таблицы MySQL?

Наконец-то я убедился, что мои меньшие таблицы в один большой, но насколько большой размер слишком большой для таблицы MySQL?

У меня есть таблица с 18 полями. Некоторые из них TEXT, некоторые короткие VARCHAR(16), другие - VARCHAR(100).

Сейчас мы получаем около 200 000 строк в день, что составило бы 6 миллионов + месяц. Насколько велика большая? Неважно, сколько полей у вас есть или просто строк?

4b9b3361

Ответ 1

Нет большого общего решения вопроса "Насколько велика слишком большая" - такие проблемы часто зависят от того, что вы делаете с вашими данными, и каковы ваши соображения эффективности.

Существуют некоторые фундаментальные ограничения на размеры таблиц. У вас не может быть более 1000 столбцов. Ваши записи не могут быть больше 8k каждый. Эти ограничения изменяются в зависимости от механизма базы данных. (Здесь для InnoDB.)

Похоже, вы объединили несколько разных наборов данных в одну таблицу. Вероятно, у вас есть некоторые поля, которые сообщают вам, какие данные задают для этой записи, а также некоторые поля данных и некоторая информация о временной отметке. Это не очень большая запись (если вы не регистрируете, скажем, все входные параметры каждого запроса.) Основная проблема будет заключаться в селективности. Индексирование этой таблицы значимым образом будет проблемой. Если ваши общие поля могут быть достаточно избирательными, чтобы вы могли использовать их, чтобы добраться до нужных вам записей, не посоветовавшись с таблицей, это будет большим плюсом. (Сканирование таблицы)

Для этого много записей в день (в основном, два раза в день весь день, и я предполагаю, что у вас период пиковой нагрузки, где он намного выше), вы также захотите убедиться, что вы конкретно смотрите на оптимизации на улучшает скорость вставки. Как правило, больше индексов = более медленные вставки. Если можно, рассмотрите возможность архивирования устаревших записей на другую таблицу целиком. На предыдущих рабочих местах мы использовали стратегию архивации за последний месяц, предшествующие три месяца, предшествующие шесть месяцев, каждый в отдельных таблицах. Другая идея - удалить старые записи. Многие среды просто не нуждаются в информации за определенную дату. Висячие записи журналов с трех месяцев назад часто чрезмерно дороги.

Наконец, не пренебрегайте физической памятью вашей таблицы. Чем тоньше ваши записи, тем меньше физических IO должно произойти, чтобы читать (или, если на то пошло, вставить) запись. Вы можете хранить свои индексы на отдельном физическом жестком диске. Если в ваших записях, содержащих сжатые таблицы, много избыточных данных, возможно, будет увеличение скорости. Если у вас есть немного денег для записи, рассмотрите значение хорошего массива RAID для разметки ваших данных.

Итак, чтобы ответить на ваш основной вопрос: это много записей, но, внимательно следя за настройкой, это не будет проблемой.

Ответ 2

Я думаю, это зависит, в основном. Какую версию MySQL вы используете, какую ОС, и используете ли вы таблицы MyISAM или innoDB? Он отличается от 32-битного и 64-битного и зависит от настроек ведения журнала. руководство MySQL говорит:

Эффективный максимальный размер таблицы для Базы данных MySQL обычно определяются ограничениями операционной системы на размер файлов, а не внутренний MySQL Пределы

Более подробно о том, что эти ограничения находятся на этой странице тоже.

Ответ 3

У меня есть таблица с ~ 98M строк и вставки/удаления происходят в течение всего дня. Мы ведем записи в течение 90 дней... Я ожидаю, что в этом месяце эта таблица составит ~ 100M строк. Лично я бы разработал схему базы данных по-разному, но она была приобретена, и нам нужно сохранить ее в целости, чтобы мы не лишали поддержки поставщиков.

Мы используем репликацию mysql (MASTER-MASTER) и выполняем вставки/удаления на одном и выполняем запросы на другом. Это действительно помогло повысить производительность, так как удаление блокирует таблицу и блокирует запросы до того, как мы перейдем к использованию репликации.

Мы не испытываем никаких проблем с производительностью, используя эту реализацию.

Я также выполняю оптимизацию таблицы раз в неделю...

Ответ 4

Выбор количества столбцов, помещенных в одну таблицу, также зависит от типа представленных данных и того, насколько вы заботитесь о нормализации. Некоторые отношения могут быть легко представлены одной таблицей; другие должны выполняться в нескольких меньших таблицах, особенно когда у вас есть сочетание отношений "один к одному", "один ко многим" и "многие ко многим" в вашем наборе данных.

http://en.wikipedia.org/wiki/Database_normalization

Ответ 5

Не ответ на точный вопрос...

Почему вы убедились, что ваши маленькие столы превратились в один большой? То, что вы делаете, называется "Вертикальное разделение" и может быть очень полезным, в зависимости от вашей ситуации. Со многими большими полями TEXT или BLOB вертикальный раздел может сохранять ваши более запрошенные данные физически вместе и быстрее для доступа.

Смотрите: http://en.wikipedia.org/wiki/Partition_(database)

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

Смотрите также: http://dev.mysql.com/tech-resources/articles/performance-partitioning.html

Ответ 6

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

Я был в той же ситуации, где количество данных не позволило мне изменить структуру базы данных. То, что вы должны сделать прямо сейчас, - попросить кого-нибудь создать базу данных на машине (то есть экземпляр EC2) с объемом данных, которые вы ожидаете получить через два года. Просто им нужно создать фиктивные данные в том же табличном формате. Попробуйте работать с этой таблицей и решить, приемлема ли производительность. Если это неприемлемо, вам нужно как можно скорее изменить ситуацию.

Если бы я был вами, я бы рассмотрел тестирование Greenplum или (GridSQL, если у вас нет денег, чтобы потратить). Оба основаны на PostgreSQL и используют много компьютеров для совместной работы.