2012-01-09 68 views
9

Chúng tôi có một ứng dụng web JAVA sử dụng postgres (cơ sở dữ liệu đơn với một nô lệ) để lưu trữ tất cả các dữ liệu quan trọng.Redis, Mongo hoặc Hazelcast?

Chúng tôi hiện đang di chuyển từ một thiết lập máy chủ đơn lẻ sang các máy chủ khác nhau do đó tôi cần thực hiện một số thay đổi để giải quyết các yêu cầu mới.

1) Id phiên không dính cho cân bằng tải và dung sai phân vùng.

2) Bộ nhớ cache của dữ liệu đọc thường xuyên có thể truy cập từ tất cả các máy chủ web (Trong bộ nhớ/Memcache thay thế).

3) Hàng đợi (Email, SMS, Công việc để thực hiện trên cụm). Thông thường tất cả chúng phải được thực hiện trên một api xml hoặc cạo màn hình.
Tránh xử lý trùng lặp nhiệm vụ là quan trọng nhưng đôi khi nó có thể xảy ra :-)

4) Lưu trữ liên tục các yêu cầu API và phản hồi (nhiều XML, nhiều hàng nhưng số lượng cột nhỏ). (có thể lưu trữ bằng cách xóa các yêu cầu và phản hồi cũ để giữ cho tập dữ liệu nhỏ).

5) Đăng nhập vào một địa điểm chung. Bảng sẽ tiếp tục phát triển. Ngoài ra tôi sẽ cần một công cụ để truy cập các bản ghi của sản xuất mà không ngăn chặn chúng. Một số loại tìm kiếm nên có thể dựa trên thời gian và hoặc chuỗi tìm kiếm.

Tôi muốn một giải pháp duy nhất để giải quyết tất cả các yêu cầu này và xem xét redis, mongo và hazelcast (theo thứ tự sở thích cá nhân của tôi) là các lựa chọn thay thế có thể.

Các cân nhắc quan trọng khác: 1) Ít xâm nhập vào mã của chúng tôi. 2) Dễ dàng sao lưu/nhân rộng chiến lược. Ít nhất là Master Slave. 3) Khả năng quản lý, Cộng đồng và đã được thử nghiệm và kiểm tra (chạy trong sản xuất).

Điều gì sẽ có thể thực hiện tất cả hoặc hầu hết các tính năng và yêu cầu này?

EDIT - Những gì tôi đã làm

  1. Redis hỗ trợ quản lý phiên làm việc cho tomact.
  2. Redis cho bộ nhớ đệm
  3. Jesque (Phiên bản java của Respue) được hỗ trợ bởi redis.
  4. Postgres
  5. SLF4J được hỗ trợ bởi Log4j2

Trả lời

4

tôi có thể giải quyết một số những từ quan điểm MongoDB của.

Điều đầu tiên tôi nhận thấy là bạn đang di chuyển từ một thiết lập máy chủ đơn lẻ sang thiết lập nhiều máy chủ. MongoDB làm cho nó cực kỳ dễ dàng để thiết lập sao chép và sharding. Đổi lại, nhân rộng và sharding, cùng với một số tính năng khác của Mongo, có thể giúp bạn đạt được rất nhiều những gì bạn đang đặt ra để làm.

Đầu tiên, hãy xem tài liệu cho một chút để có được một cảm giác về nó:

Replica SetsSharding

Một số suy nghĩ khác dựa trên yêu cầu của bạn:

  • So với khác các phương pháp nhân rộng với các kho dữ liệu khác nhau phương pháp theo chiều ngang của mongo với phần cứng hàng hóa là rất đơn giản để thiết lập, mở rộng và duy trì. Điều này có nghĩa là bạn có thể chi tiêu thêm thời gian để xây dựng ứng dụng của mình thay vì trở thành DBA.
  • Bạn cũng có thể bỏ qua lớp lưu trong bộ nhớ cache nếu bạn đi với mongo. MongoDB sử dụng các tệp ánh xạ bộ nhớ có nghĩa là nếu bộ làm việc của bạn có thể được giữ trong bộ nhớ vật lý, bạn về cơ bản có bộ nhớ cache rồi.
  • MongoDB rất tốt cho việc ghi nhật ký. Người dùng thường không cần an toàn viết cho loại ứng dụng này vì vậy hiệu suất sẽ tuyệt vời nếu bạn gắn bó với mô hình lửa và quên mặc định để viết.
  • Cho dù điều này có nghĩa là nó sẽ xâm nhập vào mã của bạn ít hơn là để tranh luận, tuy nhiên, so với những gì một người lập bản đồ đối tượng điển hình làm, Mongo là ít xâm nhập dữ liệu của bạn. Nó có thể lưu trữ dữ liệu trong trạng thái có thể sử dụng tự nhiên của nó, đối tượng!

Hy vọng sẽ giúp, chúc mừng.

+0

Hiện tại tôi không quan tâm đến cơ sở dữ liệu được phân phối. Mongo có vẻ giống như một đối thủ sau tương lai khi chúng ta cần phải mở rộng quy mô. – gladiator

2

Tôi sẽ nói sử dụng sql. Vì bạn muốn mọi thứ mà các cơ sở dữ liệu quan hệ đã được hoàn thiện trong nhiều năm. Theo như tôi thấy bạn muốn có một giải pháp dữ liệu không cho mục đích "cụ thể" (thats NOSQL cố gắng để trang trải) nhưng cho "tất cả-trong-một" kịch bản. Đó là những gì SQL cho.

Mongodb sẽ là kho lưu trữ dữ liệu gần nhất nếu bạn muốn lựa chọn từ những 3 bạn đang đặt tên, nhưng một lần nữa: sử dụng sql.

0

Bạn chính xác là Redis sẽ giải quyết 3 yêu cầu đầu tiên - các phiên không dính, bộ nhớ cache và hàng đợi.

Đối với ghi nhật ký tập trung, nó không phải là trường hợp sử dụng tầm thường nhưng có thể được thực hiện trên Redis, đây là số blog post giải thích cách thực hiện. Lưu ý rằng NoSQL guru Alex Popescu đặt ra một số đặt phòng về cách tiếp cận trong this post.

Vì sự kiên trì, đây là tổng quan về Redis.io của persistence options - có một số vấn đề nhưng có thể thực hiện được.