2009-07-08 4 views
0

На моем веб-сайте есть функция автозаполнения города, штата и почтового индекса.Как улучшить производительность автозаполнения asp.net AJAX

Если пользователь вводит по 3 символа города в текстовом поле, то отображаются 20 городов, начинающихся с этих символов. На данный момент метод Autocomplete в нашем приложении запрашивает базу данных sql 2005, которая имеет около 900 000 записей, связанных с городом, штатом и почтой.

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

Следовательно, для оптимизации формообразования является хорошей идеей хранить данные о местоположении в индексе Lucene или может находиться в Active Directory, а затем извлекать данные оттуда?

Какая из них будет быстрее ... Lucene или Activedirectory? И в чем преимущества и недостатки каждого? Любые предложения, пожалуйста?

Спасибо!

ответ

2

Использование ядерной опции (например, замена хранилищ данных), вероятно, не должно быть первым вариантом. Скорее, вам нужно посмотреть, почему запрос выполняется так медленно. Я бы начал с рассмотрения производительности запросов в SQL Profiler и плана выполнения в Sql Management Studio и посмотрел, не хватает ли я чего-то глупого, как индекс. После того, как вы закроете этот угол, проверьте веб-слой и убедитесь, что вы не отправляете чрезмерные объемы данных или иным образом бросаете гаечный ключ в свои работы. После того, как вы установили, что не убиваете себя в дБ или на проводе, настало время подумать о реинжиниринге.

На стороне записки мои деньги будут на сервере Sql, обрабатывая конец данных этой задачи лучше, чем любой из этих параметров. Lucene лучше подходит для полнотекстового поиска, и AD в лучшем случае является плохой базой данных.

+0

привет ... спасибо, форма ур комментариев ... не могли бы вы рассказать о том, почему Active Directory является плохой базой данных? – 2009-07-08 03:47:40

+0

Поскольку Active Directory предназначен для хранения иерархических данных и не предназначен для поиска одной записи из тысяч записей за меньшее количество времени. – SolutionYogi

0

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

--Create the table 
SELECT DISTINCT city, state, zip INTO myCacheTable FROM theRealTable 

--Rebuild the table anytime 
TRUNCATE TABLE myCacheTable 
INSERT INTO myCacheTable (city, state, zip) SELECT DISTINCT city, state, zip FROM theRealTable 

Ваши AJAX звонки могут получить доступ к myCacheTable вместо этого, который будет иметь гораздо меньше строк, чем 900К.

0

Добавляя к тому, что сказал Уайетт, вам сначала нужно выяснить, в какой области медленно? Является ли запрос SQL медленным или сетевое соединение медленным между браузером и сервером? ИЛИ есть что-то еще?

И я полностью согласен с Wyatt в том, что SQL Server гораздо более подходит для этой задачи, чем Lucene и Active Directory.

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