지각 해시 이미지를 포함하는 큰 데이터베이스 (16M 행)가 있습니다.
합리적인 시간 내에 해밍 거리 로 행을 검색하고 싶습니다 .
현재 문제를 올바르게 이해하는 한 여기에서 가장 좋은 옵션은 BK-Tree 를 구현하는 사용자 지정 SP-GiST 구현 이라고 생각하지만 많은 작업처럼 보이며 여전히 실용적입니다. 맞춤 색인을 올바르게 구현하는 데 대한 세부 정보 해밍 거리를 계산하는 것은 다루기 쉬운 충분하다, 나는 할 수 있지만, C를 알고있다.
기본적으로 여기에 적절한 접근 방법은 무엇입니까? 해시의 특정 편집 거리 내에서 일치 항목을 쿼리 할 수 있어야합니다. 내가 알고있는 것처럼, 같은 길이의 문자열 Levenshtein 거리가 기능적으로 거리를 해밍, 그래서 적어도이 몇 가지 내가 원하는에 대한 기존 지원은 (기억에서 명확한 방법은, 내가를 쿼리하고있어 값을 인덱스를 생성하지 않으려면하지만, 고정 값으로부터의 거리를 미리 계산할 수는 없습니다. 그 값은 해당 값에만 유용하기 때문입니다).
해시는 현재 해시의 이진 ASCII 인코딩 (예 : "10010101 ...")을 포함하는 64 자 문자열로 저장되지만 쉽게 int64로 변환 할 수 있습니다. 실제 문제는 상대적으로 빠른 쿼리가 가능해야한다는 것입니다.
내가 원하는 것의 선을 따라 무언가를 달성하는 것이 가능할 수있는 것처럼 보이지만 pg_trgm
trigram match mechamism이 어떻게 작동하는지 (특히, 반환되는 유사성 메트릭이 실제로 무엇을 나타내는 지) 약간 불분명합니다. 편집 거리와 같은 종류).
삽입 성능은 중요하지 않습니다 (각 행의 해시를 계산하는 데 계산 비용이 많이 듭니다). 나는 주로 검색에 관심이 있습니다.