Веб-сайт для конкретной проблемы поиска: используя язык C или нет? - PullRequest
0 голосов
/ 03 марта 2011

Приложение должно отображать записи, которые извлекаются из списка в алфавитном порядке, используя некоторые критерии, заданные пользователем. Список выбирается из двух или более таблиц. Пользователь может запросить следующую или предыдущую страницу, или конкретную страницу, указав свой номер. Одна веб-страница может содержать до 20 записей. Смотрите мое демо на http://193.226.19.29:1200

Классические веб-инструменты (например, php и mysql): узкое место

Если пользователь запрашивает страницу 5000, сервер базы данных должен выбрать первые 100000 записей. Предложение LIMIT остановит процесс поиска после достижения этого предела, а скрипт php получит только последние 20 записей. Если мы запрашиваем последние страницы списка, процесс поиска может занять несколько минут. Как ускорить процесс поиска, чтобы получить 20 записей из середины / конца списка?

Мое решение использует язык C

Мой веб-сервер читает во время запуска весь список в основной памяти, затем он готов к принятию соединений. Он может начать процесс поиска с заданной позиции, а затем получить необходимые записи. Веб-сервер работает на Celeron 768 МГц, 256 МБ памяти, операционной системе Linux Fedora.

Я читал мнение многих веб-программистов об использовании языка C для веб-приложений

Почему вы не используете C для своих веб-приложений?

Насколько популярен C ++ для создания веб-сайтов / веб-приложений?

Изначально я применил другой критерий поиска (имя начинается с ...), и процесс поиска был очень быстрым - около 0,015 секунды. Теперь процесс поиска иногда замедляется, если вы выполняете имя поля, содержащее ... потому что при отображении первой страницы веб-сервер проверяет весь список.

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

Кто-нибудь знает некоторые решения, основанные на классических веб-инструментах, для решения этой проблемы таким образом, чтобы время ответа было приемлемым для любого запроса?

Ответы [ 3 ]

4 голосов
/ 03 марта 2011

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

SELECT * FROM societies WHERE society_name LIKE '%search_name%'

Просто замените societies именем вашей базы данных, society_name для поля, содержащего название общества и search_name для поискового термина, введенного в поле поиска.

0 голосов
/ 03 марта 2011

Звучит так, как приличный БД делал бы во сне, может быть, вы можете настроить mysql по-другому или попробовать другой БД.

0 голосов
/ 03 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...