Tôi có một cơ sở dữ liệu lớn (16M hàng) chứa các hình ảnh băm nhận thức.
Tôi muốn có thể tìm kiếm các hàng bằng cách ham khoảng cách trong một khung thời gian hợp lý.
Hiện tại, theo như tôi hiểu đúng về vấn đề này, tôi nghĩ lựa chọn tốt nhất ở đây sẽ là triển khai SP-GiST tùy chỉnh thực hiện BK-Tree , nhưng có vẻ như rất nhiều công việc, và tôi vẫn còn mơ hồ về thực tế chi tiết thực hiện đúng một chỉ số tùy chỉnh. Tính khoảng cách Hamming là đủ dể làm, và tôi làm biết C, mặc dù.
Về cơ bản, cách tiếp cận phù hợp ở đây là gì? Tôi cần có thể truy vấn các kết quả khớp trong một khoảng cách chỉnh sửa nhất định của hàm băm. Theo tôi hiểu, khoảng cách Levenshtein với các chuỗi có độ dài bằng nhau là khoảng cách chức năng, do đó, có ít nhất một số hỗ trợ hiện có cho những gì tôi muốn, mặc dù không có cách rõ ràng nào để tạo chỉ mục từ đó (hãy nhớ, giá trị tôi đang truy vấn Tôi không thể tính toán trước khoảng cách từ một giá trị cố định, vì điều đó sẽ chỉ hữu ích cho một giá trị đó).
Các giá trị băm hiện được lưu trữ dưới dạng chuỗi 64 char chứa mã hóa nhị phân ASCII của hàm băm (ví dụ: "10010101 ..."), nhưng tôi có thể chuyển đổi chúng thành int64 đủ dễ dàng. Vấn đề thực sự là tôi cần có khả năng truy vấn tương đối nhanh.
Có vẻ như có thể đạt được điều gì đó theo những gì tôi muốn với pg_trgm
, nhưng tôi không rõ về cách thức hoạt động của trigram phù hợp với hoạt động (cụ thể là, số liệu tương tự mà nó trả về thực sự đại diện cho cái gì? loại giống như khoảng cách chỉnh sửa).
Hiệu suất chèn không quan trọng (rất tốn kém về mặt tính toán để tính băm cho mỗi hàng), vì vậy tôi chủ yếu quan tâm đến việc tìm kiếm.