2014-02-02 4 views
0

У меня есть «поисковая система», в которой я работаю. Во время тестирования сайт искал 40 000 записей в традиционной базе данных MySQL для разных критериев, а затем сортирует и отображает каждый на основе общего ранга. Производительность была очень хороша с этим уровнем данных, и в среднем результаты достигали примерно 2-3 секунды.Самый быстрый MySQL-движок для чрезвычайно больших запросов

Чувствуя себя уверенным, я увеличил количество записей в базе данных с 40 000 до примерно 325 000. Теперь для поиска в базе данных требуется около 4 минут. В одном поиске используется ~ 2 ГБ ОЗУ! Кроме того, я получаю предупреждения с сервера :)

Я чувствую, что код такой же оптимизированный, насколько это может реально получить. Если бы я работал над ним еще месяц, я мог бы получить на 1% лучшую производительность. Поэтому мой вопрос: какой самый быстрый MySQL Engine с открытым исходным кодом используется для чрезвычайно больших наборов данных/запросов?

Я читал о MemSQL, который выглядит потрясающе, за исключением того, что он не является бесплатным (или даже близок к доступным). Я не знаю точных цифр доллара, но я слышал 5000 долларов/лицензию/сервер.

Любые идеи, предложения? В настоящее время я использую MyISAM. Я открыт для любой альтернативы, совместимой с MySQL.

Я понимаю, что в определенный момент мне понадобится более мощное оборудование, но на данный момент этого решения нет в карточках.

+2

325 000 строк не особо велики. Однако вы не предоставляете никакой полезной информации, чтобы реально помочь в повышении производительности. –

+0

Я открыт для предоставления любой информации, которая будет полезна. Что вам нужно? – SoWizardly

+0

Примеры запросов, схемы таблиц, немного данных о примерах, каковы предупреждающие сообщения, какие индексы у вас на таблицах будут хорошим началом. – Ghost

ответ

0

База данных не является поисковой системой.

Попытка уговорить его в одном просит прощения по дороге; особенно учитывая, что базы данных почти всегда выполняют двойную обязанность. Таким образом, помимо того, что вы занимаетесь атомарностью и соблюдением ACID, проверяя согласованность и управляя транзакциями, вы теперь просите об этом также в поисковой системе.

Вы можете исправить проблемы, с которыми вы сейчас сталкиваетесь (возможно, случай добавления индексов и настройки использования памяти, EXPLAIN statement - ваш друг), так как ваш набор данных очень мал, но вскоре вы столкнетесь с дополнительными проблемами.

Существует причина, по которой поисковые системы не основаны на базах данных.

Есть много вариантов выбора. Популярными являются solr для его чистой возможности поиска и индексирования и elasticsearch, что является скорее платформой для больших распределенных запросов.

На мой взгляд, самый простой способ понять - это solr, который позволяет вам создать поиск стиля «Google» - это поисковые документы, создавать индексы, выделять совпадения. Он легко интегрируется с базами данных. Попробуйте это 5 minute tutorial за идею о том, как это работает. Его проект с открытым исходным кодом, Apache.

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