2012-06-03 2 views
5

스핑크스에서 책을 읽었으며 여러 개의 코어와 스핑크스 기술 자체를 활용하기 위해서는 필연적으로 큰 색인을 더 작은 것 및 다중 색인 질문에서 그 (것)들을 질문하십시오. 그러나이 책은 더 이상의 세부 사항에 들어 가지 않습니다.스핑크스 다중 색인을 활용하여 성능을 향상시키는 방법

여기에 대한 일반적인 전략은 무엇입니까? UNION과 같은 방식으로이를 분할합니다.

index1: SELECT ... FROM table LIMIT 0, 1000 
index2: SELECT ... FROM table LIMIT 1000, 1000 
... 

그리고 나서이 조각들을 수시로 재구성합니다. 검색 할 때 다른 코어가 이러한 인덱스를 병렬로 처리합니다. 또는 더 큰 색인의 기존 항목과 더 작은 색인에 추가되는 새로운 항목을 분리하는 것과 다른 무엇입니까? 또는 텍스트 필드를 하나의 색인으로 분리하고 다른 속성을 다른 속성으로 분리합니까?

답변

10

위대한 질문입니다.

스핑크스는 단일 로컬 인덱스 검색 당 하나 개의 CPU 코어 및 두 개의 인덱스가있는 경우 동시에 두 개의 인덱서를 실행하고 두 개의 CPU 코어를 활용할 수

색인 동안 하나의 인덱스를 구축하기위한 하나 개의 CPU 코어를 사용한다. 인덱싱은 IO 집중적 인 작업이므로 너무 많은 인덱서를 실행하지 마십시오. 당신은 두 개 이상의 인덱스가 있으면

당신은 검색 쿼리에 그들 모두를 언급하거나 같이 분산 된 인덱스를 사용하여 동시에이를 검색 할 수 있습니다 :

index index_main 
{ 
     type   = distributed 
     local   = index1 
     local   = index2 
} 

index2 index1의 및 은 별도의 색인입니다. 이 경우 index_main 에 대해 검색 할 수 있습니다와 스핑크스는 해시 또는 속성 값과 모든 의해, 분할 데이터 당신이 범위로 분할 기록을 포함 원하는 모든 기술을 활용할 수에 관해서는 모두 인덱스

에서 당신 집계 결과를 제공 할 것입니다 위에서 어떤 조합 으로든. 두 번째의 경우

sql_query  = SELECT id, title, description FROM <my_table> WHERE (id % 2) = 0 

: 최초의 인덱스를 들어

:

sql_query  = SELECT id, title, description FROM <my_table> WHERE (id % 2) = 1 

이 방법은 몇 가지 단점을 가지고 있지만

내가 가장 좋아하는 사람은이 같은 색인 번호를 결정하기 위해 모듈을 사용하는 것입니다 일반적으로 많은 양의 데이터가 없으면 좋은 시작입니다.

+0

좋은 답변 +1. – Yavar

+0

감사! 희망이 도움이됩니다. – vfedorkov

+0

@vfedorkov 여러 인덱스를 사용하고 모듈러스 연산자 (%)를 사용하는 것과 같은 방법을 사용했지만 결점이있는 % 연산자에 대한 의미를 말씀해 주시겠습니까? 우리는 5 천만 개 이상의 키워드를 가지고 있는데, 색인 생성시이 연산자를 사용했으나 색인 생성에는 약 2 ~ 3 시간이 걸렸지 만 잘 작동하는 것으로 보입니다. 서버에 8 개의 코어를 사용하기 때문에 약 8 개의 색인이 있습니다. 따라서 ID % 8 = 1, id % 8 = 2 등을 사용했습니다. –

관련 문제