2012-04-26 10 views
9

Tôi sắp xếp một ứng dụng Java EE thông thường trên jboss7 sẽ sử dụng JPA trong tầng dữ liệu. Tôi muốn làm cho ứng dụng này như vậy mà nó quy mô với tải. Trong khi nó là khá rõ ràng làm thế nào để quy mô lên tầng web: tạo ra nhiều máy hơn và ném chúng phía sau một cân bằng tải, mở rộng quy mô tầng dữ liệu là ít hơn như vậy.Chia tỷ lệ và phân cụm JPA

Tôi có thể tập hợp cơ sở dữ liệu của mình (MySQL). Stil, mà rời khỏi lớp JPA unclustered. Lý tưởng nhất, JPA sẽ mở rộng quy mô bằng cách sử dụng bộ nhớ đệm (cụm) bộ nhớ đệm được hỗ trợ bởi MySQL.

Khi tôi nhìn xung quanh, tất cả thông tin về quy mô JPA có vẻ là 3-4 năm tuổi. Mọi người nói về ehcache, memcached và infinispan. Tôi không chắc chắn nếu điều này vẫn còn hiện tại.

Ai đó có thể cho tôi biết trạng thái của nghệ thuật trong phân cụm và chia tỷ lệ Java EE, đặc biệt là ở cấp dữ liệu.

+0

Tôi có câu trả lời tuyệt vời từ Piotr và James.Thật không may SOF sẽ chỉ cho phép tôi đánh dấu một câu trả lời đúng. Cảm ơn cả hai nha. Tiếp theo, tôi cần phải tìm ra những gì tốt nhất của giống trong bộ nhớ đệm: Tại sao tôi sẽ sử dụng bất cứ điều gì nhưng memcached. – Raj

Trả lời

6

Các chiến lược lưu bộ nhớ cache khác nhau vẫn là cách để mở rộng JPA/Hibernate (về cơ bản bạn đã đặt tên cho các tùy chọn phổ biến nhất trong câu hỏi của mình). Không có gì đặc biệt xảy ra từ 4-5 năm trong lĩnh vực này, theo như tôi biết. Một tùy chọn khác mà bạn chưa đề cập là JBoss Cache. Vì vậy, Cache cấp hai cho JPA/Hibernate vẫn còn quy định trong lĩnh vực này.

Tại sao không có tiến bộ ở đây? Dự đoán hoang dã của tôi là trước hết mọi người, những người cần ứng dụng có khả năng mở rộng có xu hướng bỏ qua JPA và Hibernate ở những khu vực cần hiệu suất cao. Thông thường mọi người đi với SQL mặc bộ trợ giúp JDBCTemplate Spring Framework và quản lý giao dịch. Sau đó, khả năng mở rộng là vấn đề khả năng cơ sở dữ liệu trong lĩnh vực này.

Xu hướng khác là sử dụng cơ sở dữ liệu No-SQL. Có rất nhiều giải pháp: MongoDB, CouchoDB, Cassandra, Redis, để đặt tên một vài. Đây thường là Google BigTable như kho khóa giá trị (đây là sự đơn giản hóa, nhưng ít nhiều ý tưởng đằng sau cách tiếp cận đó) và quy mô là địa ngục, nếu bạn chấp nhận giới hạn của chúng (quan hệ không còn được quản lý dễ dàng, v.v.).

+0

Xin chào Piotr, Cảm ơn bạn đã phản hồi. Tôi quan tâm đến việc tìm hiểu thêm về người trợ giúp mẫu JDBC. Có con trỏ nào tốt không? – Raj

+0

http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/html/jdbc.html là một bài đọc tốt. Ngoài ra còn có những cuốn sách, "Spring in Action" là ok –

+0

Cảm ơn bạn đã liên kết, Piotr. – Raj

6

Có rất nhiều giải pháp, hai loại chính của giải pháp là:

  • rộng cơ sở dữ liệu
  • sử dụng một bộ nhớ cache clustered để giảm cơ sở dữ liệu tải

EclipseLink hỗ trợ phân vùng dữ liệu cho sharding dữ liệu trên một tập hợp các trường hợp cơ sở dữ liệu,

xem: http://java-persistence-performance.blogspot.com/2011/05/data-partitioning-scaling-database.html

Bạn cũng có thể sử dụng MySQL Cluster,

see: http://www.mysql.com/products/cluster/

Oracle TopLink lưới cung cấp hỗ trợ EclipseLink JPA để hội nhập với Oracle Coherence như một bộ nhớ cache phân phối,

see: http://www.oracle.com/technetwork/middleware/ias/tl-grid-097210.html

Bộ nhớ cache của EclipseLink hỗ trợ phân cụm thông qua phối hợp bộ nhớ cache,

xem: http://wiki.eclipse.org/EclipseLink/Examples/JPA/CacheCoordination

+0

Xin chào James, Cảm ơn bạn đã phản hồi. Chúng tôi muốn làm cả hai để quy mô và tránh bất kỳ điểm duy nhất của thất bại. Trong tất cả các điều tra của tôi, memcached có vẻ là "tốt nhất của giống": nó có hỗ trợ rộng và dường như có thể làm những gì bất kỳ bộ nhớ cache khác sẽ làm gì. Bạn nghĩ sao? – Raj