[대규모 서비스를 지탱하는 기술] 14장. 용도특화형 인덱싱

June·2021년 12월 27일
0

인덱스와 시스템 구성 - RDBMS의 한계가 보일 때

배치 처리로 RDBMS에서 데이터를 추출해서 별도의 인덱스 서버와 같은 것을 만들고, 이 인덱스 서버에 웹 애플리케이션에서 RPC(Remote Prodecude Call) 등으로 액세스하는 방법을 사용한다.

RPC, 웹 API

위 그림을 보자. DB(1)에서 정기적으로 3시간에 1번처럼 cron 등으로 데이터를 추출해서 인덱스 서버로 넘긴다. 인덱스로는 [2]에서 검색용 역 인덱스를 만들어준다. [3]AP 서버에서는 인덱스를 갖고 있는 [2]인덱스 서버에 RPC로 액세스한다. RPC는 Remote Procedure Call을 의미하는데, 요즘은 웹 API라고 부르고는 한다.

그림을 조금 바꿔보자. 인덱스를 갖고 있는 서버[2]에 웹 서버를 실행하고 여기에 무언가를 검색해서 JSON을 반환하는 애플리케이션을 만들고[4], [3]에서는 웹 API로 JSON에 엑세스한다.

[3]AP 서버에 인덱스를 직접 저장하지 않는 이유는 [3]에 충분한 메모리가 탑재되어 있지 않은 경우가 많기 때문이다. 또한 AP 서버의 아키텍처 면에서 볼 때 커다란 검색 인덱스를 여러 프로세스에서 같이 사용하도록 구성하는 것은 적합하지 않다. 뿐만 아니라 [3]이 20대 가량 있을 경우는 20대에 전부 인덱스를 갖고 있도록 하는 것이 큰일인 이유도 있다. 그래서 인덱스 전용 서버에서 처리하도록 하는 것이다.

RDBMS로는 한계, 그럴 때는?

  • 배치 처리로 데이터 추출
  • 별도 인덱스 서버를 만들어서 웹 API 등으로 쿼리

용도특화형 인덱싱 - 튜닝한 데이터 구조 사용하기

이상과 같은 방법을 용도특화형 인덱싱이라고 한다. 뭔가 특정한 목적으로만 사용하고자 할 때는 특정한 목적만으로 사용할 수 있도록 튜닝한 데이터 구조를 사용하면 압도적으로 빠르다. 이것이 바로 용도특화형 인덱싱이다.

검색에서 역 인덱스가 그 전형적인 예로, 자연언어처리와 같은 처리를 미리 한 다음 인덱스를 만들어두면 RDBMS로 데이터를 전부 순회하지 않아도 순식간에 검색할 수 있다.

0개의 댓글