에스 검색 최적화

1. 파일 시스템 캐시가 충분한 메모리를 예약하기

빠른 검색을 위해, 더 나은 파일 시스템 캐시에 더는 의존 파일 시스템 캐시를 ES. 일반적으로, 파일 시스템 캐시로 적어도 일반적으로 사용 가능한 메모리에, 그래서 ES 메모리에 뜨거운 지역 인덱스를 유지할 수

 

2. 빠른 하드웨어

일반적으로 I / O가 결합 된,이 경우, 당신이 필요로 검색 :

 

파일 시스템 캐시에 더 많은 메모리를 할당합니다.

SSD 드라이브를 사용.

로컬 스토리지의 사용은, NFS, SMB 및 기타 원격 파일 시스템을 사용하지 마십시오.

3. 문서 모델

문서 검색 작업을하는 동안 더 적은 자원을 소모 그래서, 적절한 유형을 사용해야합니다. 중첩 된 쿼리 시간을 늦출 작업을 조인의 사용을 피하고, 부모 - 자식 관계의 수는 쿼리 속도가 느린 시간을 할 수 있습니다.

 

4. 사전 인덱스 데이터

데이터의 인덱스를 최적화 일부 쿼리 패턴. 모든 문서는 가격 필드가 있고, 고정 된 범위에서 중합 범위 쿼리의 대부분은, 범위가 될 수 있습니다 예를 들어, "인덱싱을 사전"인덱스에, 중합의 중합 속도를 가속화하는 데 사용되는 용어 (색인 사전).

 

예를 들어, 문서는 다음과 같이 원래했다 :

 

PUT 인덱스 / 형 / 1

{

"이름": "苹果"

"가격": 13

}

 

다음과 같은 방법을 사용하여 검색 :

 

GET 색인 / 형 / _search

{

"aggs": {

"price_ranges": {

"범위":{

"필드" "가격"

"범위"[

{ "을": 10},

{ "에서"10 "을": 50},

{ "에서"50 "을": 100},

{ "부터"100 "에서"150}

]

}

}

}

}

 

우리는 문서가 인덱스의 설립에 충실 최적화 그래서, 키워드에 대한 유형을 매핑, PRICE_RANGE 필드를 증가 :

 

PUT 색인 / _mapping / 유형

{

"속성": {

"가격 범위":{

"유형": "키워드"

}

}

}

 

PUT 인덱스 / 형 / 1

{

"이름": "苹果"

"가격": 12,

"PRICE_RANGE": "10 ~ 50"

}

다음으로, 검색 요청은 오히려 가격 필드 범위 중합에 비해,이 새로운 분야를 집계 할 수 있습니다.

 

GET 색인 / 형 / _search

{

"aggs": {

"price_ranges": {

"자귀":{

"필드": "PRICE_RANGE"

}

}

}

}

5. 필드 매핑

그 말은하지 않습니다 일부 디지털 콘텐츠 분야,하지만 반드시 숫자 필드를 사용해야합니다. 일반적으로, 식별자 필드,보다 효율적으로 사용하는 키워드를 저장합니다.

 

스크립트를 사용하지 마십시오 (6)

일반적으로,이 스크립트를 사용하지 않도록해야합니다. 당신이 사용해야하는 경우, 그것은 우선 순위 고통과 표현을 제공해야합니다.

 

7. 검색 최적화

날짜 범위 검색을 사용하는 경우, 쿼리 캐시 때문에 일치하는 범위가 변경되었습니다의 일반적되지 않습니다 사용할 수 있습니다. 쿼리 캐시를보다 효율적으로 사용 할 수 있도록 그러나보기의 사용자 경험의 관점에서, 그것은 일반적으로 허용 전체 날짜로 전환합니다.

 

예를 들어, 쿼리 다음 :

 

PUT 인덱스 / 형 / 1

{

"createAt": "2020년 1월 4일 15 : 31 : 23.369"

}

 

GET 색인 / 형 / _search

{

"질문":{

"constant_score": {

"필터":{

"범위":{

"createAt": {

"GTE": "지금 1 시간"

"LTE": "지금"

}

}

}

}

}

}

 

다음 쿼리로 대체 할 수있다 :

 

GET 색인 / 형 / _search

