2011-11-22 51 views
12

Tôi hơi bối rối về giải pháp tốt nhất cho ứng dụng của tôi là gì. Như tôi đã thấy cho đến nay, tôi phải chọn giữa neo4j độc lập (RestGraphDatabase) và một EmbeddedGraphDatabase (RemoteGraphDatabase không dành cho việc sử dụng sản xuất).Máy chủ Neo4j và được nhúng

Ưu REST:

-> Các dịch vụ khác nhau có thể truy cập vào neo4j DB (mẫu: tôi có một dịch vụ mà có trách nhiệm Nodes thuộc loại A, B và C. Các dịch vụ thứ hai là chịu trách nhiệm cho các nút D và H và có thể kết nối các nút D thành nút A). Theo cách đó tôi có cấu trúc miền sạch. Mỗi dịch vụ chỉ chịu trách nhiệm về các nút miền riêng của nó. Tôi có thể cập nhật từng dịch vụ và không phải tắt toàn bộ ứng dụng của mình.

-> Tôi có thể truy cập vào DB neo4j từ các ngôn ngữ khác nhau (PHP)

Nhược điểm: - Hiệu suất không phải là tốt như một EmbeddedGraphDatabase (kể từ khi máy chủ neo4j và dịch vụ trên cùng một máy độ trễ là không lớn lắm). - Không có giao dịch

Câu hỏi của tôi: Đây có phải là quyết định tốt để đi với máy chủ độc lập không? Hoặc tôi nên sử dụng một nhúng và trộn các dịch vụ thành một lớn? Có thể chạy một ứng dụng lớn (phức tạp) mà không cần hỗ trợ giao dịch không?

Trả lời

8

Bạn chính xác rằng hiệu suất với máy chủ REST sẽ ít hơn. Tuy nhiên, bạn có thể có một cái gì đó giống như các giao dịch với máy chủ REST bằng cách sử dụng các hoạt động hàng loạt; xem http://docs.neo4j.org/chunked/milestone/rest-api-batch-ops.html. Bạn cũng có thể xây dựng các plugin máy chủ cụ thể của miền thực hiện logic giao dịch của bạn ở phía máy chủ: http://docs.neo4j.org/chunked/milestone/server-extending.html.

Nếu kiến ​​trúc của bạn yêu cầu bạn có thể truy cập cơ sở dữ liệu từ nhiều máy khách, các tùy chọn duy nhất của bạn là máy chủ REST hoặc Neo4j HA (Tính khả dụng cao). HA chỉ có sẵn với giấy phép Neo4j Enterprise.

Hãy để kiến ​​trúc ứng dụng thông báo những công cụ nào được sử dụng, không phải theo cách khác. Nếu bạn đã quyết định rằng ứng dụng của bạn là tốt nhất như các dịch vụ riêng biệt, không kết hợp chúng thành một trong những chỉ để hỗ trợ mô hình kiên trì cơ bản. Tôi không biết gì về ứng dụng của bạn, nhưng từ mô tả của bạn, tôi sẽ chọn máy chủ REST và sử dụng các gói hoặc các trình cắm thêm máy chủ.

+0

Tôi muốn thêm rằng REST-API (được thử nghiệm với hai thư viện Python) có vấn đề về hiệu năng nghiêm trọng với các tập dữ liệu lớn (chúng tôi đã nhập 10 GB, vì vậy thậm chí không phải là tập dữ liệu thực sự lớn). Chúng tôi đã sử dụng trình nhập lô nhưng sau một giới hạn nhất định, máy chủ gần như chặn. Có các cuộc thảo luận mở về vấn đề đó, nhưng tôi chưa nhận thức được giải pháp. Nói chung, tôi muốn giới thiệu cài đặt được nhúng cho tất cả các vật nặng. – Bouncner

+0

@ Bouncner Ba năm sau, bạn có biết đây có phải là trường hợp không? Khoảng thời gian giống như bạn chúng tôi cũng nhận thấy vấn đề hiệu suất này, nhưng đã không sử dụng nó kể từ đó. –

6

Tất cả phụ thuộc vào trường hợp sử dụng của bạn. Bạn đã liệt kê một số chuyên nghiệp và con của.

Một chuyên gia khác cho máy chủ là quản trị web/hiển thị trực quan.

Bạn có một số tùy chọn khác. Bạn có thể có một graphdb được nhúng cho hiệu năng cao và chỉ có một số dịch vụ được nhúng và sử dụng API từ xa tùy chỉnh, miền trung tâm (REST hoặc khác) để hiển thị cơ sở dữ liệu biểu đồ cho các dịch vụ khác. Cũng có thể đạt được điều này bằng cách sử dụng Máy chủ Neo4j và thêm một số dịch vụ quan trọng hơn như Server-Plugins hoặc Extensions cũng có thể hiển thị API từ xa tùy chỉnh phù hợp với trường hợp sử dụng của bạn có thể tốt hơn.

Tôi sẽ bắt đầu sử dụng biểu đồ nhúng db để phát triển dịch vụ của bạn, nếu bạn muốn hiển thị các điểm cuối nhất định cho các dịch vụ khác sau đó, khá dễ dàng chuyển sang máy chủ Neo4j.

Trong REST-API có một giao dịch cho mỗi yêu cầu, đối với các hoạt động lớn hơn, có batch operation trong API.

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