엘라스틱 서치란?
세이배논 - 엘라스틱 사가 개발 (2010년에 발표)
오픈소스 인덱싱엔진 아파치 루씬 기반 (더그 커팅의 전문 ><)
- 빅데이터 기술의 아버지 더그 커팅이 개발
- 솔라/티카에서도 사용
- → 루씬이라는 걸 기반으로 만든것 중에 유명한게 ES인거임!
자바기반
- -->사용/개발하려면 JDK를 깔아야 한다!
- 루씬/엘라스틱서치
- 플랫폼을 가리지 않고 지원 가능
실시간 분석
- 색인 작업이 끝나면 바로 검색가능
- 원래, 인터넷 검색엔진은 리얼 타임 일수가 없음, 인터넷에서 긁어온다고 하면 인터넷멈춤..
- 배치 잡에 가까움! 크롤링을 하고 인덱싱 작업을 해서 인터넷에 뿌려주는 거임!
분산시스템
- Scaliability/Scale-out (ES의 젤 중요한 특징중에 하나)
- → DB는 용량이 커지면 이거 어카나 문제가 되는데 ES는 걍 서버 갖다붙이면 해결!!
- 동일한 서버를 계속 추가해서 용량/성능을 확장
높은 가용성(HA)
- 서버는 무슨 짓을 해도 죽는다.. 당연히 죽는게 순리..ㅠ… 하지만 서버 한대는 죽을수 있어도 전체 서비스가 죽으면 안된다!
- HA를 DB에서 쓸라면 겁나 비쌋다. 이게 되는 DB가격이 비싼거임
- 뭐 비슷한게 RAID 개념이라던지 …
멀티 태넌시
- 따로따로 되어있는걸 분리 검색해서 합쳐주는거
- 검색엔진에서는 꼭 필요한 기술
- 한번 검색하면 메일이나 사이트나 등의 내용들도 보여줌
전문검색
Json문서 기반(핵중요!!)
- Json Only
- 입출력 전부를 json 기반으로 한다
Restful API
- CRUD
- Http와 json을 사용한 입출력 및 제어
Json(Javascript Object Notation)
- JS에서 파생됨
- key/value 구조
- 자바의 콜렉션(Collection)
- 맵(Map), 해시맵(HashMap)...
- 배열과 달리 별도의 인덱스를 유지하지 않음
- 배열([])과 오브젝트({})가 반복(Nested)되는 구조
- []:Blacket, {}:브레이스
- NoSQL과 빅데이터(하둡)에서 많이 사용
- ES에서는 모든 자료구조가 json이어야함
- cf.
- 반드시 required/mandatory/compulsory
- 가급적이면 recommended
- 옵션 optional
- cf.
- 데이터의 형태
- 정형데이터
- DB가 대표적인 정형데이터
- 정해진 형태의 데이터
- 특정 컬럽값이 존재하거나 NULL
- 예) SQL의 DDL(Data Definition Language)
- 반정형데이터
- 특정 컬럼이 존재할 수도, 없을 수도 있슴
- 약간의 자유도
- 예) NoSQL, 빅데이터, …Json!
- → 정형데이터는 컬럼은 있지만 데이터가 있을수도,ㅇ ㅓㅄ을수도 있는곡, 반정형데이터는 컬럼이 이씅ㄹ수도 없을 수도 있다는거!
- 예) SNS 카톡아이디, 무슨ㅇ ㅏ이디 쓸꺼야~? 컬럼을 다 넣어놓울수 없음
- 비정형데이터
- 특정한 스키마가 존재하지 않음
- 예) 검색엔진 -- 걍 텍스트임
- 스키마리스(Schemaless) 또는 Schema Free 라는 용어로 사용한다 → 반정형/비정형 데이터
- XML보다 간편한 표기 및 사용법 → 제일 중요한 특징 ! SIMPLE하다!
Restful API
- CRUD
- HTTP Method에 대응
- PUT(Create), GET(Retrieve), POST(Update), DELETE(Delete)
- 엘라스틱서치에서 주로 사용
사용하기 위해서 전용 프로그램 필요
- Curl
- Postman(Chrome Extension)
형식
샘플