{

"질문":{

"constant_score": {

"필터":{

"범위":{

"createAt": {

"GTE": "지금 1 시간 / m"

"LTE": "지금 / m"

}

}

}

}

}

}

 

이 예에서는, 날짜 분까지 반올림됩니다 만약 그렇다면 시간이 15시 32분 23초 때, 그 범위는 14에서 쿼리 값 createAt 필드와 일치합니다 : 32 사이에있는 모든 : 32-15을. 쿼리 실행의 범위를 포함 다수의 사용자가 동시에 조회 할 경우, 쿼리 캐시는 쿼리 속도를 높일 수 있습니다. 긴 시간 간격 반올림 GET를 들어, 더 도움이 쿼리 캐시. 단, 너무 높은 반올림은 사용자 경험을 손상시킬 수 있습니다.

 

8. 따라서, 강제 병합 구현 읽기 전용

강제 병합, 하나의 세그먼트로 결합 된 루씬 인덱스가 쿼리 속도를 개선 할 수있는 읽기 전용 인덱스로 은퇴했다. 루씬 인덱스 복수의 세그먼트가 존재하는 경우, 각각의 세그먼트는 단지 검색 프로세스를 최적화 할 수있는 별도의 검색 결과를 다음 합치고 읽기 전용 루씬 인덱스 세그먼트의 합성력을 수행 할 수 있고, 인덱스의 회수율도 좋다.

 

일반적으로 폴링 이전 데이터의 날짜를 기준으로 지수는 업데이트되지 않습니다. 당신은 지속적인 쓰기에게 고정 된 인덱스를 방지하고 별명에 관련한, 또는 인덱스 와일드 카드를 사용해야합니다. 따라서, 시점 추운 날로부터 강제 병합의 인덱스, 다른 동작 수축을 선택할 수있다.

 

8.1 강제 병합 작업

$ 컬 -X POST "http://127.0.0.1:9200/index/_forcemerge?max_num_segments=1"

1

모든 병합은 다음과

 

$ 컬 -X POST "http://127.0.0.1:9200/_forcemerge?max_num_segments=1"

1

max_num_segments는 : 세그먼트의 최대 수, 숫자가 작을수록 더 분명 쿼리 속도를 개선하지만, 더 이상 병합 소모를 설정합니다.

 

8.2 축소 작업

source_index / _setting PUT

{

"설정": {

"index.routing.allocation.require._name": "노드 1"

"index.blocks.write"사실

}

}

index.blocks.write : 읽기 전용 인덱스를 설정합니다.

 

좁은 색인

 

실행 수축 :

 

POST source_index / _shrink / target_index

{

"설정": {

"index.number_of_replicas": 1,

"index.number_of_shards": 1,

"index.codec": "best_compression"

},

"별칭": {

"my_search_indices": {}

}

}

 

제 예열 글로벌 ID (글로벌 서수)

글로벌 숫자는 키워드 필드 측면에서 중합을 실행하는 데 사용되는 데이터 구조입니다. 이 분야의 문자열 값을 나타내며, 빌드 프로세스를 blobal 서수 버킷을 필요로하는 각 버킷에 대한 값을 지정하는 숫자 값을 사용합니다. 배아 줄기 필드가 아닌 중합 용어에 사용되는 필드 모르기 때문에 기본적으로 그들은, 지연 구성된다. ES는 글로벌 서수 구성 매핑 상쾌한 미리로드 알 수 있습니다 :

 

PUT 지수

{

"매핑": {

"유형":{

"속성": {

"시티":{

"유형": "키워드"

"eager_global_ordinals"사실

}

}

}

}

}

10. 실행 힌트 (프롬 집행)

두 개의 서로 다른 용어 중합 메커니즘이 있습니다 :

 

직접 사용하여 각 버킷 데이터를 집계 (MAP) 필드 값

각 글로벌 버킷 일련 번호를 글로벌 일련 번호 필드를 사용하여 지정함으로써

ES global_ordinals의 필드 메모리의 개수가 선형 관계 중합 결과에 사용되도록, 글로벌 버킷 번호의 동적 할당을 사용하는 기본 옵션으로 키워드 필드를 사용한다. 대부분의 경우,이 속도는 곧 접근. 쿼리가 문서의 소량 만 일치하면,지도를 사용하는 것이 좋습니다. 그들이 서수하지 않기 때문에, 단지 중합에서 스크립트를 실행하는 경우 기본적으로 맵이 사용된다.

 

