MariaDB에서 Foreign key constraint is incorrectly formed 에러가 나는 이유는 주로 다음과 같다. 1. 참조하는 테이블이 존재하지 않는 경우 외래 키 제약 조건을 만들 때 참조하는 테이블이 존재하지 않으면 해당 에러가 발생할 수 있다. 2. 참조하는 테이블 간에 데이터 타입이나 인코딩(charset), 정렬 방식, 참조하는 컬럼의 길이가 일치하지 않는 경우 발생 위 이미지에서 만약에 참조 테이블인 test.sys_id 의 테이블의 sys_id라는 컬럼의 조합이 utf8mb4_general_ci 가 아니거나 데이터 타입이 VARCHAR가 아니거나 길이가 50이 아닐 경우 발생할 수 있다. 3. 인덱스가 없는 경우 외래 키 제약 조건을 만들 때 참조하는 컬럼에 인덱스가..
당연히 ES에서도 RDB와 같이 Text, INT, LONG, DOUBLE ,Boolean 등의 다양한 데이터 타입을 가지고 있다. 그중 가장 중요하게 살펴볼 것은 text와 keyword 타입인데 이것에 대해서 먼저 정리해보도록 한다. 1. text type vs keyword type : 무슨차이일까? text와 keyword 둘다 문자열을 나타내기 위한 타입이지만 서로 다른 목적을 가지고 토큰이 생성된다. 1) Keyword Type keyword type은 Exact Matching을 위해 토큰이 생성된다. 어떠한 text data를 index에 저장할 때 indexing이 당연히 일어날 것이고 이때 keyword라는 타입으로 저장을 하겠다고 설계했다면 오른쪽과 같이 토큰이 생성된다. 반면 텍스트..
ES에서 적절한 샤드를 설정할 때 크게 고려해야할 것은 바로 색인(Indexing)성능과 검색(search)성능이다. 1. Indexing (데이터 적재) 성능 고려하기 이전 포스팅에서 ES에 데이터를 적재할 떄 색인(Indexing)이라는 작업을 하게되는데 이때 가장 CPU를 가장많이 잡아먹는 작업이 바로 Analyzer를 통해서 document를 분석하하고 inverted Index를 생성하는 작업이고 이것이 바로 ES에서의 Indexing이라고 하였다. 그러면 여기서 의문점이 생길 수 있을 것이다. indexing이 끝나서 프라이머리 샤드에 데이터를 저장하면 저장한 내용을 레플리카 샤드에도 반영해야하기 때문에 당연히 레플리카 샤드가 많아질 수록 색인성능을 저하시키지 않을까? 라고 생각해볼 수 있다...
ES의 검색과정에서 가장 중요하게 알고 있어야할 개념은 바로 'Inverted Index'이다. ES에서의 검색과정은 위와 같이 어떤 검색어가 들어오면 해당 검색어를 분석하고 그 검색어를 inverted Index 내에서 검색하여 그 결과를 표시해준다. 그럼 이 Inverted Index란 무엇일까? Inverted Index ES에서 Inverted Index란 문자열을 분석하고 난뒤 그 결과를 저장하고 있는 구조체를 말한다. 위 그림을 보면 현재 document 2개가 저장되어있는데 book이라는 문자열은 document 두개 모두 가지고 있기에 오른쪽 표와 같이 book 토근에 1,2 이렇게 구조화하여 저장할 수 있다. 또 kernel 이라는 문자열은 첫번재 document만 가지고 있기에 kern..
색인(Indexing)이란 문서를 분석하고 그것을 Storage에 저장하는 이러한 일련의 과정을 색인(Indexing)이라고 한다. RDB에서의 Indexing이라는 개념은 테이블의 동작속도를 높여주기위한 자료구조를 말하기에 RDB의 Idexing과는 차이가 있다. 이러한 색인(Indexing)과정은 프라이머리 샤드에서 일어나기 때문에 적절한 샤드의 개수 설정은 색인 성능(데이터 적재)에 많은 영향을 준다. 따라서 적절한 샤드의 개수가 색인(데이터 적재)성능을 향상시키는데 많은 영향을 끼친다.
ES에서의 인덱스(Index)란? ES에서의 Index는 RDB에서의 DB와 비슷한 개념으로 볼 수 있다. 즉 인덱스란 문서가 저장되는 논리적인 공간을 의미한다. 따라서 인덱스를 설계하는 것이 ElasticSearch를 사용하기 위해 고려해야하는 첫번째 단계이다. ES를 통해 로그를 수집하던 검색엔진으로 사용하던 문서들을 어떤 인덱스에 어떻게 저장할지 설계하는 것이 가장 중요하다. 도서관 자료 검색 시스템을 설계해야하는 상황을 가정해보자 그럼 위 그림과 같이 하나의 인덱스에 모든 자료를 저장하는 방법이 있을 수 있고 또는 도서관에서 관리하는 자료의 종류에 따라서 인덱스를 나누어서 저장할 수 도 있다. 따라서 사용패턴과 문서의 특성에 따라 알맞게 설계해야한다. 샤드(Shard)란? 문서가 저장되는 논리적인..