27

Tôi chưa sử dụng Dữ liệu Mùa xuân trước đây nhưng tôi đã sử dụng Hibernate ORM một số lần cho ứng dụng dựa trên MySQL. Tôi chỉ không hiểu khung công tác nào để lựa chọn giữa hai đối với một ứng dụng dựa trên MongoDB.Sự khác biệt giữa dữ liệu Spring MongoDB và Hibernate OGM cho MongoDB là gì?

Tôi đã thử tìm kiếm câu trả lời nhưng tôi không thể tìm thấy câu trả lời so sánh giữa hai yếu tố trong môi trường sản xuất. Có ai tìm thấy vấn đề làm việc với hai khuôn khổ với MongoDB?

Trả lời

39

Disclaimer: Tôi là người dẫn đầu của dự án dữ liệu mùa xuân, vì vậy tôi chủ yếu sẽ giới thiệu các phụ liệu mùa xuân thứ ở đây:

Tôi nghĩ rằng sự khác biệt then chốt giữa hai dự án ist mà nhóm Hibernate OGM chọn tập trung nỗ lực của họ xung quanh JPA trong khi nhóm dữ liệu mùa xuân một cách rõ ràng thì không. Lý do như sau:

  • JPA là một API quan hệ vốn có. Hai câu đầu tiên của trạng thái spec, đó là một API cho ánh xạ đối tượng-quan hệ. Điều này cũng được thể hiện trong các chủ đề cốt lõi của API: nó nói về các bảng, cột, kết nối, giao dịch. Các khái niệm không nhất thiết phải chuyển vào thế giới NoSQL.
  • Bạn thường chọn một cửa hàng NoSQL vì đó là các đặc điểm đặc biệt (ví dụ: truy vấn không gian địa lý trên MongoDB, có thể thực thi traversals đồ thị cho Neo4j). Không ai trong số họ (và sẽ được) có sẵn trong JPA, do đó bạn sẽ cần phải cung cấp phần mở rộng độc quyền anyway. Thậm chí tệ hơn, JPA có các khái niệm đơn giản sẽ hướng dẫn người dùng đi sai hướng nếu họ cho rằng họ làm việc trên một kho lưu trữ NoSQL như được định nghĩa trong JPA: một rollback giao dịch được triển khai hợp lý như thế nào trên một MongoDB?

Vì vậy, với dữ liệu mùa xuân, chúng tôi đã chọn để thay cung cấp một phù lập trình mô hình cho các cửa hàng được hỗ trợ nhưng không cố gắng ép buộc tất cả mọi thứ vào một quá trừu tượng API duy nhất: bạn sẽ có được triển khai mẫu nổi tiếng, bạn sẽ có được trừu tượng kho lưu trữ, hoạt động giống hệt với tất cả các cửa hàng nhưng chúng ta hãy tận dụng các tính năng và khái niệm cụ thể của cửa hàng.

+3

Dữ liệu mùa xuân là :) ... Thích làm việc với Spring nói chung ... Cảm ơn bạn đã trả lời câu hỏi của tôi. – hajime

13

Tuyên bố từ chối trách nhiệm: Tôi là một trong những nhà phát triển OGM Hibernate nên tôi sẽ cố gắng cung cấp một số lý do đằng sau nó.

OGM Hibernate cung cấp hỗ trợ Java Persistence (JPA) cho các giải pháp NoSQL. Nó sử dụng lại engine Hibernate ORM nhưng vẫn tiếp tục tồn tại trong kho dữ liệu NoSQL thay vì một cơ sở dữ liệu quan hệ. Nó cũng nhằm mục đích cung cấp quyền truy cập vào các tính năng kho dữ liệu cụ thể khi JPA không phù hợp.

Cách tiếp cận này là thú vị vì nhiều lý do:

  • Được biết đến ngữ nghĩa và các API. Các nhà phát triển Java đã quen thuộc với JPA, điều này có nghĩa là người ta sẽ không phải học API cấp thấp hơn. Nó cũng hỗ trợ cả HQL và các truy vấn backend gốc.

  • Lựa chọn cuối phụ trợ muộn. Việc chọn kho dữ liệu NoSQL đúng không phải là tầm thường. Với Hibernate OGM bạn sẽ không phải cam kết với một giải pháp NoSQL cụ thể và bạn sẽ có thể chuyển đổi và kiểm tra các phần mềm phụ trợ khác nhau một cách dễ dàng.

  • Các công cụ và thư viện hiện có. JPA và Hibernate ORM đã được khoảng một thời gian và bạn sẽ có thể sử dụng lại các thư viện và các công cụ sử dụng chúng bên dưới.

  • Hầu hết các mô hình hợp lý JPA đều phù hợp. Một ví dụ về sự phù hợp tốt là @Embedded, @EmbeddedCollection@Entity (có thể là nút, tài liệu hoặc bộ nhớ cache dựa trên kho dữ liệu bạn chọn). Phải thừa nhận rằng, tên chú thích có thể lạ vì bạn cũng sẽ phải xử lý @Table@Column.

  • JPA tóm tắt sự kiên trì ở cấp đối tượng, để lại rất nhiều thủ thuật và tối ưu hóa. Chúng tôi có một số ý tưởng đã được lên kế hoạch, như sự đa dạng về lâu dài: lưu trữ dữ liệu trong một số kho dữ liệu và sử dụng tốt nhất cho một công việc đọc cụ thể.

Hạn chế chính là một số khái niệm về JPA không dễ dàng được ánh xạ tới thế giới NoSQL: giao dịch chẳng hạn. Mặc dù bạn sẽ có quyền truy cập vào các phương thức phân giới giao dịch, bạn sẽ không thể khôi phục trên các cửa hàng dữ liệu không hỗ trợ giao dịch một cách tự nhiên (giao dịch, trong trường hợp này sẽ được sử dụng để nhóm hoạt động và cố gắng tối ưu hóa số lượng cuộc gọi đến db).

Ngoài ra, nếu tập dữ liệu của bạn là do tự nhiên không phải là mô hình miền trung tâm, thì Hibernate OGM không dành cho bạn.

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