2009-07-08 1 views
0

내 웹 사이트에 도시, 주 및 우편 번호 자동 완성 기능이 있습니다.asp.net AJAX 자동 완성 성능을 향상시키는 방법

사용자가 입력란에 도시의 3자를 입력하면 해당 문자로 시작하는 상위 20 개 도시가 표시됩니다. 현재 우리 애플리케이션의 자동 완성 메소드는 city, state 및 zip과 관련된 약 900,000 개의 레코드가있는 sql 2005 데이터베이스를 쿼리합니다.

그러나 도시 목록을 표시하는 응답 시간은 매우 느립니다.

따라서 성능 최적화를 위해 위치 데이터를 Lucene 색인에 저장하거나 Active Directory에 저장 한 다음 거기에서 데이터를 가져 오는 것이 좋습니다.

어느 것이 더 빠를 것입니까 ... Lucene 또는 Activedirectory? 그리고 각각의 장단점은 무엇입니까? 어떤 제안을 해주시겠습니까?

감사합니다.

답변

2

원자력 옵션 (예 : 데이터 저장소 변경)은 첫 번째 옵션이 아니어야합니다. 오히려 쿼리가 왜 그렇게 느리게 수행되는지 살펴야합니다. SQL 프로필러의 쿼리 성능과 SQL Management Studio의 실행 계획을 살펴보고 인덱스와 같은 바보 같은 부분이 없는지 살펴 보겠습니다. 그 각도를 커버 한 후에는 웹 레이어를 확인하고 과도한 양의 데이터를 보내지 않거나 다른 방법으로 스패너를 던지지 않도록하십시오. 일단 당신이 DB에서 또는 전선에서 자신을 죽이지 않는다는 것을 확증했다면, 그것은 재 엔지니어링에 대해 생각할 때입니다.

참고로,이 돈은이 옵션 중 하나보다 더 나은이 작업의 데이터 끝을 처리하는 SQL Server에 있습니다. Lucene은 전체 텍스트 검색에 더 적합하고 AD는 좋지 않은 데이터베이스입니다.

+0

안녕하세요 ... 감사 양식 ur 의견 ... 왜 Active Directory는 가난한 데이터베이스로 정교 해주십시오 수 있습니까? –

+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 호출은 900K보다 훨씬 적은 수의 행이되는 대신 myCacheTable에 액세스 할 수 있습니다.

0

와이어트 (Wyatt)의 말에 덧붙여, 먼저 어떤 지역이 느린 지 알아 내야합니까? SQL 쿼리 속도가 느리거나 브라우저와 서버 사이의 네트워크 연결 속도가 느 립니 까? 아니면 뭔가 다른게 있니?

그리고 전 Wyatt와 SQL Server가 Lucene 및 Active Directory보다 훨씬 더 적합하다는 데 전적으로 동의합니다.