Назад | Перейти на главную страницу

Более 1 миллиарда строк в таблице MyISAM

Исходя из вашего опыта, каков верхний предел строк в таблице MyISAM может эффективно обрабатывать MySQL на сервере с процессором Q9650 (4-ядерный, 3,0 ГБ) и 8 ГБ ОЗУ.

В настоящее время у меня есть таблица с 15 миллионами строк. Это довольно быстро. Если масштаб увеличится до 1 миллиарда строк, нужно ли мне разделить его на 10 таблиц по 100 миллионов строк в каждой?

Я бы не стал беспокоиться о производительности приложения с 1 миллиардом строк на машине, которая может хранить индексы в памяти. Если вы серьезно относитесь к достижению 1 миллиарда строк, вам сначала нужно выполнить некоторую математику:

  • Каков ваш рекордный размер, и умножить его на 1 миллиард?
  • Затем вам нужно вычислить размер индексов (я полагаю, более одного индекса) и добавить его.
  • У вас есть транзакционные требования, для которых вы хотите установить блокировку на уровне строк?
  • Это таблица с тяжелым добавлением или таблица с тяжелым чтением?

Затем перейдите к требованиям к времени безотказной работы вашего приложения.

  • Как вы собираетесь создать резервную копию 1 млрд строк?
  • Как вы собираетесь справиться с поврежденной таблицей размером 1 млрд строк?
  • Как часто вам нужно будет запускать ТАБЛИЦУ ОПТИМИЗАЦИИ?
  • Как вы собираетесь поступить с изменением схемы для таблицы 1B строк? (Добавление индекса в таблицу с 35 миллионами строк на двухъядерном корпусе 2 ГБ с оперативной памятью 2 ГБ недавно заняло у меня 45 минут.)

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

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

Это интересная статья около 1 миллиарда строк в mysql.

Просто чтобы добавить к некоторым из комментариев выше, у меня раньше была таблица с миллиардами строк на quad-xeon, хотя с 32 ГБ ОЗУ, а не только с 8.

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

Таблицы, хранящиеся в SAN, были автоматически скопированы SRDF, и в случае, если что-то пошло не так (диск переполнен и т. Д.), Восстановление заняло около 4 часов.

Зависит от выполняемых вами запросов. Если ты делаешь SELECT * FROM table обычно он выполняется намного быстрее, чем запрос с десятью JOINс.

зависит от вашего оборудования, данных, от того, какой запрос вы выполняете и что считаете быстрым. для простых ("select * from table where foo='bla'"), расчет прост: если в вашем запросе используется индекс и этот индекс помещается в буфер файловой системы вашей ОС, это будет быстро. если он не подходит, запрос выполняется медленнее (насколько медленнее зависит от объема данных, которые mysql должен прочитать, и скорости ваших дисков)

однако я бы использовал ACID-совместимую базу данных, такую ​​как postgres, с такими таблицами, вы не хотите ремонтировать таблицу с миллиардом строк