💽 데이터베이스

💽 데이터베이스

데이터베이스 인덱스 맛보기

🟩 랜덤 I/O와 순차 I/O 랜덤 I/O와 순차 I/O는 하드 디스크 드라이브의 원판을 돌려서 읽어야 합니다. 이때 데이터가 저장된 위치로 디스크 헤더(disk arm)를 이동시켜 데이터를 읽습니다. 순차 I/O는 디스크 헤더를 한 번만 움직이면 됩니다. 하지만 랜덤 I/O는 디스크 헤더를 데이터의 개수만큼 움직여야 합니다. 이처럼 랜덤 I/O는 읽을 데이터가 물리적으로 불연속하게 위치하기 때문에 순차 I/O에 비해서 작업에 더 큰 부하가 생깁니다. 일반적으로 쿼리를 튜닝한다는 말은 랜덤 I/O 자체를 줄여주는 것이 목적입니다. 즉, 랜덤 I/O를 줄인다는 것은 쿼리를 처리할 때 필요한 데이터만 읽도록 쿼리를 개선하는 것을 의미합니다. 디스크 성능은 얼마나 많은 데이터를 한 번에 기록하는가로 결정됩니다..

💽 데이터베이스

Connection 생성 비용이 비싸다고? 응 비싸더라

🚀 이번 포스팅 키워드 Pooling, No Pooling Connection Pool Connection Socket 💬 포스팅 흐름 요약 No Pooling과 Pooling을 iftop 툴을 이용해서 두 실행 속도를 비교하고 있었습니다. Connection Pool을 이용하느냐 마느냐에 차이였고 Connection 생성 비용이 비싸서 그렇다는 것은 많이 들어왔습니다. 데이터베이스 서버와 연결을 미리 해놓고 계속해서 재사용하는 말을 수도 없이 들어왔지만 실제로 눈으로 확인해보지 않았으니 이번 기회를 통해서 한 번 디버깅해보면서 연결되는 부분을 찾고 그 흐름을 파악할 수 있었습니다. No Pooling Connection Pool을 사용하지 않고 요청이 들어올 때마다 새로운 Connection을 생성합니..

💽 데이터베이스

태그 자동 완성 검색 기능에 인덱스를 걸어보자

🟩 태그 검색 진행 중인 프로젝트에서 태그를 검색하는 기능이 있다. 검색 바에 'ja'를 치면 'java', 'javascript', ... 이 나오면서 사용자가 태그 자동 완성을 사용하여 편리함을 제공하고 있다. 하지만 이런 검색 기능은 생각보다 많은 비용이 발생할 수 있다. 먼저 자동 완성 기능에 나오는 태그 목록은 모두 사용자에 의해서 만들어진 태그들이다. 즉, 언제든지 새로운 태그는 만들어질 수 있고 현재는 태그가 100개, 1000개 정도의 규모라고 해도 이후에 수십만, 수백만이 생길 가능성이 있다. 사실 그정도면 검색 엔진을 도입해야하는 수준이지 않을까 싶지만 인덱스를 학습하게 되면서 인덱스를 이용해서 쿼리 비용을 절감할 수 있을 거라 생각하고 실험해보려 한다. Î tag 테이블은 id, na..

hyena0608
'💽 데이터베이스' 카테고리의 글 목록