2016-08-03 26 views
7

Tôi đang cố gắng lấy đối tượng Graph bằng Tinkerpop3 trong Java với tư cách máy khách từ máy chủ TitanDB đã chạy (tôi không muốn tạo máy chủ).Tinkerpop3 kết nối với máy chủ TitanDB từ xa

Nói cách khác, tôi đang cố triển khai chức năng như vậy: Biểu đồ công khai obtainGraph (String serverIp, String graphName);

Tôi đã cố gắng để làm điều đó như ở đây: AWS Lambda + Tinkerpop/Gremlin + TitanDB on EC2 + AWS DynamoDB in cloud

nhưng như tôi hiểu, TitanFactory.open() bắt đầu máy chủ, và tôi không muốn làm điều này - Tôi chỉ muốn kết nối với máy chủ hiện có.

Tài liệu cũng như hầu hết các vật liệu được sử dụng Internet trong bộ nhớ đồ thị cho các ví dụ, và tôi không thể tìm thấy một, cho thấy làm thế nào để:

  • tạo biểu đồ mới và lưu nó trên máy chủ từ xa

  • lấy đồ thị hiện tại từ máy chủ từ xa

  • cập nhật như vậy graph từ xa, vì vậy sau khi thêm/gỡ bỏ các cạnh thay đổi cam kết

  • xóa toàn bộ đồ thị

Tôi không muốn làm trên những thứ thông qua Gremlin ngôn ngữ (Strings), nhưng thông qua Java API (TinkerpopBlueprins). Anh chàng này đang tiến gần đến những gì tôi cần: Add vertices to TitanDB Graph in Java tuy nhiên, phương pháp của anh ấy đã lấy Biểu đồ làm đối số.

Tôi đã thấy ở nhiều nơi trên Internet, GraphFactory.open() lấy đường dẫn đến tệp thuộc tính, tuy nhiên tôi chưa thấy ví dụ về nội dung của tệp đó, đặc biệt là dữ liệu liên quan đến TitanDB, vì vậy tôi muốn sử dụng Đối tượng cấu hình.

Graph graph = GraphFactory.open (BaseConfiguration mới())

nói, rằng không có tài sản gremlin.graph.

Cấu hình cấu hình = new BaseConfiguration(); configuration.setProperty ("gremlin.graph", "titan");

Đồ thị biểu đồ = GraphFactory.open (cấu hình);

nói GraphFactory không thể tìm thấy [titan] - Đảm bảo rằng jar là trong classpath

Có builder tĩnh đánh máy với sự đếm và hằng số, thay vì bản đồ, mà sẽ cho tôi biết, những gì thuộc tính tôi phải cung cấp và loại của họ là gì? Có dự án mã nguồn mở nào, sử dụng Tinkerpop3 để kết nối máy khách với máy chủ TitanDB từ xa, mà tôi có thể sử dụng làm ví dụ không?

Tôi muốn xem ví dụ làm việc đầy đủ, thay vì trong bộ nhớ có cấu hình bên ngoài.

+0

http://s3.thinkaurelius.com/docs/titan/1.0.0/storage-backends.html –

Trả lời

7

Dưới đây là ví dụ về chương trình điều khiển Titan kết nối với máy chủ Titan đang chạy. https://github.com/pluradj/titan-tp3-driver-example Như bạn đã lưu ý, điều này sẽ vượt qua Gremlin như một chuỗi đến Titan Server từ xa.

Nếu bạn không muốn làm điều này vì bạn muốn sử dụng Java API trực tiếp, bạn nên sử dụng TitanFactory.open() để tạo kết nối trực tiếp đến biểu đồ của mình. TitanFactory.open() tạo một phiên bản TitanGraph mà bạn có thể thực thi cuộc gọi API đồ thị của mình. Nó không khởi động máy chủ Titan. Trong trang bìa, nó tạo ra các kết nối máy khách với bộ nhớ và chỉ mục phụ trợ.

Bạn có thể tham khảo ví dụ này cho một chương trình Titan Java mà không Titan server https://github.com/pluradj/titan-tp3-java-example

Bạn có thể cấu hình này sử dụng một tập tin thuộc tính (đây là một example configuration sử dụng Cassandra và Elasticsearch) hoặc bằng cách xây dựng một đối tượng Configuration qua mã (về cơ bản thiết lập các cặp khóa-giá trị giống nhau trong tệp thuộc tính).

  • Nếu biểu đồ không tồn tại trước kết nối ban đầu, Titan sẽ tạo không gian biểu đồ trong Cassandra và chỉ mục trong Elasticsearch.

  • Ghi chú số storage.hostnameindex.search.hostname vì đây là cụm Cassandra và Elasticsearch của bạn tương ứng. Đây thực chất là "máy chủ đồ thị" của bạn. Bạn không cần chạy Titan Server riêng biệt.

  • Titan không có bất kỳ API nào để xóa biểu đồ khỏi bộ nhớ phụ trợ. Để xóa toàn bộ biểu đồ, bạn cần kết nối với Cassandra qua Java client driver và thực thi API để thả không gian phím. Tương tự, bạn cần kết nối với Elasticsearch thông qua số Indices API và xóa chỉ mục.

+0

Nó sử dụng Gremlin đơn giản - "GV ​​() hasLabel ('phần mềm') có ('.. tên ', n) .in (' đã tạo '). giá trị (' tên ') ". Tôi muốn liên lạc với máy chủ mà không có truy vấn dưới dạng chuỗi, một cái gì đó gần gũi hơn với JPA. – spam

+1

câu trả lời được cập nhật với nhiều chi tiết hơn. hi vọng điêu nay co ich. –

+0

Vâng, nó giúp một chút, như tôi cuối cùng chắc chắn, rằng TitanFactory.open() không khởi động máy chủ (tài liệu không rõ ràng, ít nhất là cho tôi). Tuy nhiên, tôi không biết những gì nên viết như giá trị cho storage.backend - đơn giản "titan" và "titandb" không hoạt động. – spam

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