2012-08-13 15 views
7

Tôi đang tìm một bộ đệm liên tục đơn giản dưới dạng lưu trữ tạm thời cho các thư JSON trong một ứng dụng Java. Việc sử dụng bộ nhớ nên tương đối không đổi và không phụ thuộc vào số lượng thư trong bộ đệm. Thật tuyệt khi có thể phát lại tin nhắn từ một điểm trong quá khứ. Việc xóa tin nhắn cũ sẽ hiệu quả. Cần có khả năng xử lý tin nhắn 1m/h.Tìm bộ đệm tin nhắn liên tục đơn giản trong Java

Hiện tại, ứng dụng của tôi sử dụng một nhà môi giới RabbitMQ địa phương để chuyển tin nhắn đến một nhà môi giới RabbitMQ từ xa. Khi nhà môi giới từ xa ngừng hoạt động hoặc không chấp nhận tin nhắn, mức sử dụng bộ nhớ của nhà môi giới RabbitMQ tại địa phương tăng lên với độ dài hàng đợi và cuối cùng nó ngừng nhận tin nhắn. Tôi muốn trao đổi điều này cho một bộ đệm dựa trên đĩa cục bộ và một thông điệp sao chép luồng tới nhà môi giới RabbitMQ từ xa.

Bất kỳ ai có ý tưởng nào? Tôi đã nhìn Kafka nhưng có vẻ như quá mức cần thiết cho trường hợp sử dụng của tôi. MongoDB là một khả năng nhưng tôi lo lắng về việc sử dụng bộ nhớ của nó.

+0

Không chắc chắn nhưng có thể là Redis? Nó hỗ trợ pub/sub cũng ... –

+0

redis là blazing nhanh nhưng cần rất nhiều bộ nhớ. kiểm tra điều này. http://nosql.mypopescu.com/post/1010844204/redis-memory-usage –

+0

Bạn có thể xem xét một cái gì đó như https://github.com/peter-lawrey/Java-Chronicle Được thiết kế để hỗ trợ hơn 10 triệu tin nhắn mỗi giây nhưng bạn phải xoay các tệp để xóa chúng. –

Trả lời

2

Sử dụng bộ nhớ luôn là vấn đề trong bất kỳ hệ thống nào. Tôi đang sử dụng MongoDB để sản xuất và khi tôi so sánh với các giải pháp tương tự (CouchDB, CouchBase, redis.io), MongoDB thực sự tốt trong quản lý bộ nhớ và tính dễ thực hiện. Nhưng tôi phải thừa nhận, tôi chưa bao giờ có cơ hội để kiểm tra chi tiết hơn về Riak.

Tôi đang lưu trữ 5.000.000 bản ghi người dùng với 4 trường chỉ mục và tất cả phiên người dùng phía sau api còn lại/dịch vụ web sử dụng dịch vụ nhắn tin phía sau.

Dịch vụ nhắn tin của tôi sử dụng một phiên bản db khác trên cùng một máy chủ. Hồ sơ người dùng của tôi có ít nhất 20 trường và bản ghi phiên chỉ có 5 trường. Máy chủ ubuntu của tôi không bao giờ sử dụng hơn 10 GB rams ngay cả với quá trình tải nặng.

Hy vọng điều này sẽ giúp bạn tìm ra.

ps: tất cả đều phụ thuộc vào mô hình dữ liệu và cách bạn triển khai cơ sở hạ tầng của mình.

Kính trọng,

EDIT:

Tôi nghĩ this là một trình chiếu tốt về việc sử dụng MongoDB để nhắn tin.

và đẹp article về MongoDB và nhắn tin.

Bạn có thể sử dụng mã kiểm tra và xem kết quả phù hợp với giải pháp của mình. Xin đừng quên chia sẻ kết quả của bạn nếu bạn kiểm tra.

+1

Tôi đã kết thúc bằng cách viết một máy chủ hàng đợi tin nhắn liên tục với các công cụ phát lại chúng tôi cần. Thanh toán http // qdb.io / –

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