MySQL слияние таблиц InnoDb и MyiSAM

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

Я создал таблицу InnoDb для хранения данных (потому что она может выполнять фиксацию и откат) и таблицу MyiSAM, которая является точной копией таблицы InnoDb для использования полнотекстового поиска. Теперь проблема в том, чтобы синхронизировать эти таблицы.

Я ищу эффективный способ синхронизации таблицы MyiSAM с таблицей InnoDb. Я не могу использовать триггеры, потому что я не хочу, чтобы что-либо хранилось в таблице MyiSAM, пока данные не будут зафиксированы в таблице InnoDb.

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

Стоит также упомянуть, что мой сервер MySQL находится на Bluehost, поэтому MySQL заблокирован на версии 5.1, поэтому я не могу использовать новый полнотекстовый поиск InnoDb с версией 5.6. И, конечно же, я не могу установить какой-либо сторонний поисковый сервер, например sphinx, на Bluehost.

Если у кого-то есть хорошее решение моей проблемы, буду очень признателен.


person spike    schedule 06.12.2011    source источник


Ответы (2)


Это своего рода старый вопрос, но для людей, которые задают этот вопрос при поиске: таблицы InnoDB поддерживают индексы FULLTEXT, начиная с MySQL 5.6.4.

person Wrikken    schedule 15.02.2013

У меня есть небольшое обходное решение

  1. Настройка репликации MySQL
  2. On the Master
    • drop the FULLTEXT index on the MyISAM table
    • преобразовать таблицу MyISAM в InnoDB
  3. On the Slave
    • convert the InnoDB table back to MyISAM
    • воссоздать индекс FULLTEXT в таблице MyISAM

Идти вперед

  • сделайте все ваши ВСТАВКИ, ОБНОВЛЕНИЯ и УДАЛЕНИЯ на Мастере.
  • сделайте весь ваш ПОЛНОТЕКСТОВЫЙ поиск на Slave.

Я уже предлагал это раньше: https://dba.stackexchange.com/a/22425/877

person RolandoMySQLDBA    schedule 15.02.2013