GET 색인 / 형 / _search

{

"aggs": {

"시티":{

"자귀":{

"필드": "도시"

"execution_hint": "지도"

}

}

}

}

11. 예열 파일 시스템 캐시

배아 줄기 호스트 다시 시작, 파일 시스템 캐시가 비어있을 경우, 다음 검색이 될 것입니다 느리게, 당신은 파일 이름 확장명을 지정하여 파일을 메모리에로드되어야하는 운영 체제 표시 index.store.preload 세트를 알려줍니다 사용할 수 있습니다.

 

예를 들어, 구성 파일을 elasticsearch.yml합니다 :

 

index.store.preload [ "NVD", "DVD"]

1

또는 인덱스 설정을 만들 때 :

 

PUT 지수

{

"설정": {

"index.store.preload"[ "NVD", "DVD"]

}

}

파일 시스템 캐시가 충분히 큰가 아닌 경우, 그렇지 않은 모든 데이터를 저장, 너무 많은 파일이 검색 속도를 느리게 할 파일 시스템에 미리로드입니다 수 있습니다,주의해서 사용해야합니다.

 

최적화 캐시 사용률 12. 환경

같은 파일 시스템 캐시, 캐시 요청 또는 쿼리 캐시로, 검색 성능을 향상시킬 수있는 여러 캐시가 있습니다.

 

그러나 모든 캐시는,이 요청은 두 가지로 전달됩니다 실행할 경우 두 번 같은 요청을 실행하면, 거기에 하나 개 이상의 사본이 있으며,주기 (기본 라우팅 알고리즘)을 사용하는 것이 수단 노드 수준에서 유지 A는 노드 레벨 캐싱 도움을 방지 분열의 복사합니다.

 

유사한 검색 요청 중 하나에 의해 검색 응용 프로그램의 사용자 때문에, 검색 요청은 캐시의 사용을 최적화 할 수 있도록, 동일한 노드에있는 유사한 가을을 확인합니다.

 

(13) 검색 요청 규제 batched_reduce_size

이 필드는 검색 요청의 매개 변수입니다. 단지 수 기본적으로 중합 조작은 모든 조각이 시트 반환 결과의 전체 부분을 기다릴 수 batched_reduce_size 변수를 이용하여 검색을 수행 한 결과가 될 때까지 대기하는 노드의 요구를 조정하지만, 단편의 특정 수의 결과를 반환 제 처리부 (감소). 이 코디네이터 노드 메모리를 많이 사용하는 모든 결과를 기다리는 동안, 극단적 인 경우 피하기 OOM이 발생할 수 있습니다 피할 수 있습니다. 이 필드의 기본값은 512, ES 5.4에서 지원됩니다.

 

14. A는 도움 처리량의 복사

탄력성 사본을 증가뿐만 아니라 처리량을 향상시킬 수 있습니다뿐만 아니라. 검색 요청이 설문 조사의 다른 사본에 전달됩니다.

 

15. 오픈 적응 선택 (ARS)의 복사본은 응답 속도를 향상시킬 ES

ARS 식이다 :

 

 

다음과 같은 의미의 각 :

 

운영 체제 (들) : 검색 요청의 노드 수는 완료되지 않은

데이터 시스템의 노드 수 : N

R (들) : 밀리 초 EWMA 응답 시간

Q (들) : 큐 스레드 풀 수 EWMA에서 대기 작업 검색

μ (들) : 밀리 노드 데이터에 EWMA 시간 검색 서비스.

ES이 정보는 약이 될 노드의 압력과 분열 복제본의 상태를 평가할 수 있습니다.

 

시작은 ARS는 기본적으로 활성화됩니다, 7.0 ES에서 ARS 버전 6.1에서 지원되며 기본적으로 꺼져 있습니다. 동적 열려면 다음 명령을 사용할 수 있습니다 :

 

PUT / _cluster / 설정

{

"과도 현상":{

"cluster.routing.use_adaptive_replica_selection"사실

}

}

 

 

게시 된 277 개 원래 기사 · 원의 찬양 (65) · 전망 380 000 +

추천

출처blog.csdn.net/ailiandeziwei/article/details/104601899