Полнотекстовый поиск с InnoDB

Поскольку люди уже упомянули различия, которые я запишу о почему кортежи.

, Почему кортежи предпочтены?

оптимизация Выделения для маленьких кортежей

, Чтобы уменьшить фрагментацию памяти и ускорить выделения, повторные использования Python старые кортежи. Если кортеж, больше не необходимый и, имеет меньше чем 20 объектов вместо того, чтобы удалить его постоянно, Python перемещает его в бесплатный список.

А бесплатный список разделен на 20 групп, где каждая группа представляет список кортежей длины n между 0 и 20. Каждая группа может сохранить до 2 000 кортежей. Первая (нулевая) группа содержит только 1 элемент и представляет пустой кортеж.

>>> a = (1,2,3)
>>> id(a)
4427578104
>>> del a
>>> b = (1,2,4)
>>> id(b)
4427578104

В примере выше мы видим, что a и b имеют тот же идентификатор. Это вызвано тем, что мы сразу заняли уничтоженный кортеж, который был в бесплатном списке.

оптимизация Выделения для списков

Начиная со списков может быть изменена, Python не использует ту же оптимизацию в качестве в кортежах. Однако списки Python также имеют бесплатный список, но он используется только для пустых объектов. Если пустой список удален или собран GC, он может быть снова использован позже.

>>> a = []
>>> id(a)
4465566792
>>> del a
>>> b = []
>>> id(b)
4465566792

Источник: https://rushter.com/blog/python-lists-and-tuples /

, Почему кортежи эффективны, чем списки? -> https://stackoverflow.com/a/22140115

93
задан brianreavis 4 September 2009 в 20:48
поделиться

3 ответа

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

Выделенная поисковая система определенно будет наиболее гибким вариантом здесь - храните данные публикации в MySQL / innodb, а затем экспортируйте текст в свою поисковую систему. Вы можете довольно легко настроить периодическое создание / публикацию полного индекса и добавлять обновления индекса в реальном времени, если чувствуете необходимость и хотите потратить время.

Lucene и Sphinx - хорошие варианты, как и Xapian , что приятно и легко. Если вы пойдете по пути Lucene, не думайте, что Clucene будет лучше, даже если вы предпочитаете не бороться с Java, хотя я не совсем квалифицирован, чтобы обсуждать плюсы и минусы того и другого.

50
ответ дан 24 November 2019 в 06:20
поделиться

Сфинкс, как вы заметили, очень хорош для этого. Вся работа находится в конфигурационном файле. Убедитесь, что ваша таблица со строками имеет уникальный ключ целочисленного идентификатора, и все будет в порядке.

1
ответ дан 24 November 2019 в 06:20
поделиться

Вы должны потратить час и пройти установку и тест-драйв Sphinx и Lucene. Посмотрите, соответствует ли какой-либо из них вашим потребностям в отношении обновления данных.

Одна из вещей, которая разочаровала меня в Sphinx, заключается в том, что он не очень хорошо поддерживает инкрементные вставки. То есть переиндексировать после вставки очень дорого, настолько дорого, что их рекомендуемое решение - разделить ваши данные на более старые неизменяемые строки и новые изменчивые строки. Таким образом, при каждом поиске, выполняемом вашим приложением, придется выполнять поиск дважды: один раз по большему индексу для старых строк, а также по меньшему индексу для последних строк. Если это не согласуется с вашими шаблонами использования, этот Sphinx не является хорошим решением (по крайней мере, не в его текущей реализации).

Я хотел бы указать еще одно возможное решение, которое вы могли бы рассмотреть: Система пользовательского поиска Google . Если вы можете применить SEO к своему веб-приложению, передайте функцию индексации и поиска Google на аутсорсинг и вставьте текстовое поле поиска Google на свой сайт. Это может быть наиболее экономичный и масштабируемый способ сделать ваш сайт доступным для поиска.

11
ответ дан 24 November 2019 в 06:20
поделиться
Другие вопросы по тегам:

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