MyISAM vs InnoDB vs Что-нибудь

Какое хранилище данных лучше в следующей ситуации?

В приложении-голосовалке для социальной есть AJAX скрипт, который вызывается около 10-50 раз в секунду. Он выполняет следующие действия:

— SELECT по первичному ключу
— REPLACE по уникальному индексу
— SELECT c JOIN из двух таблиц и сортировкой. При этом LIMIT 1. Если конкретно, то вот:

            SELECT p.*, COUNT(g.id)>0 AS my_votes, p.region='{$reg}' AS from_my_region
            FROM person AS p
            LEFT JOIN guess AS g ON p.oid=g.person_oid AND g.author_oid=@myOid
            WHERE p.age>0 AND p.oid<>@myOid AND p.gender<>'{$gender}'
            GROUP BY p.oid
            ORDER BY my_votes ASC, from_my_region DESC, points DESC, is_app_user DESC, RAND() 
            LIMIT 1  

Я бы сформулировал так:
Из тяжелых операций на один REPLACE приходится один двух-табличный SELECT JOIN

В базе миллионы записей, и постоянно добавляются новые.
Все поля по которым идут отбор — проиндексированы.
  • Вопрос задан
  • 24115 просмотров
Пригласить эксперта
Ответы на вопрос 4
Lilo
@Lilo
MySQL
я бы выбрала
Ответ написан
Комментировать
@Graynder
MySQL vs MyISAM Противопоставление теплого с мягким.
Логичнее было бы противопоставить MyISAM vs Innodb

я бы выбрал MariaDB — там движок Aria — MyISAM с поддержкой транзакций.
Ответ написан
bolnikh
@bolnikh
MyISAM гораздо быстрее, и если не страшно потерять часть данных, то можно использовать его. НО… MyISAM блокирует всю таблицу при вставке — и при некоторой нагрузке может случиться неприятное — запросы встанут в очередь. Так что надо тестировать.

Лучше использовать хранилище данных в памяти — Redis, memcache — там проблем со вставками не будет. Но придется переписывать приложение, логика работы хранилищ в памяти совсем другая.
Ответ написан
Комментировать
@zuborg
Скорее всего лучше себя будет вести InnoDB. MyISAM блокирует всю таблицу и годится только для неинтенсивного потока апдейтов.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы