TIN - Postgres용 전문 검색

1 week ago 23

PlanetScale이 Postgres 전문 검색 확장 TIN(Text INdex) 을 정식 출시함. PlanetScale의 모든 Postgres 및 Neki 데이터베이스에서 사용할 수 있음 불리언/구문/스팬 검색, 퍼지/와일드카드/정규식 매칭부터 COUNT(*)와 BM25 상위 결과 검색까지 지원함 PlanetScale 자체 벤치마크의 혼합 검색에서 TIN은 ParadeDB보다 처리량이 25배 높고 p99 지연 시간이 26배 낮았음. 85GB, 1억 5,000만 문서와 합성 질의를 사용한 특정 환경의 측정값임 문서 식별자로 Postgres의 ctid를 직접 사용해 별도 식별자 변환을 없애고, 2단계 비트맵과 CPU 벡터 연산으로 검색에 필요한 데이터 읽기와 연산을 줄임 MVCC 가시성 검사를 검색 내부에서 최적화하고, 세그먼트 병합 시 기존 비트맵을 재사용함. 동시 갱신 벤치마크에서도 초당 수백 건의 업데이트를 처리하면서 검색 성능 하락을 작게 유지함 지원 기능과 활용 방식 TIN은 고객 요청이 많았던 Postgres 전문 검색을 위한 확장으로, 정식 버전 사용 가이드를 제공함 CREATE INDEX ... USING tin(text_column_name)으로 인덱스를 만들고, text_column_name ==> 'some words' 형태로 검색함 검색 기능은 불리언 표현식, 구문 검색, 스팬 검색과 용어 단위 퍼지/와일드카드/정규식 매칭을 지원함 대소문자와 악센트 차이를 정규화하며, COUNT(*)와 BM25 점수 기반 상위 k개 검색을 지원함 전문 검색과 다른 열의 조건을 결합한 복잡한 WHERE, 조인, 지속적인 갱신, 복제, 백업, 올바른 트랜잭션 가시성까지 처리함 활용 사례는 순위 검색, 전체 일치 문서 반환, 정확한 개수 집계로 나뉨 전자상거래에서는 stretch denim jeans의 모든 단어가 들어간 상품을 tin.score(ctid) 내림차순으로 정렬해 상위 10개를 가져올 수 있음 법률 증거 수집에서는 [insider trading conspiracy]처럼 여러 키워드 중 하나 이상을 포함한 이메일을 순위 없이 모두 반환할 수 있음 사진 태그 검색에서는 "san francisco" 구문과 일치하는 사진 수를 정확히 셀 수 있음 검색을 계속 수행하는 동안에도 문서를 삽입/수정/삭제할 수 있어야 하며, 커밋된 변경 사항은 즉시 검색에 반영돼야 함 벤치마크 데이터와 측정 조건 시험한 데...

Read Entire Article