Добрый день. Подскажите как часто у вас возникали проблемы с этим движком? Стоит ли использовать innodb, если бд заполняется всего раз, а потом только select'ы? Сижу на myisam т.к. по-идее должна быть быстрее из-за отсутствия транзакций. Вобще хотелось бы прояснить когда всё-таки стоит использовать myisam, а то доверять сомнительным источниками не хочется.
Если вы в таблицу не пишете, она и не сломается. А даже если и сломается (а такое в общем то возможно только в случае поломки ФС на которой база лежит) ну сразу после заполнения сделайте дамп этой базы и положите в другом месте.
У меня небольшой опыт, 29 БД на этом движке работают около 5 лет. необратимых поломок ни разу не было. Базы небольшие в пределах гигабайта. (но в них пишется так, что дым стоит :) )
Если не секрет - в чем вы ограничены? у вас очень слабый сервер или очень высокая нагрузка?
@begemot_nn Если бы была высокая нагрузка, то я бы не задавал делетанских вопросов) Просто если myisam и правда быстрее, то почему его не использовать. Мне интересно как часто они ломаются, быстро ли восстанавивает repair table ту же бд с 1 гб. Выходит, если сервер справляется, то лучше юзать innodb? И на сколько примерно innodb медленнее при селектах?
Сыграем в экстрасенсов.
Вы проектируете суперновое приложение, на котором собираетесь изучать основы вебтехнологий, но хотите изначально сделать его суперправильно?
если да - оставьте это занятие (в смысле не программирование, а выбор движка). В вашем случае производительность движка не будет узким местом :)
репэйр приходилось делать один раз в жизни (может мне просто везет очень) не помню я сколько он работал.
ну и еще один момент innoDB не медленнее на селектах, он быстрее на них. он медленнее на инсертах
а вообще - если у вас статичный набор данных, но очень хочется работать с ними по реляционной модели - выберите движок memory - вот тут вообще огонь будет а не производительность.
@begemot_nn Нет, не угадали) Просто я устал от используйте myisam, когда преобладают select|insert, но опосайтесь случайных крашей базы данных. Мне бы факты да цифры, понимаете. И раз уж я не смог такого найти, было бы логично спросить у более опытных людей.
Когда сравнивал скорость выборки, то myisam был напорядок быстрее, но это было без индексов. Когда хотел протестировать с индексами - копирование бд и измениие движка заняло уйму времени - так и не дождался. А что касается инсертов, innodb медленее тогда, когда вставка осуществляется от разных пользовалей. Я к тому, что если нужно за раз вставить большое количество записей, то явное указание начала транзакции решает проблему со скоростью. Поправте, если что.
"копирование бд и измениие движка заняло уйму времени - так и не дождался" - это каких размеров у вас база?
по поводу бенчмарков, я увы, не помогу, не делал я их.
у меня время выполнения запросов на реальном вебе - 2-20мс и пока оно так - я туда не полезу, ибо лень - двигатель прогресса :) но мои проекты - это не хайлоад :)
в лог медленных запросов у меня попадают запросы длиннее 200мс (и он девственно чист)
@begemot_nn В том то и дело, что сама база 500мб(22млн), индексы на 1 гб. Не знаю важно или нет, но я копировал бд через phpmyadmin, не вытягиванием записей из одной таблицу и последующие вставкой в другую.
22МЛН записей в полгиговой таблице? 25 байт данных в записи? опять же, не зная структуры данных и структуры запросов советовать что либо трудно, но мне кажется вам нужно что то из NoSql решений, или хотя бы HandlerSocket к Mysql. эти плюшки позволяют простые выборки по ключам делать с очень высокой скоростью и с очень небольшими накладными расходами.
@begemot_nn Таблица с тестовыми данными. Создал я всё-таки таблицу innodb. Индексы, что в innodb, что в myisam идентичны, только вот запрос SELECT * FROM items JOIN download ON items.id != download.id WHERE items.category = 13 ORDER BY items.popular LIMIT 0, 100 в innodb выполняется 7 секунд, а на myisam 0.4. Вдобавок innodb еще и на 300 мб больше(myisam 1.4гб вместе с индексами). Всётаки я остался при мнении, что select в разы быстрее в myisam.