Каковы максимальные строки для таблицы MySQL
Примечание. Я искал другие подобные Qs здесь, и ни один из других ответов на вопросы даже не был удален. С этим...
У меня вопрос о таблицах MySql (точнее, в конкретных полях из таблицы, т.е. tweets
или updates
).
Итак, вопрос... каково максимальное количество строк в таблице InnoDB? То есть, если между суммами MyIsam, InnoDB и другими может существовать значительная разница, если этого не происходит, то в целом.
Во-вторых, если таблица становится очень большой, каковы наилучшие методы хранения данных (одна и та же таблица или split/multiple tables/dbs)?
Я читал, что твиттер получает около 100 миллионов твитов в день. В том же контексте, как мой второй вопрос применим к чему-то вроде twitter?
Ответы
Ответ 1
http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html позволит вам рассчитать ограничения по размеру вашего ключа.
Но я смиренно предлагаю вам не хранить данные, подобные твитам в транзакционном движке с ссылочной целостностью и другими функциями InnoDB, и вы определенно не храните их в одной таблице в одном экземпляре базы данных. Вы размещаете их во множестве независимых баз данных, отличных от SQL, которые позволяют быстро добавлять, а затем извлекать метаинформацию (например, хэштеги, RT и т.д.) В более сложную базу данных. Презентации по архитектуре БД DB легко доступны (например, http://www.slideshare.net/nkallen/q-con-3770885).
Если вы должны хранить большие объемы данных в одной таблице, разделение - ваш друг, и, возможно, Postgres лучше поддерживают его. Секционированная таблица представляет собой физически несколько таблиц, которые логически выглядят как одна таблица. Вы помещаете эти подтаблицы (разделы) на разные диски, независимо запускаете на них обслуживание и т.д. Кроме того, "звездная схема" с одной очень длинной таблицей, которая содержит только существенные столбцы и количество таблиц, в которых хранятся большие, но необязательные столбцы, может помощь.
Ответ 2
В базе данных InnoDB нет ограничения по строкам, но ограничение размера:
Минимальный размер табличного пространства - 10 МБ. Максимальный размер табличного пространства - четыре миллиард страниц базы данных (64 ТБ). Это также максимальный размер для таблицы.
Вы всегда можете горизонтально разделять свои таблицы, сохраняя строки в нескольких разделах одной и той же таблицы в нескольких файлах.
Ответ 3
Предел 64TB для таблицы имеет следующие исключения:
- Это предполагает
innodb_page_size = 16K
(по умолчанию). Это может быть установлено в степени 2 от 4K до 64K, изменяя ограничение табличного пространства пропорционально.
- Таблица A
PARTITIONed
- это, по сути, совокупность "подтабликов", организованная вместе и действующая как одна большая таблица. Предел pre-5.6.7 для количества разделов был 1024. После этого было 8192. Таким образом, умножьте на 64TB.
ОК, это дает только ограничение байта. Кроме того, он включает в себя накладные расходы и индексы. Затем вам нужно разделить на то, насколько велика средняя запись, чтобы получить максимальное количество строк.
(Нелегко вычислить средний размер записи.)
Простой ответ:
Вероятно, вы можете легко получить 1 трлн "маленьких" записей в таблице InnoDB. С некоторыми усилиями вы можете получить до 1000 триллионов. Но я подозреваю, что бюджет для дисков будет исчерпан до этого. Кроме того, для заполнения всех INSERTs
потребовались годы!
Итак, реалистичный ответ: MySQL может обрабатывать "неограниченное" количество строк.
Реальная жизнь? Я слышал о нескольких таблицах с более чем миллиардами строк, даже до 15 миллиардов.
Смотрите мой Limits, но он больше не говорит о вопросе о строках.