The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Выбор типа хранилища MySQL: MyISAM или Innodb ?
Если вы создаете БД по обстоятельствам и не уверены как база будет
использоваться, выбирайте Innodb.
Innodb следует использовать:
Когда взаимодействие с базой имеет характер OLTP (http://ru.wikipedia.org/wiki/OLTP)
Когда требуются транзакции.
Когда нужна высокая надежность хранения и быстрое восстановление после сбоя.
Innodb хорошо справляется со смешанной нагрузкой (select/update/delete/insert).

Минусы Innodb: 
могут возникать deadlock, не свойственные MyISAM;
Медленнее выполняются insert операции и работа с блобами; 
Не поддерживается полнотекстовый поиск;
Проблемы с производительностью COUNT(*);
Для  Innodb нет поддержки mysqlhotcopy;




С MyISAM есть одна нехорошая проблема, таблица может на ровном месте отказаться
работать до выполнения REPAIR TABLE.
Случается такое крайне редко, но и этого хватает. Пример: http://blog.lexa.ru/2008/10/05/vash_mysql___to_esche_g.html
Поэтому с для MyISAM рекомендуется организовать периодический запуск mysqlcheck через cron.

Из-за особенности организации блокировки (в MyISAM блокировка на уровне
таблицы, в Innodb - на уровне строк),
MyISAM имеет смысл использовать, когда преобладают операции insert или select,
но крайне мало delete или update.
Когда можно обойтись без транзакций.
Когда выполняются запросы, характерные для OLAP 
(http://ru.wikipedia.org/wiki/OLAP)
Когда таблица используется для хранения  лога (поддержка конкурирующих insert);
Когда много запросов вида Select count(*).
Когда нужно задействовать средства полнотекстового поиска.


Такие альтернативные хранилища, как PBXT, Innodb plugin, XtraDB, Maria, Falcon,
еще находятся на стадии разработки и
имеют экспериментальный характер.
 
24.02.2009 , Автор: Matt Yonkovit , Источник: http://www.bigdbahead.com/?p=130 ht... (доп. ссылка 1)
Ключи: mysql, myisam, innodb
Раздел:    Корень / Программисту и web-разработчику / SQL и базы данных / MySQL специфика / Оптимизация и администрирование MySQL

Обсуждение [ Линейный режим | Показать все | RSS ]
  • 1.1, angra (ok), 00:48, 25/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Вы не поверите, но в доке мускула все это описано намного лучше. Также есть еще ряд других плюсов и минусов у каждого типа, а кроме того ничто, кроме религии, не запрещает свободно в одной базе смешивать таблицы разных типов.
    Кстати такие хранилища как ARCHIVE, MEMORY и BDB вы тоже отнесли к экспериментальным?
    Итого отрывочный пересказ не очень умной статьи.
     
     
  • 2.2, Аноним (-), 03:03, 25/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    BDB уже не существует, его убрали из MySQL 5.1.
    Кстати, киньте ссылку на плюсы и минусы Innodb и MiISAM в документации MySQL. На http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html только очень поверхностные рекомендации по выбору.
     
     
  • 3.3, Щекн Итрч (ok), 06:24, 25/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >BDB уже не существует, его убрали из MySQL 5.1.
    >Кстати, киньте ссылку на плюсы и минусы Innodb и MiISAM в документации
    >MySQL. На http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html только очень поверхностные рекомендации по выбору.

    Кидаю вам МЫСЛ !
    Innodb нужно использовать всегда, просто потому, что это на порядок надежнее, а на все остальное можно забить. Полнотекстового поиска нет только в блобах.

     
     
  • 4.5, Ivan (??), 12:11, 25/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    > Innodb нужно использовать всегда

    Согласен, СУБД без полноценной поддержки внешних ключей и транзакций не имеет права на существование.

     
  • 4.8, имя файла (?), 23:38, 26/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Удачи МЫСЛЫТЕЛЮ:)
    будет у Вас задача по вставке в базу в минуту до нескольких миллионов записей, тогда поговорим.
     
     
  • 5.9, Anonymus (?), 04:23, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Если на каждую запись (строку) отдельная транзакция, то действительно беда... А если одной транзакцией все миллионы записей вставлять, то время вставки InnoDB слабо отличается от MyISAM...
     
     
  • 6.11, WhiteWind (ok), 19:51, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    В реальных приложениях производительность InnoDB заметно ниже.
    Я использую InnoDB только когда действительно есть потребность во внешних ключах и/или транзакциях.
     
     
  • 7.13, Щекн Итрч (ok), 22:38, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    производительность InnoDB заметно ниже - процентов на тридцать на совершенно ненагруженной системе. Под нагрузкой InnoDB может оказаться и пошустрее :)

    Под нагрузкой и мускул упасть может, и ось панику дать. Это норма жизни. Кто думает по другому, пусть расскажет это своё другое не здесь, а в унитаз. Или в бабушкин носок.

    В случае InnoDB вопрос решается одним щелчком кнопки "ресет": это может сделать вочдог, это может сделать любая девка в серверной, это может сделать моя мобила через IP KVM.

    А вот в случае исама вам в 99% придется чинить таблицы...

     
     
  • 8.15, pentarh (ok), 22:50, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Ну ну Пробовали-пробовали На сотне-другой тысяч посетителей таблицу заапали на... текст свёрнут, показать
     
     
  • 9.19, Щекн Итрч (ok), 22:40, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    gt оверквотинг удален Да А вчерне опишете задачу Сотне К статику-то в виде 1... текст свёрнут, показать
     
     
  • 10.20, pentarh (ok), 11:59, 01/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    ЫЫ Умник Кластер у меня стоит на GPFS только на другой задаче А с этой справл... текст свёрнут, показать
     
  • 10.26, User294 (ok), 16:04, 02/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Да ладно вам Кегель еще сто лет назад описал проблему C10K и нынче дофуа серверо... текст свёрнут, показать
     

  • 1.4, Аноним (-), 09:06, 25/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    MyISAM следует использовать, когда больше важна производительность нежели надежность.
    InnoDB поддерживает внешние связи - логика на уровне модели данных, для MyISAM логика на бизнес-уровне.

    *39393 - палиндром)

     
  • 1.6, Аноним (6), 11:28, 26/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    MyISAM проще в обслуживании и восстановлении из бэкапов при сбоях.


     
  • 1.7, Одмин (?), 17:53, 26/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    лучший тип тип хранилища это постгрес :). Я серьёзно. Рекомендую хотя бы попробовать.
     
     
  • 2.10, Аноним (10), 08:27, 27/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    звучит как "первая доза - бесплатно" ;-)
     

  • 1.12, pentarh (ok), 21:56, 27/02/2009 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А я вот своим опытом поделюсь

    http://www.pentarh.com/wp/2009/02/23/innodb-vs-myisam/

     
     
  • 2.16, igorsiapochta.ru (?), 10:53, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Те, кто рассказывают про скорость InnoDB дайте пожалуйста сравнение длясабжа
    c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией load data concurrent infile.
     
     
  • 3.17, angra (ok), 17:06, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Не поверите, но перезапись бинарного файла еще быстрее отработает, причем как для myisam так и для innodb. Вот только какое это имеет отношение к нормальной работе с базой данных?

     
  • 3.18, баламут (?), 22:01, 28/02/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Те, кто рассказывают про скорость InnoDB дайте пожалуйста сравнение длясабжа
    >c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией load data concurrent infile.

    Вот, блин, интересный ты тест задвинул... Ты бы ещё линейное чтение проверял из одной таблицы с одним индексом. Ты реальную базу давай. 100 связанных таблиц с одинаковыми индексами в обоих базах, 100 млн. записей в базе и запрос с пятью уровнями вложения. Поэтому и сравнивают PostgreSQL и MySQL, что в MySQL есть InnoDB. У меня сервак на MySQL развёрнут под InnoDB (80 таблиц, 60 млн. записей) - 3000 запросов в секунду держит.

     
     
  • 4.21, igorsia (?), 13:59, 01/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    У каждого Петрушки - свои игрушки.
    У меня в базу льются логи биллинга для последующей обработки и обращения к ним.
    Никаких вложенностей, никаких внешних ключей. Мне нужна быстрая заливка и быстрая выборка данных по 2-3 ключам из таблицы в 150-200 млн. записей.
     
     
  • 5.22, angra (ok), 01:53, 02/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Зачем для твоей задачи вообще реляционная база данных? Зачем с таким использованием БД о чем то спорить в этой теме?
     
     
  • 6.23, igorsia (?), 09:51, 02/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    РБД мне потому, что система ключ-значение меня не удовлетворяет, кроме того SQL как язык формирования запросов для меня привычен и удобен.
    Там где мне нужно - отношения используются, там где не нужно - нет. Или Вам преподаватели СУБД не говорили, что НФ это не догма а средство? И то, что данные могут быть даже не в 1НФ для Вас открытие?
     
     
  • 7.24, angra (ok), 10:08, 02/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    Еще раз но другими словами. Ни myisam, ни innodb не предназначались для такого использования. Зачем вы их сравниваете на том поле, для которого они не предназначены? Если утрировать, то вы доказываете преимущество бинокля над телескопом для операции забивания гвоздей.
     
  • 3.25, Ape (ok), 15:47, 02/03/2009 [^] [^^] [^^^] [ответить]  
  • +/
    >Те, кто рассказывают про скорость InnoDB дайте пожалуйста сравнение длясабжа
    >c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией
    >load data concurrent infile.
    >У меня в базу льются логи биллинга для последующей обработки и обращения к ним.
    >Никаких вложенностей, никаких внешних ключей. Мне нужна быстрая заливка и быстрая выборка данных по 2-3 ключам из таблицы в 150-200 млн. записей.

    А причём здесь движок базы? Тут вся нагрузка на ОСи. Чистый файловый режим. При таком режиме работы скорее влияет:
    1. Мощность железа. Настройка железа.
    2. Выбор ОС. Настройка ОС.
    3. Выбор ФС. Настройка ФС.
    4. Ну, и настройка MySQL, чтобы учитывались особенности данного режима.

     
     
  • 4.28, anonimous (?), 15:09, 24/03/2014 [^] [^^] [^^^] [ответить]  
  • +/
    >[оверквотинг удален]
    >>c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией
    >>load data concurrent infile.
    >>У меня в базу льются логи биллинга для последующей обработки и обращения к ним.
    >>Никаких вложенностей, никаких внешних ключей. Мне нужна быстрая заливка и быстрая выборка данных по 2-3 ключам из таблицы в 150-200 млн. записей.
    > А причём здесь движок базы? Тут вся нагрузка на ОСи. Чистый файловый
    > режим. При таком режиме работы скорее влияет:
    > 1. Мощность железа. Настройка железа.
    > 2. Выбор ОС. Настройка ОС.
    > 3. Выбор ФС. Настройка ФС.
    > 4. Ну, и настройка MySQL, чтобы учитывались особенности данного режима.

    чистый файловый режим это если бы не было индексов - все упирается в них.
    особенность load concurrent infile в том, что индексы создаются без блокирования таблицы как это обычно происходит в MyIsam при простом INSERT, и в то же время достаточно быстро, в отличие от InnoDB.

     


     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру