TIL

2022/10/20 TIL

mayleaf 2022. 10. 21. 01:52

루씬 인 액션

필수 확장 기능, 루씬을 포팅한 엔진, 라이브러리에 대한 소개, 성능 튜닝과 관련된 부분에 대해서 읽었다.

필수 확장 기능에서 기억에 남는 내용은 스팬 쿼리의 경우 성능이 좋지 않기 때문에(아마 토큰의 위치정보들을 훑어봐야하기 때문에, 도큐먼트 내부를 까보는 비용이 적지 않을 것 같다는 생각이다.) 쿼리 필터를 통해서 미리 검색 대상을 줄여두고 사용하는 것을 잊지 말아야한다는 내용이 기억에 남았다. 그리고 GeoCode 관련된 내용도 나왔다. 예전에 Firebase에서 제공해주는 FireStore에서 GeoHash를 사용했는데, 그때는 구글이 이런 알고리즘을 구상했구나 했는데, 그전에 이미 있었다는 것을 알게 되었다. 그리고 루씬을 포팅한 라이브러리 Clucene, dotLucene등에 대해서 소개받은 부분이 기억에 남고 엔진쪽에서는 PHP ZEND엔진에는 루씬이 내장되어있어서 필요하면 검색엔진을 바로 가져다가 쓸 수 있었던 점이 기억에 남았다. ZEND 엔진은 PHP 인터프리터인데, 인터프리터 내부에 이런 엔진을 넣어두기도 하는구나 싶었다. 성능 튜닝과 관련된 부분에서는 사실상 데이터베이스 서버를 운영할때의 팁을 많이 제공해주었다. SSD를 쓰면 성능개선이 커진다. 메모리를 크게 쓰면 인덱스가 메모리에 있을 확률이 높아진다. 실행할때 -server 옵션을 주면 JVM 기반에서 약간의 성능 개선을 이뤄준다. 쓰기를 진행할때 사용하는 Thread와 플러시 하기전에 더 많은 정보를 기다렸다 넣어주면 훨씬 빨라진다.

 

ConcurrentHashMap

최근에 한 면접에서 ThreadSafe한 자바 클래스에 대해서 아는게 있냐고 여쭤봤는데, ConcurrentHashMap과 HashTable이 생각난다고 말씀드렸다. 그리고 내부가 어떻게 돌아가는지 물어보셨는데, 그냥 속도가 더 빠른데, ThreadSafe도 보장이 된다. 이정도로만 알고 있었기 때문에 어떻게 돌아가는지 설명을 드리지 못했다. 그래서 오늘 ConcurrentHashMap에 대해서 찾아서 공부했다.

요약하면 세가지 특징이 있다. 첫 번째, 버킷을 나누어서 락을 걸어준다. 정확히는 처음에 32개의 버킷을 만들고, 각각의 버킷마다 synchronized 함수를 이용해서 락을 거는 것이다. 만약 같은 버킷이라면 락이 걸리겠지만 최대 32개의 쓰레드가 접근 가능하므로, 나머지 버킷에 대해서는 읽기와 쓰기가 가능할 것이다. 두 번째, HashTable과 다르게, 읽을때와 쓸때중 쓸때에만 락이 걸린다. 3. 로드펙터보다 더 많은 키를 사용하게된다면 새로운 해시맵을 만들어 버킷을 순차적으로 전송한다.

 

허클베리 핀의 모험

오늘은 180페이지까지 읽었다. 강물을 따라서 계속 핀은 아래로 내려가고 있다. 그리고 그 와중에 지나가던 마을에 들러서 도움도 받고, 난파선에서 서로 물어뜯고 싸우는 사람들의 짐을 훔치기도하고, 길을 잃었다가 둘이 싸우기도 한다.

마크 트웨인의 작품에는 미국 정신의 실체가 있다라는 말이 있다. 왜 그런건가 하는 생각해봤다. 시나리오를 보면 어떤 기승전결이나, 아직 중요한 인물을 못 만나서 그런가?하는 생각이 들었는데, 오늘 약간 감이 잡혔다.  허클베리 핀의 모험에서는 주인공과 조연 뿐만 아니라 지나가는 역할의 사람들도 등장하고 있다. 그 사람들은 각각 말하는 바나 생각하는 부분이 다르고, 주어진 상황에서 캐릭터의 모습을 오롯이 보여주고 사라진다. 이 사람들에게 미국인들의 다양한 모습을 넣어두고, 이런 사람도 있고, 저런 사람도 있구나 하는 것들을 알게 해준다 싶었다.

그리고 시나리오가 진행됨에 따라서 인물이 등장하고 사라지면서 변화하는 주인공의 모습을 통해서 이런식으로 주인공의 내면이 변화하는구나하는 생각을 통해서 약간 엿 볼 수 있었다는 생각이 들었다.

'TIL' 카테고리의 다른 글

2022/10/23 TIL  (0) 2022.10.24
2022/10/21 TIL  (0) 2022.10.22
2022/10/18 TIL  (0) 2022.10.18
2022/10/17 TIL  (0) 2022.10.18
2022/10/15 TIL  (0) 2022.10.17