인덱스: 5개의 글
이번 포스팅할 내용은 짧은 내용이다. 아래와 같은 Document가 있다고 생각해보자. {_id:"1234",name:"yeoseong",age:"28",address:"aaa"} 위의 도큐먼트에서 인덱스된 필드가 "name"필드라고 가정하자. 위의 도큐먼트를 검색하기 위해서는 아래와 같은 쿼리를 작성할 수 있을 것이다. db.users.find({name:"yeoseong"}) 위 쿼리의 조건에는 이미 인덱스로 스키마가 등록된 필드이기 때문에 데이터를 풀스캔하는 것이 아니라 인덱스를 서칭해서 결과값을 받아올 것이다. 하지만 조건 값에 일부로만 검색을 하면서 인덱스를 스캔하기 위해서는 어떻게 해야할까? 인덱스 프리픽스(Prefix) 스캔 : 문자열 좌측 일치 검색 문자타입의 필드 인덱스가 있고 일부 문자..
오늘은 간단하게 클러스터 모니터링을 위한 API 몇개를 정리해본다. http://es-host:9200/_cat/allocation?v -> 클러스터 디스크 현황 http://es-host:9200/_cluster/health?pretty -> 클러스터 헬스체크 http://es-host:9200/_cat/indices?v -> 인덱스 상태 확인 http://es-host:9200/_cat/shards -> 모든 샤드 상태 확인 http://es-host:9200/_cat/shards/{index_name}?v -> 특정 인덱스의 샤드 상태확인 https://brunch.co.kr/@alden/43 출처: https://coding-start.tistory.com/384?category=757916 [코..
엘라스틱서치의 구성요소 엘라스틱서치는 기본적으로 클러스터라는 단위로 데이터를 제공한다. 클러스터는 하나 이상의 물리적인 노드로 이루어져 있으며 각 노드는 모두 데이터 색인 및 검색 기능을 제공하는 일종의 물리적인 서버와 같다. 내부에는 루씬 라이브러리를 사용하고 있으며 루씬은 엘라스틱서치의 근간을 이루는 핵심 모듈이다. 1)클러스터 클러스터는 데이터를 실제로 가지고 있는 노드의 모음이다. 엘라스틱서치에서는 관련된 모든 노드들을 논리적으로 묶어서 클러스터라고 부른다. 또한 노드들은 같은 클러스터 내부의 데이터만 서로 공유가 가능하다. 같은 클러스터를 구성하는 노드들을 같은 클러스터 이름으로 설정해야한다. 엘라스틱서치는 설정된 클러스터 이름을 이용해 같은 클러스터의 구성원으로 인식된다. 같은 클러스터 내부의..
유니크 인덱스유니크란 사실 인덱스라기보다는 제약 조건에 가깝다고 볼 수 있습니다. 말 그대로 테이블이나 인덱스에 같은 값이 2개 이상 저장될 수 없음을 의미하는데, MySQL에서는 인덱스 없이 유니크 제약만 설정할 방법이 없습니다. 유니크 인덱스에서 NULL도 저장될 수 있는데, NULL은 특정의 값이 아니므로 2개 이상 저장될 수 있습니다. MySQL에서 프라이머리 키는 기본적으로 NULL을 허용하지 않는 유니크 속성이 자동으로 부여됩니다. MyISAM이나 MEMORY 테이블에서 프라이머리 키는 사실 NULL이 허용되지 않는 유니크 인덱스와 같지만 InnoDB 테이블의 프라이머리 키는 클러스터 키의 역할도 하므로 유니크 인덱스와는 근본적으로 다릅니다. 유니크 인덱스와 일반 보조 인덱스의 비교유니크 인덱..
전문 검색(Full Text Search) 인덱스인덱스 알고리즘은 일반적으로 크지 않은 데이터 또는 이미 키워드화돼 있는 작은 값에 대한 인덱싱 알고리즘이었습니다. 대표적으로 MySQL의 B-Tree 인덱스는 실제 컬럼의 값이 1MB라 하더라도 1MB 전체의 값을 인덱스 키로 사용하는 것이 아니라 1,000바이트(MyISAM) 또는 767바이트(InnoDB)까지만 잘라서 인덱스 키로 사용합니다. 또한 B-Tree 인덱스의 특성에서도 알아봤듯이 전체 일치 또는 좌측 일부 일치와 같은 검색만 가능합니다. 문서의 내용 전체를 인덱스화해서 특정 키워드가 포함된 문서를 검색하는 전문(Full Text) 검색에는 InnoDB나 MyISAM 스토리지 엔진에서 제공하는 일반적인 용도의 B-Tree 인덱스를 사용할 수 ..