Смешивание таблиц MyISAM и InnoDB с Doctrine - PullRequest
1 голос
/ 08 марта 2011

Я сейчас пытаюсь оптимизировать функцию поиска на нашем сайте. Мы используем доктрину в качестве нашей ORM, и все таблицы в настоящее время InnoDB. Ниже приведен приблизительный план структуры нашей таблицы.

Table: Person
Columns:
  personId
  firstName
  middleName
  lastName

Table: Obituary
  obitId
  content  <--- LONG TEXT
  personId

От человека к некрологу существует отношение один ко многим.

В настоящее время пользователь может вводить имя человека, наш сайт будет искать вхождение текста поиска в таблице лиц (имя, фамилия, отчество и т. Д.), А также содержание некролога.

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

Мой вопрос: если я переключу Обитарную таблицу на MyISAM, будет ли это иметь какие-либо отрицательные побочные эффекты с Doctrine, когда я сохраню и обновлю записи Person?

1 Ответ

3 голосов
/ 08 марта 2011

Заметит ли Доктрина?Вероятно, нет.

Это вызовет проблемы?Только когда что-то пойдет не так.MyISAM не является механизмом хранения транзакций.Если вы измените таблицу MyISAM, находясь внутри транзакции, то вам придется откатить изменения, они не откатятся в этой таблице.Прошло много времени с тех пор, как я пытался ужасно сломать его, но я готов поспорить, что MySQL даже не выдаст предупреждение, когда это произойдет.Это приведет к проблемам согласованности данных.

Если вы управляете сервером, вам следует серьезно подумать о том, чтобы внешнее программное обеспечение поиска снимало нагрузку с базы данных, например ElasticSearch (интегрируется на уровне приложения)или Sphinx (интегрируется на уровне MySQL).

...