2013-09-06 3 views
0

Я всегда использовал MyISAM для всех своих проектов, но я ищу опытного мнения, прежде чем начать этот следующий.База данных CakePHP - MyISAM, InnoDB или Postgresql

Я собираюсь начать проект, который будет иметь дело с сотнями тысяч строк на многих таблицах. (По прошествии многих лет на нескольких столах может быть даже миллионы строк). Проект будет нуждаться в скоростном доступе, поскольку он является веб-приложением, но быстро писать явно не повредит. Он должен быть очень масштабируемым.

Проект также будет иметь дело с конфиденциальной и важной информацией, то есть он должен быть надежным. Похоже, что MySQL игнорирует валидацию.

Проект будет использовать CakePHP в качестве рамки, и я уверен, что он поддерживает MySQL и Postgresql одинаково, но если кто-то может не согласиться со мной на этом, пожалуйста, дайте мне знать.

У меня возникло искушение пойти с InnoDB, но я слышал, что у него ужасное представление. Postgresql кажется самым надежным, но также не так быстро, как MyISAM.

Если бы я смог обновить версию MySQL от MySQL до 5.5, будет ли InnoDB более безопасным, чем Postgres? Или MyISAM по-прежнему лучше подходит для большинства потребностей и более масштабируема, чем другие?

+0

Этот вопрос здесь не подходит, поскольку ответы будут основаны на мнениях. Я скажу, что в то время как MyISAM может быть быстрее в некоторых случаях, но отсутствие ограничений и транзакций с внешним ключом довольно ограничено. – jordanm

+0

Я понимаю, что это может быть субъективным, но есть также факты, которые приводят к этим мнениям. Что вы подразумеваете под ограничениями внешнего ключа? –

+0

http://en.wikipedia.org/wiki/Foreign_key – jordanm

ответ

2

Единственный ответ, на который это действительно нужно, - «не MyISAM». Если вам не нужны ваши данные. В конце концов, /dev/null имеет поистине потрясающую производительность, но он не соответствует вашему требованию о надежности:;)

Остальное - это обычное мнение MySQL против PostgreSQL о том, что мы закрываем каждый раз, когда кто-то спрашивает новый вкус, потому что он действительно не " t привести к тому, что это полезно.

Что гораздо важнее, чем ваш выбор БД, как вы его используете:

  • ли вы кэшировать обычно хит данные, которые могут позволить себе быть немного несвежий в чем-то вроде Redis или Memcached?

  • Вы избегаете «n + 1» выбирает из неэффективных ORM в пользу несколько здравомыслящих соединений?

  • Вы избегаете выбора большого количества данных, которые вам не нужны?

  • Вы выполняете выборочное исключение кеша (для этого я использую LISTEN и NOTIFY), или просто очистите весь кеш, когда что-то изменится?

  • Вы минимизируете разбиение на страницы и когда вы должны разбивать на страницы, сделайте это на основе последнего увиденного ID, а не смещения? SELECT ... FROM ... WHERE id > ? ORDER BY id LIMIT 100 может быть значительно быстрее, чем SELECT ... FROM ... ORDER BY id OFFSET ? LIMIT 100.

  • Вы контролируете выполнение запросов и заданий по настройке ручной настройки, создаете соответствующие индексы и т. Д.?

(Marked сообщество вика, потому что я близко голосовал этот вопрос, и представляется нецелесообразным закрывать-голосование и ответить, если это не CW).

+1

Ха-ха, спасибо. Я по-прежнему обеспокоен тем, что страницы будут навсегда загружаться после того, как я уйду от MyISAM, но это еще что-то в прошлом? –

+0

@LukeSapan Ну, для высокомасштабируемых загрузок с высокой нагрузкой вы должны изучать слой кеширования - memcached, redis и т. Д. Я использую PostgreSQL с триггерами, которые отправляют NOTIFY событиям работнику, который LISTENs для них и делает недействительными записи кэша, когда БД изменения, но есть всевозможные подходы в зависимости от ваших потребностей. Я не использую (Cake) PHP, поэтому я не знаю, насколько хорошо этот подход поместился бы там. –

+0

Большое спасибо за ваш проницательный ответ! –

Смежные вопросы