기록하는 습관

검색 - Netflix GraphQL Search Indexing 정리 본문

개발

검색 - Netflix GraphQL Search Indexing 정리

로그뉴 2022. 7. 6. 17:31

분산 된 데이터 검색의 과제

문제: 느슨하게 결한 된 여러 독립 서비스에서 데이터를 검색하려고 함.

해결법

1.      모든 정보가 포함 된 단일 데이터베이스가 있다면 검색이 쉬울 것.

a.       문제점: 단일 데이터베이스에는 팀이 독립적으로 작업할 수 있는 유연성이 제한, 대규모 성능이 제한됨.

2.      데이터 자체 색인을 작성하는 사용자 지정 집계 서비스를 사용하는 것. 

 

 

데이터 인덱싱

GraphQL을 사용하여 데이터를 인덱싱 하려면?

-        GraphQL 쿼리를 업데이트 하여 관련 데이터를 검색한 다음 데이터베이스에 해당 쿼리를 한 번씩 호출해 결과를 ES에 색인화 할 수 있음

 

 

ES에는 데이터를 인덱싱 할 때 많은 사용자 정의 옵션이 있지만 대부분 기본 설정이 좋은 결과를 제공함.

 

GraphQL 쿼리를 사용해 스키마를 생성 할 때 좋은 점

1.      데이터에 의존하는 기존 클라이언트가 GraphQL 서버에서 가져온 것인지, 검색 인덱스에서 직접 가져온 것인지 관계 없이 동일한 모양의 데이터를 얻게 됨.

 

데이터를 최신 상태로 유지

-        Kafka에 데이터가 변경될 때마다 발생하는 이벤트가 있음.

-        GraphQL의 엔티티 관계를 사용해 재 인덱싱 해야하는 항목을 정확히 찾을 수 있음.

-        GraphQL에 대한 쿼리를 자동으로 생성해 변경된 데이터를 찾는 방식. -> 장점: GraphQL 스키마와 리졸버를 한 번 정의한 후에는 추가 작업이 없다는 것.

 

역 그래프 인덱스

검색 인덱서가 수행하는 3단계

1.      Fan out

2.      Search

3.      Indexing

Comments