2012-02-08 33 views
13

Tôi đã sử dụng RDBMS kể từ khi học đại học và thực sự đang gặp khó khăn với khái niệm cơ bản về cơ sở dữ liệu NoSQL ... nhưng tôi nghĩ khái niệm của họ thực sự tuyệt vời.Neo4j và ORM (Hibernate)

tôi tin Tôi hiểu như sau (xin vui lòng chính xác cho tôi nếu tôi là sai, bởi vì những đóng vào câu hỏi của tôi ở đây!):

  • NoSQL không phải là một số đặc điểm kỹ thuật chính thức; nó là một khái niệm cơ bản một "giống" mới của cơ sở dữ liệu mà không phải là quan hệ và không sử dụng SQL
  • Như vậy, mỗi hệ thống NoSQL là khác nhau (ví dụ, MongoDB là JSON-centric)

Nếu những là đúng, sau đó chúng ta hãy chuyển hướng sự chú ý của chúng ta đến Neo4j, một cơ sở dữ liệu "dựa trên đồ thị".

Sau khi xem xét trang web và PDF, có vẻ như Neo4j không chỉ là cơ sở dữ liệu, nhưng nó cũng cung cấp một API Java về cơ bản thay thế nhu cầu các công cụ ORM truyền thống như Hibernate.

Vì vậy, câu hỏi cuối cùng của tôi thực sự là một yêu cầu để làm rõ/xác nhận về điều đó khẳng định cuối cùng, cụ thể:

  • Có đúng là nếu backend của tôi là hoàn toàn Neo4j-based, rằng tôi sẽ không có nhu cầu Hibernate (đó là ORM thông thường của tôi)? Hai API này có loại trừ lẫn nhau hay có cách nào để hưởng lợi khi sử dụng cả hai API này?

Xin cảm ơn trước!

+0

Chỉnh sửa nhỏ không được giải quyết trong bất kỳ câu trả lời nào: NoSQL không ngụ ý rằng cơ sở dữ liệu không quan hệ. Hầu hết các cơ sở dữ liệu đồ thị được coi là NoSQL và mối quan hệ chưa là một khái niệm cơ bản trong cơ sở dữ liệu đồ thị. –

Trả lời

5

AFAIK, Hibernate là một khung công tác ánh xạ đối tượng/quan hệ chỉ hỗ trợ cơ sở dữ liệu giống SQL. Vì vậy, bạn sẽ không cần/có thể sử dụng nó nếu bạn sử dụng Neo4j, bạn sẽ sử dụng API của Neo4j thay thế.

Nhưng không có gì ngăn cản bạn sử dụng cả Neo4j và cơ sở dữ liệu SQL do đó trộn Hibernate và neo4j API (có khả năng lưu trữ/truy vấn các đối tượng khác nhau trong dự án của bạn).

Bạn đã kiểm tra các ví dụ cơ bản được cung cấp trên trang web Neo4j, chẳng hạn như http://docs.neo4j.org/chunked/snapshot/tutorials-java-embedded-hello-world.html?

EDIT:

Bạn nói đúng, NoSql không xác định một tiêu chuẩn cụ thể. Bạn có thể muốn xem giới thiệu (ngắn) này: http://martinfowler.com/articles/nosql-intro.pdf

+4

OGM Hibernate có thể sử dụng cơ sở dữ liệu NoSQL. – shaILU

+1

ngay, và bây giờ đặc biệt hỗ trợ Neo4J là tốt: http://in.relation.to/Bloggers/HibernateOGM400Beta4IsOut#H-InitialEmbeddedNeo4jIntegration (Mặc dù nó vẫn còn thử nghiệm) – Sanne

2

Vì @assylias cho biết bạn sẽ không thể sử dụng Hibernate làm ORM cho một DB đồ thị như Neo4J, nhưng có các giải pháp khác. Đầu tiên, bạn có thể sử dụng api Neo4J để lướt qua đồ thị và lấy Vertices và Edges, xem nó không phải là ORM để nó không vẽ các đỉnh và/hoặc các cạnh bạn lấy tới các thực thể tùy chỉnh của bạn như Hibernate. .

