Tôi có một dự án theo dõi thông tin trạng thái trong hơn 500 nghìn đối tượng, chương trình nhận được 10k cập nhật/giây về các đối tượng này, các bản cập nhật bao gồm các hoạt động mới, cập nhật hoặc xóa.DelayQueue với tốc độ cao hơn remove()?
Là một phần của chương trình giữ nhà phải được thực hiện trên các đối tượng này khoảng mỗi năm phút, cho mục đích này tôi đã đặt chúng trong một DelayQueue
thực hiện giao diện Delayed
, cho phép các chức năng chặn của DelayQueue
để kiểm soát giữ nhà những vật thể này.
Khi mới, một đối tượng được đặt trên
DelayQueue
.Khi cập nhật, đối tượng là
remove()
'd từDelayQueue
, được cập nhật và sau đó được đặt lại ở vị trí mới được quyết định bởi thông tin được cập nhật.Khi xóa, đối tượng là
remove()
'd từDelayQueue
.
Vấn đề tôi đang gặp phải là phương thức remove()
sẽ trở thành hoạt động lâu dài khi hàng đợi vượt qua các đối tượng 450k.
Chương trình đa luồng, một chủ đề xử lý các cập nhật và một luồng khác được giữ lại. Do sự chậm trễ remove()
, chúng tôi gặp phải các vấn đề về hiệu suất khóa khó chịu và cuối cùng bộ đệm của chủ đề cập nhật sẽ tiêu thụ tất cả không gian lưu trữ.
Tôi đã cố gắng giải quyết vấn đề này bằng cách tạo một DelayedWeakReference (extends WeakReference implements Delayed)
, cho phép tôi để các đối tượng "bóng" trong hàng đợi cho đến khi chúng hết hạn bình thường.
Điều này sẽ giải quyết vấn đề hiệu suất, nhưng làm tăng đáng kể yêu cầu bộ nhớ. Thực hiện kết quả này trong khoảng 5 DelayedWeakReference
cho mọi đối tượng thực sự cần phải nằm trong hàng đợi.
Có ai biết về số DelayQueue
có theo dõi bổ sung cho phép hoạt động nhanh chóng remove()
không? Hoặc có bất kỳ đề xuất nào về cách xử lý tốt hơn mà không tốn nhiều bộ nhớ hơn?
Chỉ cần tò mò ... nhưng điều này là gì (ngoài vấn đề kỹ thuật)? –
Nó là một công cụ để xử lý nội dung của các bảng trạng thái tường lửa, nó lấy một đầu ra văn bản từ một tường lửa và xây dựng lại bảng trạng thái trong bộ nhớ. Điều này cho phép bạn thực hiện nhiều thao tác và phân tích, và quan trọng hơn là xuất thông tin ở định dạng khác thường xuyên, xuất khẩu sự khác biệt kể từ lần cập nhật cuối cùng, như được sử dụng trong NetFlow. – CuddlyDragon