week-with-me / TWIL

This Week I Learned ✍️
https://twil.weekwith.me
1 stars 8 forks source link

ES7 - 엘라스틱서치의 구성요소 - TWIL #54

Open utterances-bot opened 2 years ago

utterances-bot commented 2 years ago

ES7 - 엘라스틱서치의 구성요소 - TWIL

This Week I Learned, TWIL

https://twil.weekwith.me/4%EA%B8%B0/%EC%84%B1%EC%8A%B9%EC%9D%B5/2021-12-19-%EC%97%98%EB%9D%BC%EC%8A%A4%ED%8B%B1%EC%84%9C%EC%B9%98%EC%9D%98%20%EA%B5%AC%EC%84%B1%EC%9A%94%EC%86%8C%EB%93%A4/

0417taehyun commented 2 years ago

글 잘 읽었습니다!

SQL과 비교하여 NoSQL의 특징 중 하나를 스키마-레스(Schema-Less)로 알고 있는데 매핑(Mappin)을 통해 일종의 스키마를 구현하는 이유가 무엇인가요? 매핑을 하지 않더라도 동적으로 데이터가 저장될 수는 있으나 Elasticsearch를 사용하는 대부분의 경우 매핑을 해준다는 것처럼 되어 있어서 궁금하여 여쭤봅니다.

또한 동적 매핑(Dynamic Mapping)에 관한 설명이 조금 더 자세히 있었으면 좋았을 것 같습니다. 예를 들어 문자열의 경우 text 필드로 매핑이 되는 것으로 제가 알고 있는데 맞는 지 궁금하네요. 이를 확장해서 이야기하자면 동적 매핑을 사용하는 예시가 적혀져 있었으면 좋았을 것 같아요. 개인적으로 NoSQL의 경우 조금 유연한 데이터 관리를 하기 위해 선택하기 때문에 Elasticsearch에서도 동적 매핑을 많이 활용할 것 같다는 느낌을 받았기 때문입니다.

MySQL과 직접 매칭하여 비교해주셔서 조금 더 이해하기가 편했습니다. 좋은 글 감사합니다!

iksflow commented 2 years ago

태현님 덕분에 schemaless 라는 용어를 알게됐네요 ㅎㅎ 스키마를 구현하는 이유는 저도 정확히 설명하기는 어렵지만 최적화를 위해서는 포맷이 필요하기 때문이 아닐까 하는 생각이 들어요! 예를 들면 배열을 빠르게 탐색하기 위해 정렬하는것처럼 말이죠. 만약 데이터에 타입이 없이 문자열로만 저장한다면 “1”, “11”, “2” 를 어떤 순서로 정렬해야할까요? 숫자 기준으로는 1,2,11 이고 문자열 기준으로는 1,11,2 가 되겠죠? elastic search는 데이터를 빠르게 검색하는것이 장점이니 당연히 정렬을 위해 포맷(스키마)가 필요할 거라 생각합니다! 얘기하신 스키마리스에 대해 찾아봤는데 아래 링크에 잘 나와있네요! schemaless라는 의미는 최소한의 부분스키마를 사용하는것을 의미하는것 같아요. https://stackoverflow.com/questions/15589184/what-does-being-schema-less-mean-for-a-nosql-database

그리고 문자열 같은경우에는 말씀하신 text와 keyword 타입이 있는데 text는 부분 일치의 경우에도 결과를 return하고 keyword는 완전 일치시에만 결과를 return 합니다. 이를 검증하려면 데이터를 insert하고 read하는 과정을 검증해야하기 때문에 CRUD 내용까지 작성해야 했어요 😭 그래서 분량조절 차원에서 분리하게 되었습니다! ㅎㅎ 기회가 되면 나중에 말씀하신 부분도 자세히 다뤄볼게요! 피드백 감사합니다 ☺️

jamieintech commented 2 years ago

오 엘라스틱서치! 이 친구도 공부해야하는 주제 중 하나인데 여기서 보니 너무 반갑네요ㅎㅎ 정말 깔끔하게 ES7의 구성요소에 대해서 작성해주신 것 같습니다! 약간 아쉬운 점이 있다면 각 요소에 대한 실제 예시나 화면같은 게 있다면 조금 더 이해가 잘 되지 않았을까? 하는 점입니다. 그래도 MySQL과 각각 비교를 해주셔서 MySQL을 아는 입장에선 바로 캐치하기가 쉬웠습니다 :D

ES7을 콕 집어서 설명을 해주셨는데, MySQL말고 구 버전의 ES랑도 어떤 차이가 있는지 있었다면 더 재밌을 것 같습니다! 좋은 글 갑사합니다 :)