Elasticsearch 검색 가능 시점 #16
-
데이터를 조회 가능 시점이 메모리에 올라가고 나서인지, disk io 위에 올라가고 나서인지? |
Beta Was this translation helpful? Give feedback.
Replies: 2 comments 1 reply
-
@annie1004619 @guswns3371 @minseongkim97 거의 구석구석 다 뒤져봤는데요. 이 질문에 답을 포함한 곳이 없었습니다. 근데 생각해보니 당연한거 같은게 공식 홈페이지에도 "실시간에 준하는" 이런 말 뒤에 1초 정도 검색하는데 시간이 걸린다고 했습니다. 다들 봤죠?? 그리고 "apache lucene기반"이기 때문에 "인덱스 내의 샤드 내의 루씬 세그먼트 형태로 저장된다." 여기에 답은 elasticsearch가 아니라 루씬에 있는거 같습니다. 각각의 인덱스가 루씬 라이브러리를 각각 가지고 있다고 하네요 방금 글 쓰다가 검색하면서 해답을 찾았습니다.🤭 Lucene allows new segments to be written and opened—making the documents they contain visible to search—without performing a full commit. This is a much lighter process than a commit, and can be done frequently without ruining performance. 어제 미팅때 말했던 부분중에서 cache를 사용한다는건 맞았습니다!! 하지만 elastic search에서 하는 것이 아니라 lucene에서 해주는 것이었네요 |
Beta Was this translation helpful? Give feedback.
-
오 대박입니다!! 정리
es와 disk 중간에 filesystem buffer(인메모리 버퍼)가 존재한다.
답 : disk에 있는 segment 뿐만 아니라 메모리에 있는 segment도 검색이 가능하다. (The buffer contents have been written to a segment, which is searchable, but is not yet commited)
메모리 상의 segment를 disk에 저장하는 commit 작업은
잦은 commit으로 인한 성능저하를 막고 검색 결과를 빨리 제공하기 위함이다. |
Beta Was this translation helpful? Give feedback.
@annie1004619 @guswns3371 @minseongkim97
거의 구석구석 다 뒤져봤는데요. 이 질문에 답을 포함한 곳이 없었습니다.
근데 생각해보니 당연한거 같은게 공식 홈페이지에도 "실시간에 준하는" 이런 말 뒤에 1초 정도 검색하는데 시간이 걸린다고 했습니다. 다들 봤죠??
elasticsearch는 검색엔진이기 때문에 데이터베이스와 연결이 되어야 데이터를 불러서 읽어오니까요..
index를 걸어주는 것은 elasticsearch가 자동으로 해주기도 하지만 개발자가 직접 index를 거는 경우가 많다고 합니다.
그래서 제 생각은 데이터베이스에 저장된 것을 불러와서 데이터를 읽어오기 때문에 disk io에 저장된 값을 불러오지 않을까 입니다. (잘못된 생각🤣)
그리고 "apache lucene기반"이기 때문에 "인덱스 내의 샤드 내의 루씬 세그먼트 형태로 저장된다." 여기에 답은 elasticsearch가 아니라 루씬에 있는거 같습니다. 각각의 인덱스가 루씬 라이브러리를 각각 가지고 있다고 하네요
방금 글 쓰다가 검색하면서 해답을 찾았습니다.🤭
https://www.elastic.co/guide/en/elasticsearch/guide/current/near-real-time.html
Lucene allows new segments to be written and opened—making the document…