Каковы максимальные строки для таблицы MySQL

Примечание. Я искал здесь другие похожие вопросы, и ни один из других ответов на вопросы не похож даже отдаленно. С этим... У меня есть вопрос о таблицах MySql (точнее, о конкретных поля из таблицы, т.е. tweets или updates ).

Итак, вопрос... каково максимальное количество строк в таблице InnoDB? То есть, если есть значительная разница между суммами, которые могут хранить MyIsam, InnoDB и другие, если нет, то в целом. Во-вторых, если таблица становится действительно большой, каковы наилучшие методы хранения данных (одна и та же таблица или разделенные/несколько таблиц/баз данных)?

Я читал, что твиттер получает около 100 миллионов твитов в день. В том же контексте, как мой второй вопрос применим к чему-то вроде твиттера?


person avon_verma    schedule 29.01.2011    source источник


Ответы (3)


http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html позволит вам рассчитать ограничения исходя из размера вашего ключа.

Но я скромно предлагаю вам не хранить такую ​​информацию, как твиты, в механизме транзакций с ссылочной целостностью и другими функциями InnoDB, и вы определенно не храните их все в одной таблице в одном экземпляр БД. Вы помещаете их во множество независимых баз данных, отличных от SQL, которые позволяют быстро добавлять, а затем извлекать метаинформацию (например, хэштеги, RT и т. д.) в более сложную базу данных. Презентации по архитектуре БД Twitter легко найти в Google (например, http://www.slideshare.net/nkallen/q-con-3770885).

Если вам нужно хранить большие объемы данных в одной таблице, вам поможет секционирование, и, возможно, Postgres лучше его поддерживает. Секционированная таблица — это физически несколько таблиц, которые логически выглядят как одна таблица. Вы помещаете эти подтаблицы (разделы) на разные диски, независимо запускаете их техническое обслуживание и т. д. Кроме того, «звездная схема» с одной очень длинной таблицей, содержащей только основные столбцы, и несколькими таблицами, в которых хранятся более крупные, но необязательные столбцы, может помощь.

person 9000    schedule 29.01.2011
comment
На данный момент (конец 2015 г.) MySQL, по-видимому, лучше поддерживает разделение, чем Postgres, и что-то вроде RethinkDB следует рассматривать как решение nosql. - person 9000; 15.12.2015

Ограничения на количество строк нет, но существует ограничение размера в базе данных InnoDB:

Минимальный размер табличного пространства составляет 10 МБ. Максимальный размер табличного пространства составляет четыре миллиарда страниц базы данных (64 ТБ). Это также максимальный размер таблицы.

Вы всегда можете разбить таблицы по горизонтали, сохранив строки в несколько разделов одной и той же таблицы в нескольких файлах.

person atp    schedule 29.01.2011
comment
Горизонтальное разбиение называется шардингом? @пепел - person edam; 26.05.2015
comment
Нет, горизонтальное секционирование — это секционирование в одной таблице на одном сервере. Это шардинг, если он распределен между несколькими экземплярами MySQL на нескольких серверах. - person Rick James; 06.09.2017

Ограничение в 64 ТБ для таблицы имеет следующие исключения:

  • Это предполагает innodb_page_size = 16K (по умолчанию). Это может быть установлено в степень 2 между 4K и 64K, пропорционально изменяя предел табличного пространства.
  • Таблица PARTITIONed, по сути, представляет собой набор «подтаблиц», организованных вместе и действующих как одна большая таблица. Ограничение на количество разделов до 5.6.7 составляло 1024. После этого было 8192. Так что умножьте 64 ТБ на это.

Хорошо, это дает вам только ограничение в байтах. Кроме того, он включает накладные расходы и индексы. Затем вам нужно разделить на размер средней записи, чтобы получить максимальное количество строк.

(Нелегко вычислить средний размер записи.)

Простой ответ:

Вероятно, вы можете легко получить 1 триллион «маленьких» записей в таблице InnoDB. Приложив некоторые усилия, вы можете дойти до 1000 трлн. Но я подозреваю, что ваш бюджет на дисковые накопители будет исчерпан до этого. Кроме того, потребуются годы, чтобы сделать все INSERTs, чтобы заполнить его!

Итак, реалистичный ответ: MySQL может обрабатывать «неограниченное» количество строк.

Реальная жизнь? Я слышал о нескольких таблицах с более чем миллиардом строк, даже целых 15 миллиардов.

См. мои Ограничения, но больше ничего не говорится о вопрос о рядах.

person Rick James    schedule 05.09.2017
comment
На моей последней работе в одной таблице было более 5 миллиардов строк, и она все еще быстро росла. Это был DW, записывающий каждый телефонный звонок, сделанный нашей службой с 2007 года. Мы использовали разбиение по ДИАПАЗОНУ по дням для последних данных и по месяцам для более старых данных. - person Bill Karwin; 06.09.2017