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 / Лицензия: CC-BY
Раздел:    Корень / Программисту и 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 Кстати, киньте ссылку на плюсы ... весь текст скрыт [показать]
     
     
  • 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 [^] [ответить]    [к модератору]  
  • +/
    >производительность InnoDB заметно ниже - процентов на тридцать на совершенно ненагруженной системе.
    >Под нагрузкой InnoDB может оказаться и пошустрее :)

    Ну ну. Пробовали-пробовали. На сотне-другой тысяч посетителей таблицу заапали на InnoDB. Сервер особо не пукал, просто процентов 60 записей (а это десятки тысяч), которые должны были вставиться пока таблица была на InnoDB, они просто исчезли. Даже в логах пхп рукой не помахали. Их просто как будто не стало.

    Смотрю full processlist - коннекты висят в слипе как будто pconnect юзается (на самом деле ничего такого).

    Делаю Alter table foobar engine=MyISAM - бац и все пучком. Все записывается, все идет.

     
     
  • 9.19, Щекн Итрч (ok), 22:40, 28/02/2009 [^] [ответить]    [к модератору]  
  • +/
    >[оверквотинг удален]
    >особо не пукал, просто процентов 60 записей (а это десятки тысяч),
    >которые должны были вставиться пока таблица была на InnoDB, они просто
    >исчезли. Даже в логах пхп рукой не помахали. Их просто как
    >будто не стало.
    >
    >Смотрю full processlist - коннекты висят в слипе как будто pconnect юзается
    >(на самом деле ничего такого).
    >
    >Делаю Alter table foobar engine=MyISAM - бац и все пучком. Все записывается,
    >все идет.

    Да? А вчерне опишете задачу? Сотне К статику-то в виде 100 байтных гифов БЕЗ кластера сдать нельзя. Локальные запросы к базе? Почему база не расколочена по кластеру? В общем, вы - свистите?  А мама в детстве вас не научила, что свистеть - западло?

     
     
  • 10.20, pentarh (ok), 11:59, 01/03/2009 [^] [ответить]    [к модератору]  
  • +/
    >Да? А вчерне опишете задачу? Сотне К статику-то в виде 100 байтных
    >гифов БЕЗ кластера сдать нельзя. Локальные запросы к базе? Почему база
    >не расколочена по кластеру? В общем, вы - свистите?  А
    >мама в детстве вас не научила, что свистеть - западло?

    ЫЫ. Умник. Кластер у меня стоит на GPFS только на другой задаче.

    А с этой справляется один мускуль сервер на MyISAM. Миллионы инсертов в сутки + дикая обработка данных. InnoDB свистит по полной. Надо просто базу рисовать под MyISAM специфику.

     
  • 10.26, User294 (ok), 16:04, 02/03/2009 [^] [ответить]    [к модератору]  
  • +/
    >Да? А вчерне опишете задачу? Сотне К статику-то в виде 100 байтных
    >гифов БЕЗ кластера сдать нельзя.

    Да ладно вам?Кегель еще сто лет назад описал проблему C10K и нынче дофуа серверов которые спокойно к ней относятся.Например лайт, нжинкс, ... :).Сколько посетителей должно быть при 10 000 одновременных конектах, гигабите и 100-байтных гифах - сами посчитаете.Хотя да, таким как вы проще вбахать кластер - за чужой счет еще и не такое можно.

     
  • 1.4, Аноним (-), 09:06, 25/02/2009 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    MyISAM следует использовать, когда больше важна производительность нежели надежн... весь текст скрыт [показать]
     
  • 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:      
    Заголовок:
    Текст:



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