2012-05-22 25 views
10

Tôi hiện đang sử dụng nhúng python ràng buộc cho neo4j. Tôi không có bất kỳ vấn đề nào hiện tại vì biểu đồ của tôi rất nhỏ (thưa thớt và tối đa 100 nút). Thuật toán tôi đang phát triển liên quan đến khá nhiều traversals trên đồ thị, cụ thể hơn DFS trên đồ thị nói chung cũng như trên các biểu đồ con khác nhau. Trong tương lai, tôi dự định chạy thuật toán trên các đồ thị lớn (được cho là thưa thớt và với hàng triệu nút).Chọn một cách thích hợp để sử dụng Neo4j trong Python

Có đọc các chủ đề khác nhau liên quan đến hiệu suất của ràng buộc python/neo4j here, here, tôi tự hỏi liệu tôi có nên chuyển sang một số ứng dụng REST API cho Python (như bulbflow, py2neo, neo4jrestclient) cho đến khi tôi quá xa để thay đổi tất cả các mã.

Thật không may, tôi không tìm thấy bất kỳ nguồn thông tin toàn diện nào để so sánh các cách tiếp cận khác nhau.

Có ai có thể cung cấp thêm thông tin chi tiết về vấn đề này không? Tôi nên tính đến tiêu chí nào khi chọn một trong các tùy chọn?

Trả lời

0

Không thực sự chắc chắn, tôi không phải là một chuyên gia, nhưng tôi nghĩ rằng nó cũng phụ thuộc vào kỳ vọng Django của bạn, và bao nhiêu của một khuôn khổ bạn cần. Py2neo là rất thực dụng và mỏng, Bulbflow dường như để xây dựng một bản đồ toàn bộ stack vv, và neo4jrestclient đang tập trung vào Django (có thể là sai)?

+0

Tôi phải thú nhận tôi không quen với Django. Nó không phải là một cái gì đó liên quan đến các ứng dụng web? Tôi đang làm mọi thứ cục bộ trên 1 máy ngay bây giờ. Tôi vẫn nên kiểm tra nó? – npobedina

+0

không chắc chắn, tôi sẽ thử. –

8

Django là một khung công tác web MVC để bạn có thể quan tâm rằng nếu bạn là một ứng dụng web.

Từ quan điểm của py2neo (trong đó tôi là tác giả), tôi đang cố gắng tập trung vào hiệu năng bằng cách sử dụng cơ chế thực thi hàng loạt một cách tự động khi thích hợp cũng như cung cấp hỗ trợ mạnh mẽ cho Cypher. Gần đây tôi cũng đã đưa rất nhiều công sức vào việc cung cấp các tùy chọn tốt để quản lý tính duy nhất trong các chỉ mục - cụ thể là các phương pháp get_or_createadd_if_none.

3

Cách dễ nhất để chạy các thuật toán từ Python là sử dụng Gremlin (https://github.com/tinkerpop/gremlin/wiki).

Với Gremlin bạn có thể bó tất cả mọi thứ vào một yêu cầu HTTP để giảm chi phí khứ hồi.

Dưới đây là làm thế nào để thực hiện kịch bản Gremlin từ Bulbs (http://bulbflow.com):

>>> from bulbs.neo4jserver import Graph 
>>> g = Graph() 
>>> script = "g.v(id).out('knows').out('knows')" 
>>> params = dict(id=3) 
>>> g.gremlin.execute(script, params) 

Các tài liệu Bulbs Gremlin API đang ở đây: http://bulbflow.com/docs/api/bulbs/gremlin/

+1

cảm ơn đề xuất. Tôi đã đọc một số so sánh của Gremlin vs Cypher. Vì vậy, tôi đoán tôi phải thử cả hai để quyết định cái nào phù hợp hơn trong trường hợp sử dụng của tôi. Dường như có vấn đề với trang web bulbflow. Bạn có biết nó sẽ sớm hoạt động không? – npobedina

+1

Đã xảy ra sự cố DNS đang cập nhật. Bây giờ bạn có thể truy cập nó ở đây: http://bulbflow.herokuapp.com – espeed

+0

là nó có thể thực hiện truy vấn Cypher chống lại neo4j bằng cách sử dụng bulbflow? tài liệu về vấn đề này có vẻ ít người biết đến. có thực sự tốt hơn (nhanh hơn) để dính vào Gremlin khi làm việc với bulbflow? – npobedina

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