Đây có thể là giải pháp nhưng bạn sẽ kết thúc với mã được viết riêng cho Neo4J có api riêng, khác với cơ sở dữ liệu đồ thị khác (như OrientDB chẳng hạn) và tiếp tục với sự phát triển mà bạn có thể cần cách linh hoạt hơn để lấy dữ liệu và ánh xạ kết quả cho các đối tượng của bạn, vì vậy tôi đề nghị bạn xem xét ngăn xếp Tinkerpop (http://tinkerpop.com/) về cơ bản là một loạt các lớp apis và trừu tượng java để làm việc với cơ sở dữ liệu biểu đồ.

Bắt đầu xem Blueprint (http://blueprints.tinkerpop.com) là lớp trừu tượng trên các khái niệm chính của biểu đồ DB, vì vậy bạn có thể viết mã không phụ thuộc vào nhà cung cấp DB cụ thể, sau đó lấy hãy xem Khung (http://frames.tinkerpop.com/) một khung công tác ORM để ánh xạ các đối tượng tới các đỉnh và các cạnh và Gremlin (http://gremlin.tinkerpop.com/) một ngôn ngữ để dễ dàng truy vấn biểu đồ.

+1

+1 cho bản thiết kế và khung. Khung có lẽ là đóng cửa cho một hibernate như ORM bạn sẽ tìm thấy. Tuy nhiên, giống như tất cả các ORM, bạn sẽ có một hit khi nói đến hiệu suất với Frames. – Pridkett

7

Thay vì Hibernate, tôi sẽ xem http://www.springsource.org/spring-data/neo4j là chú thích được điều hướng, hỗ trợ bởi Spring và hoạt động rất tốt. Đây có phải là một cái gì đó để làm việc với?

8

Tôi đã sử dụng RDBMSes từ đại học và đang thực sự gặp khó khăn với các khái niệm cơ bản của cơ sở dữ liệu NoSQL ... nhưng tôi nghĩ rằng khái niệm của họ là thực sự mát mẻ.

Cơ sở dữ liệu đồ thị như Neo4j thể hiện một miền theo các đỉnh được kết nối với các đỉnh khác có cạnh. Một cạnh chứa đỉnh bắt đầu và kết thúc của nó. Mỗi đỉnh và cạnh có thể có một bản đồ các thuộc tính, các cặp khóa-giá trị có thể được sử dụng để lưu trữ thông tin bổ sung về các đỉnh và các cạnh. Bạn có thể, tất nhiên, mở rộng này với tên miền của riêng bạn, nhưng mọi thứ rất đơn giản để bắt đầu.

Để xem các khái niệm này hoạt động, tôi khuyên bạn nên sử dụng Getting Started Guide for Gremlin. Gremlin là một ngôn ngữ dành riêng cho miền để duyệt qua các biểu đồ hoạt động với Neo4j và một số cơ sở dữ liệu đồ thị khác. Gremlin là một cơ sở dữ liệu đồ thị những gì SQL là một cơ sở dữ liệu quan hệ.

Tôi không thể đề xuất Gremlin đủ mạnh trong khi bạn đang tìm hiểu về biểu đồ. Chỉ trong vài phút, bạn có thể hoạt động thông qua các hướng dẫn của Gremlin. Gremlin sẽ cung cấp cho bạn một REPL cho phép bạn thử nghiệm với các biểu đồ nhỏ và nhận được phản hồi ngay lập tức. Thậm chí nếu bạn không sử dụng Gremlin trong hệ thống sản xuất của mình, kiến ​​thức thu được tại REPL sẽ giúp bạn xác nhận các thiết kế của mình và có thể phục vụ như một tiền thân cho việc thử nghiệm và phát triển đơn vị nghiêm ngặt hơn.

Nếu bạn thích làm việc trực tiếp với API của Neo4j, thì traversal framework tutorial của họ sẽ hữu ích.

Có đúng là nếu backend của tôi là hoàn toàn Neo4j-based, rằng tôi sẽ không có nhu cầu về Hibernate (đó là ORM thông thường của tôi)?

Vì bạn là người mới đến Neo4j, tôi sẽ khuyên bạn nên tránh ORM cho đến khi bạn lần đầu tiên hiểu những gì các ORM cần phải làm cho bạn. Xem mức độ đau bạn thực sự sẽ trải nghiệm ánh xạ kết quả truy vấn của bạn đến miền của bạn. Nếu nỗi đau có thể được cải thiện bởi ORM, khung dữ liệu Spring-Data được Peter đề cập có thể hữu ích.

Trong mọi khả năng, có thể bạn sẽ ổn. Tôi đã làm việc trên một số dự án mà sự phức tạp ngẫu nhiên được giới thiệu bởi ORM vượt xa những lợi ích. Việc ánh xạ các kết quả truy vấn đến miền là không có cách nào là phần phức tạp nhất của hệ thống.

2

Tính đến phiên bản 4 beta, Hibernate OGM đã thêm hỗ trợ cho Neo4j:

tại Hibernate OGM có thể làm việc với Neo4j, một đầy đủ giao dịch bất động sản cơ sở dữ liệu đồ thị.

Cơ sở dữ liệu biểu đồ thể hiện dữ liệu dưới dạng hệ thống các nút được kết nối với nhau và nó hoạt động rất tốt khi bạn cần lưu trữ thông tin như mối quan hệ giữa những người trong mạng xã hội. Ví dụ: . Ngoài ra, trong biểu đồ thuộc tính , bạn cũng có thể thêm thuộc tính vào các yếu tố của biểu đồ.

OGG Hibernate ánh xạ một thực thể dưới dạng nút nơi thuộc tính của đối tượng trở thành thuộc tính của nút. Hiện tại, chúng tôi thêm một số thuộc tính bổ sung để chuyển đổi nút thành đối tượng nhưng chúng tôi đang có kế hoạch thay thế chúng bằng cách sử dụng cơ chế nhãn được thêm vào trong phiên bản Neo4j mới nhất.

Mối quan hệ giữa hai nút thể hiện mối liên hệ giữa hai thực thể. Hiện tại, một hiệp hội hai chiều yêu cầu hai mối quan hệ nhưng chúng tôi sẽ thay đổi điều này vì Neo4j có thể điều hướng một mối quan hệ theo cả hai hướng.

Việc tích hợp với Neo4j là thử nghiệm nhưng chúng tôi đang lập kế hoạch để sớm cải thiện việc này sớm hơn . Vui lòng cho chúng tôi biết suy nghĩ của bạn hoặc giúp chúng tôi cải thiện.

http://planet.jboss.org/post/hibernate_ogm_4_0_0_beta4_is_out

Nó vẫn ngày rất sớm và hỗ trợ ban đầu là khả năng cải thiện theo thời gian. Tôi đang trong quá trình cố gắng thiết lập và dùng thử. Tôi biết rằng cũng có một số Spring project có tích hợp tốt hơn.

0

Bạn đã cân nhắc sử dụng Ferma? Nó là một ORM cụ thể cho Graph Databases. Nó hỗ trợ tất cả các thương hiệu lớn bao gồm Neo4J. Đây là một mô tả từ dự án.

Ferma là một khung công tác mạnh mẽ đảm nhận vai trò tương tự như thư viện mô hình Đối tượng-quan hệ (ORM) cho cơ sở dữ liệu truyền thống. Ferma thường được gọi là thư viện Mô hình đồ thị đối tượng (OGM) và bản đồ các đối tượng Java trong các đồ thị như Vertex hoặc Edge. Trong ngắn nó cho phép lược đồ được xác định bằng cách sử dụng giao diện java và các lớp cung cấp mức trừu tượng để tương tác với biểu đồ cơ bản .