Nếu dương tính giả được chấp nhận, thì một giải pháp có thể là sử dụng bloom filter. Các bộ lọc Bloom tương tự như các bảng băm, nhưng thay vì sử dụng một giá trị băm để lập chỉ mục một bảng các nhóm, nó sử dụng nhiều băm để lập chỉ mục một mảng bit. Các bit tương ứng với các chỉ số đó được thiết lập. Sau đó, để kiểm tra xem một chuỗi có nằm trong bộ lọc hay không, chuỗi được băm một lần nữa và nếu các chỉ mục tương ứng được đặt thì chuỗi đó là "trong" bộ lọc.
Nó không lưu trữ bất kỳ thông tin nào về các chuỗi, vì vậy nó sử dụng rất ít bộ nhớ - nhưng nếu có xung đột giữa hai chuỗi, không có độ phân giải xung đột nào là có thể. Điều này có nghĩa là có thể có các kết quả dương tính giả (vì một chuỗi không có trong bộ lọc có thể băm thành các chỉ mục giống như một chuỗi trong bộ lọc). Tuy nhiên, có thể không có âm bản sai; bất kỳ chuỗi nào thực sự nằm trong tập hợp sẽ được tìm thấy trong bộ lọc nở.
Có một số fewPythonimplementations. Nó cũng không khó để cuộn của riêng bạn; Tôi nhớ lại mã hóa một bộ lọc nở nhanh và bẩn ngay khi sử dụng bitarray
s đã hoạt động khá tốt.
Bạn có thể chịu đựng một số lần dương tính giả không? – senderle
Phủ định sai là không thể chấp nhận; thỉnh thoảng những kết quả dương tính giả có khả năng chấp nhận được. –
Chỉ cần lưu trữ tất cả trong một tập hợp 'và để cho trình quản lý bộ nhớ ảo của hệ điều hành nó vào đĩa khi cần thiết. Bạn cũng có thể lưu nó vào đĩa bằng cách sử dụng 'pickle'. Không cần phải xây dựng một cơ sở dữ liệu. – martineau