Если таблица сообщений форума использует MyISAM или InnoDB - PullRequest
2 голосов
/ 03 октября 2010

Для форума я должен использовать MyISAM или InnoDB для таблицы, в которой хранится текст?

Я знаю, что MyISAM поддерживает полнотекстовый поиск , что звучит так, как будто я должен идтино, читая, я наткнулся на это очень запутанное предложение.

Вы должны использовать InnoDB, когда транзакции важны, например, для ситуаций, в которых чередуются вставки и SELECT, такие как онлайн-доски объявлений или форумы.

Хорошо,но для «онлайн досок объявлений или форумов» мне понадобится хороший поиск для поиска по тексту каждого поста, поэтому не имеет ли больше смысла использовать MyISAM?Может кто-нибудь уточнить, что чаще всего используется?

Ответы [ 3 ]

3 голосов
/ 03 октября 2010

Помимо собственного решения для полнотекстового поиска MySQL, для которого, как вы уже определили, требуется механизм хранения MyISAM, вы можете рассмотреть популярные сторонние поисковые системы Sphinx и Apache Lucene , с которой вы можете использовать таблицы InnoDB.

Вы также можете придерживаться решения MySQL и использовать хранилище InnoDB для всех таблиц, кроме одной таблицы, в которой будут просто храниться post_id и text_body. Предполагается, что вам требуется только полнотекстовый поиск содержимого сообщений форума.

Кроме того, обратите внимание, что, хотя основным недостатком MyISAM является отсутствие поддержки транзакций, существуют и другие важные проблемы для производственной системы. Вы можете проверить следующую статью для дальнейшего чтения:

1 голос
/ 03 октября 2010

Вообще говоря, для некритических данных я бы использовал InnoDB, настроенный на скорость. (Например, я не буду сбрасывать двоичные журналы при каждом коммите.) Я бы использовал MyISAM только для таких вещей, как журналирование таблиц.

Как уже упоминалось, вы можете использовать внешние поисковые индексы, если вам нужно выполнить полнотекстовый поиск. Они более мощные и быстрые, чем MySQL.

Что касается части о транзакциях, то это немного ложь. Вы можете сделать то же самое с MyISAM, заблокировав таблицы для WRITE. Если вы добавляете, скажем, три таблицы при публикации сообщения, вы можете заблокировать все три таблицы для ЗАПИСИ, и данные будут выглядеть согласованно (при условии, что все три INSERTS выполнены успешно).

Но проблема в том, что вы блокируете всю таблицу, что может замедлить одновременное использование. Фактически, это одно из главных преимуществ InnoDB перед MyISAM: оно имеет блокировку на уровне строк.

Короче говоря: если вы не можете настроить внешний индексатор, и ваш сайт не испытывает слишком много трафика, MyISAM будет работать нормально, несмотря на его меньшую надежность. Вы можете эмулировать согласованность транзакций с блокировками таблиц. (Я не хочу, чтобы это звучало так, будто блокировка таблицы как-то эквивалентна транзакциям.)

В противном случае я бы использовал InnoDB с внешней службой индексации.

1 голос
/ 03 октября 2010

Для любого большого объема текста я бы использовал InnoDB для его хранения и Sphinx для его индексации. Он предоставляет гораздо больше возможностей поиска, чем встроенный в mysql.

...