2012-02-12 23 views
5

Xin chào trong hệ thống của tôi sẽ có một nút nút chính và nút số phụ, trong đó nút chính sẽ phân phối yêu cầu đến đến một trong các nút nô lệ của nó. Để sử dụng nội dung bộ nhớ đệm, tôi muốn theo dõi yêu cầu cuối cùng 50 (băm của yêu cầu đến) mà nút nô lệ đã được phục vụ (Giả định rằng yêu cầu 50 cuối cùng sẽ có trong bộ nhớ cache, Vì vậy, nút sẽ phục vụ yêu cầu nhanh). Theo như tôi nghiên cứu xóa là khó khăn trong bộ lọc nở. Nhưng nó cũng có thể được thực hiện bằng cách đếm bộ lọc. Là nó thực sự có thể để giữ cho các bộ lọc nở như một cửa sổ di chuyển (như sau 50 yêu cầu nó nên xóa từ kết thúc trước để phù hợp với yêu cầu mới). Là nó thực sự có thể làm như vậy hoặc là có bất kỳ bộ lọc khác như bộ lọc nở (mà phải đủ nhanh để kiểm tra sự hiện diện của phần tử).Bộ lọc Bloom để lưu trữ 50 nội dung dữ liệu cuối cùng một mình

Trả lời

5

Nếu bạn chỉ có 50 thứ mà bạn đang theo dõi, tôi không nghĩ rằng bộ lọc Bloom là cấu trúc dữ liệu thích hợp. Các bộ lọc Bloom rất tốt khi bạn có số lượng lớn nếu dữ liệu không thể lưu trữ trong bộ nhớ và muốn thực hiện lọc sơ bộ để loại bỏ các tra cứu không cần thiết trong một số cấu trúc dữ liệu từ xa, chẳng hạn như cơ sở dữ liệu từ xa. Nếu bạn chỉ có 50 phần tử, bạn gần như chắc chắn nên sử dụng thứ gì đó giống như bảng băm để lưu trữ các giá trị đó, vì bạn có thể nhận được câu trả lời chính xác trong thời gian O (1) dự kiến ​​với chi phí tối thiểu không gian.

Nếu bạn muốn theo dõi 50 phần tử cuối cùng bạn đã xem, hãy cân nhắc xem bảng băm được liên kết, hỗ trợ chèn, tra cứu, xóa và xóa tất cả trong thời gian O (1). Java của LinkedHashMap nên được tuyệt vời ở đây.

Hy vọng điều này sẽ hữu ích!

Các vấn đề liên quan