2012-09-18 2 views
0

검색의 성능을 향상, 나는 방문자가 검색 엔진에서 검색 한 키워드 (예를 들어, "PHP 성능")을 저장합니다. 검색 엔진에서 모든 새로운 방문 VARCHAR 필드에

키워드가 하루에 사용하는 빈도 수를 계산하기 위해, 나는 다른 사람이 이미 용어는 특정 날짜를 검색 여부를 확인해야합니다.

몇 개월 후 테이블이 매우 큰 얻고 키워드의 존재에 대한 MySQL의 검사는 그 날은 더 길고 더 오래 걸립니다. 따라서 키워드를 저장하고 각 키워드에 특정 ID를 부여하는 대신 여분의 테이블로 전환하여 새로운 하루가 아닌 한 번만 확인 프로세스를 수행 할 수 있습니다. 이 키워드에 관련된 특정 ID는 매일 다양 화되는 표에 삽입됩니다. ...

이 이미 잘 작동하지만,이 표는 더 크고 더 커지면

누군가가 더 높은 성능이를위한 좋은 솔루션을 제공합니까?

최저

,

프레디

+0

왜 당신이 existi를 사용하지 않는 ... 더 이상 도움을 물어 주시기 필요 Google Analytics 또는 Piwik과 같은 솔루션입니까? – KingCrunch

답변

1

을가 성능에 관해서 몇 가지 '트릭'이있다 하나를 개선하기 위해 수행 할 수

  1. 캐싱 메커니즘을 구축하십시오. 그것은 두 번째 테이블을 만들어서 이미 한 것입니다. 그 이상을 취해 캐시 된 테이블을 메모리 또는 memcached에 보관할 수 있습니다.
  2. 는 쿼리를 Opimize 및 인덱스 검색 필드 (들)에가 있는지 확인합니다. 네가 그렇게했다면 자극하지 말아라.
  3. 봅니다 (드) 데이터베이스를 정상화. 때로는 다른 데이터베이스 구조가 설계 시점에서 최적이 아니지만 속도에 맞게 최적화되는 경우가 있습니다. 네가 그렇게했는지 확신 할 수 없어.
  4. 검색을위한 다양한 솔루션을 살펴보십시오. 아마도 Lucene을 살펴보십시오.
+0

답장을 보내 주셔서 감사합니다. 2 질문 : mysql에 의해 varchar 필드를 인덱싱 할 수 있습니까? – Freddy

+0

물론 다른 필드와 마찬가지로 색인을 추가하십시오. – JvdBerg

0

DB에 사용자가 입력 한 모든 키워드를 저장하지 마십시오.

방문자가 키워드를 입력 할 때마다 DB에서 키워드를 검색하고 카운터를 늘리고 키워드가 없으면 counter = 1로 새 카운터를 만듭니다.

또한 키워드 컬럼에 인덱스를 사용하여 전체 텍스트 검색을 사용하지 마십시오, 사용 직선을 비교 한 :

SELECT counter FROM keyword_table WHERE keyword="exact keyword" LIMIT 1; 
+0

답변 해 주셔서 감사합니다.나는 거의 여분의 테이블을 가지고이 일을했지만 여전히 mysql 쿼리가 varchar 필드에서 검색하고 이것이 100000 개 항목에 상당한 시간이 걸리는 문제가있다. – Freddy

+0

varchar 대신 char 유형을 사용하면 varchar보다 많은 공간이 필요하지만 검색이 빨라집니다. 그것은 100k 항목에 대해 느려서는 안되며 어쩌면 당신은 응용 프로그램 논리에서 뭔가 잘못하고있는 것입니다. – S3Mi

+0

나는 단지 phpmyadmin에서 sql을 실행하는데, 0.10 초가 걸린다. – Freddy

0
나는 개인적으로이 데이터에 대한 기본 백업 저장소로 MySQL을 사용하지 않을, 내가 아마 백업 저장소로 MySQL을 사용,보다 신속하고 가용성이되는 NoSQL 솔루션 훨씬에 보일 것이다

...

으로 APC는 뮤텍스 잠금 기능이 내장되어 있습니다. APC를 실행하고 실행해도 카운트가 만족스럽지 않으면 숫자가 손상 될 것이라고 생각하지 않습니다. 서비스 프로세스가 작성되지 않도록 Mutex에 직접 액세스해야합니다. https://github.com/krakjoe/pthreads를 찾을 수 있습니다, 뮤텍스 내 pthreads의 프로젝트에서 제공되는 다른 같은 시간,

관련 문제