2012-05-28 4 views
0

그래서, 내가 가진 것을보세요.빠른 필터링을위한 SQL 데이터베이스 최적화

데이터베이스에 일반 텍스트, 태그있는 텍스트 및 HTML로 저장된 간단한 텍스트 메시지입니다. 태그가 지정된 텍스트의 경우 태그가 각 메시지에 포함됩니다. 내장 된 태그, HTML에서 굵은 스타일로 표시 -

A [quick] [brown] fox jumps over a [lazy] dog. 

빠른, 브라운과 게으른 예를 들어, 나는 다음과 같은 태그 메시지를 가질 수 있습니다. 어떤 사용자라도 [dog]와 같이 다른 태그를 표시 할 수 있습니다. 이 문제가 발생했습니다. 개의 개가 인 데이터베이스에 메시지가 새로 고침되고 개가 모두으로 변경됩니다.

수천 개의 메시지가 있으므로 필요한 항목을 필터링하고 업데이트하거나 새 값을 삽입해야하며 사용자가 태그를 동시에 변경하고 삭제할 수도 있습니다. 나는 검색 색인과 같은 것을 유지하고 빠르게 업데이트 될 메시지를 찾기 위해 이러한 필요를위한 보조 테이블을 생각하고있다. 물론, 변경된 모든 것은 주문을 유지하기 위해 다른 여러 사용자의 승인 후에 적용됩니다.

검색 및 업데이트 프로세스를보다 효과적으로 만들거나 내가 여기 다른 것을 선택해야하는 영혼이 있습니까?

중요한 경우 Ruby + MySQL을 사용합니다.

답변

0

절대적으로 각 메시지를 업데이트해야하는 경우 무차별 강제 변경 이외의 다른 방법은 없습니다. 단지 몇 천 개가 있다면, 충분히 빠를 것입니다. 그러나 그것이 수백만으로 증가하면 쿼리 최적화를 사용하거나 백그라운드 업데이트 스레드를 사용하여 게임을하지 않는 한 각 메시지에서 태그를 찾는 시간이 영향을 줄 수 있습니다. (또는 로그를 지원하는 임시 데이터베이스로 변경)

태그 수가 충분하면 테이블의 태그 목록을 유지하지 않고 각 메시지를 검색 할 때 태그 테이블 을 통해 각 잠재적 태그를 전달하십시오. 즉, 메시지의 각 단어에 대해 단어가 태그 테이블에 있는지 확인하십시오. 메시지가 짧으면 태그 화 테이블을 최적으로 색인화하여 도움을 줄 수 있습니다.

태그 테이블의 장점 중 하나는 역방향 색인으로 작동하는 메시지 태그 1 : M 테이블을 생성 할 수 있다는 것입니다. 질문이 검색 성능과 관련이없는 것처럼 보이지만 쿼리 검색 속도가 빨라집니다.