Если вы создаете БД по обстоятельствам и не уверены как база будет использоваться, выбирайте 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 имеет смысл использовать, когда преобладают операции insert или select, но крайне мало delete или update.
Когда можно обойтись без транзакций.
Когда выполняются запросы, характерные для OLAP
(http://ru.wikipedia.org/wiki/OLAP)
Когда таблица используется для хранения лога;
Когда много запросов вида Select count(*).
Когда нужно задействовать средства полнотекстового поиска.
Такие альтернативные хранилища, как PBXT, Innodb plugin, XtraDB, Maria, Falcon, еще находятся на стадии разработки и
имеют экспериментальный характер.URL: http://www.bigdbahead.com/?p=130 http://www.mysqlperformanceblog.com/2009/01/12/should-you-mo.../
Обсуждается: http://www.opennet.me/tips/info/1958.shtml
Вы не поверите, но в доке мускула все это описано намного лучше. Также есть еще ряд других плюсов и минусов у каждого типа, а кроме того ничто, кроме религии, не запрещает свободно в одной базе смешивать таблицы разных типов.
Кстати такие хранилища как ARCHIVE, MEMORY и BDB вы тоже отнесли к экспериментальным?
Итого отрывочный пересказ не очень умной статьи.
BDB уже не существует, его убрали из MySQL 5.1.
Кстати, киньте ссылку на плюсы и минусы Innodb и MiISAM в документации MySQL. На http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html только очень поверхностные рекомендации по выбору.
>BDB уже не существует, его убрали из MySQL 5.1.
>Кстати, киньте ссылку на плюсы и минусы Innodb и MiISAM в документации
>MySQL. На http://dev.mysql.com/doc/refman/5.1/en/storage-engines.html только очень поверхностные рекомендации по выбору.Кидаю вам МЫСЛ !
Innodb нужно использовать всегда, просто потому, что это на порядок надежнее, а на все остальное можно забить. Полнотекстового поиска нет только в блобах.
> Innodb нужно использовать всегдаСогласен, СУБД без полноценной поддержки внешних ключей и транзакций не имеет права на существование.
Удачи МЫСЛЫТЕЛЮ:)
будет у Вас задача по вставке в базу в минуту до нескольких миллионов записей, тогда поговорим.
Если на каждую запись (строку) отдельная транзакция, то действительно беда... А если одной транзакцией все миллионы записей вставлять, то время вставки InnoDB слабо отличается от MyISAM...
В реальных приложениях производительность InnoDB заметно ниже.
Я использую InnoDB только когда действительно есть потребность во внешних ключах и/или транзакциях.
производительность InnoDB заметно ниже - процентов на тридцать на совершенно ненагруженной системе. Под нагрузкой InnoDB может оказаться и пошустрее :)Под нагрузкой и мускул упасть может, и ось панику дать. Это норма жизни. Кто думает по другому, пусть расскажет это своё другое не здесь, а в унитаз. Или в бабушкин носок.
В случае InnoDB вопрос решается одним щелчком кнопки "ресет": это может сделать вочдог, это может сделать любая девка в серверной, это может сделать моя мобила через IP KVM.
А вот в случае исама вам в 99% придется чинить таблицы...
>производительность InnoDB заметно ниже - процентов на тридцать на совершенно ненагруженной системе.
>Под нагрузкой InnoDB может оказаться и пошустрее :)Ну ну. Пробовали-пробовали. На сотне-другой тысяч посетителей таблицу заапали на InnoDB. Сервер особо не пукал, просто процентов 60 записей (а это десятки тысяч), которые должны были вставиться пока таблица была на InnoDB, они просто исчезли. Даже в логах пхп рукой не помахали. Их просто как будто не стало.
Смотрю full processlist - коннекты висят в слипе как будто pconnect юзается (на самом деле ничего такого).
Делаю Alter table foobar engine=MyISAM - бац и все пучком. Все записывается, все идет.
>[оверквотинг удален]
>особо не пукал, просто процентов 60 записей (а это десятки тысяч),
>которые должны были вставиться пока таблица была на InnoDB, они просто
>исчезли. Даже в логах пхп рукой не помахали. Их просто как
>будто не стало.
>
>Смотрю full processlist - коннекты висят в слипе как будто pconnect юзается
>(на самом деле ничего такого).
>
>Делаю Alter table foobar engine=MyISAM - бац и все пучком. Все записывается,
>все идет.Да? А вчерне опишете задачу? Сотне К статику-то в виде 100 байтных гифов БЕЗ кластера сдать нельзя. Локальные запросы к базе? Почему база не расколочена по кластеру? В общем, вы - свистите? А мама в детстве вас не научила, что свистеть - западло?
>Да? А вчерне опишете задачу? Сотне К статику-то в виде 100 байтных
>гифов БЕЗ кластера сдать нельзя. Локальные запросы к базе? Почему база
>не расколочена по кластеру? В общем, вы - свистите? А
>мама в детстве вас не научила, что свистеть - западло?ЫЫ. Умник. Кластер у меня стоит на GPFS только на другой задаче.
А с этой справляется один мускуль сервер на MyISAM. Миллионы инсертов в сутки + дикая обработка данных. InnoDB свистит по полной. Надо просто базу рисовать под MyISAM специфику.
>Да? А вчерне опишете задачу? Сотне К статику-то в виде 100 байтных
>гифов БЕЗ кластера сдать нельзя.Да ладно вам?Кегель еще сто лет назад описал проблему C10K и нынче дофуа серверов которые спокойно к ней относятся.Например лайт, нжинкс, ... :).Сколько посетителей должно быть при 10 000 одновременных конектах, гигабите и 100-байтных гифах - сами посчитаете.Хотя да, таким как вы проще вбахать кластер - за чужой счет еще и не такое можно.
MyISAM следует использовать, когда больше важна производительность нежели надежность.
InnoDB поддерживает внешние связи - логика на уровне модели данных, для MyISAM логика на бизнес-уровне.*39393 - палиндром)
MyISAM проще в обслуживании и восстановлении из бэкапов при сбоях.
лучший тип тип хранилища это постгрес :). Я серьёзно. Рекомендую хотя бы попробовать.
звучит как "первая доза - бесплатно" ;-)
А я вот своим опытом поделюсь
Те, кто рассказывают про скорость InnoDB дайте пожалуйста сравнение длясабжа
c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией load data concurrent infile.
Не поверите, но перезапись бинарного файла еще быстрее отработает, причем как для myisam так и для innodb. Вот только какое это имеет отношение к нормальной работе с базой данных?
>Те, кто рассказывают про скорость InnoDB дайте пожалуйста сравнение длясабжа
>c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией load data concurrent infile.Вот, блин, интересный ты тест задвинул... Ты бы ещё линейное чтение проверял из одной таблицы с одним индексом. Ты реальную базу давай. 100 связанных таблиц с одинаковыми индексами в обоих базах, 100 млн. записей в базе и запрос с пятью уровнями вложения. Поэтому и сравнивают PostgreSQL и MySQL, что в MySQL есть InnoDB. У меня сервак на MySQL развёрнут под InnoDB (80 таблиц, 60 млн. записей) - 3000 запросов в секунду держит.
У каждого Петрушки - свои игрушки.
У меня в базу льются логи биллинга для последующей обработки и обращения к ним.
Никаких вложенностей, никаких внешних ключей. Мне нужна быстрая заливка и быстрая выборка данных по 2-3 ключам из таблицы в 150-200 млн. записей.
Зачем для твоей задачи вообще реляционная база данных? Зачем с таким использованием БД о чем то спорить в этой теме?
РБД мне потому, что система ключ-значение меня не удовлетворяет, кроме того SQL как язык формирования запросов для меня привычен и удобен.
Там где мне нужно - отношения используются, там где не нужно - нет. Или Вам преподаватели СУБД не говорили, что НФ это не догма а средство? И то, что данные могут быть даже не в 1НФ для Вас открытие?
Еще раз но другими словами. Ни myisam, ни innodb не предназначались для такого использования. Зачем вы их сравниваете на том поле, для которого они не предназначены? Если утрировать, то вы доказываете преимущество бинокля над телескопом для операции забивания гвоздей.
>Те, кто рассказывают про скорость InnoDB дайте пожалуйста сравнение длясабжа
>c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией
>load data concurrent infile.
>У меня в базу льются логи биллинга для последующей обработки и обращения к ним.
>Никаких вложенностей, никаких внешних ключей. Мне нужна быстрая заливка и быстрая выборка данных по 2-3 ключам из таблицы в 150-200 млн. записей.А причём здесь движок базы? Тут вся нагрузка на ОСи. Чистый файловый режим. При таком режиме работы скорее влияет:
1. Мощность железа. Настройка железа.
2. Выбор ОС. Настройка ОС.
3. Выбор ФС. Настройка ФС.
4. Ну, и настройка MySQL, чтобы учитывались особенности данного режима.
>[оверквотинг удален]
>>c MyISAM для заливки 200кк записей в таблицу с 2-3 индексами конструкцией
>>load data concurrent infile.
>>У меня в базу льются логи биллинга для последующей обработки и обращения к ним.
>>Никаких вложенностей, никаких внешних ключей. Мне нужна быстрая заливка и быстрая выборка данных по 2-3 ключам из таблицы в 150-200 млн. записей.
> А причём здесь движок базы? Тут вся нагрузка на ОСи. Чистый файловый
> режим. При таком режиме работы скорее влияет:
> 1. Мощность железа. Настройка железа.
> 2. Выбор ОС. Настройка ОС.
> 3. Выбор ФС. Настройка ФС.
> 4. Ну, и настройка MySQL, чтобы учитывались особенности данного режима.чистый файловый режим это если бы не было индексов - все упирается в них.
особенность load concurrent infile в том, что индексы создаются без блокирования таблицы как это обычно происходит в MyIsam при простом INSERT, и в то же время достаточно быстро, в отличие от InnoDB.