2015-04-03 16 views
10

Theo tôi hiểu, các ID do Neo4j cung cấp (ID(node)) không ổn định và hoạt động giống như số hàng trong SQL. Vì ID được sử dụng chủ yếu cho các mối quan hệ trong SQL và chúng dễ dàng được mô hình hóa trong Neo4j, dường như không có nhiều sử dụng cho ID, nhưng sau đó làm cách nào để bạn giải quyết các nút cụ thể? Có một API REST được cho là có các tuyến đường duy nhất cho mỗi nút (ví dụ: /api/concept/23) có vẻ như là một trường hợp khá chuẩn cho các ứng dụng web. Nhưng mặc dù nó được rất cơ bản, cách khả thi duy nhất tôi thấy là hoặc thông qua các khuôn khổ cụ thểThuộc tính gia tăng tự động trong Neo4j

  • ngôn ngữ
  • như một nút chưa được nối mà duy trì gia:
// get unique id 
MERGE (id:UniqueId{name:'Person'}) 
ON CREATE SET id.count = 1 
ON MATCH SET id.count = id.count + 1 
WITH id.count AS uid 
// create Person node 
CREATE (p:Person{id:uid,firstName:'Gabriel',lastName:'Smith'}) 
RETURN p AS person 

Nguồn:http://www.neo4j.org/graphgist?8012859

Có thực sự không phải là cách đơn giản hơn và nếu không, tôi Có một lý do cụ thể cho nó? Cách tiếp cận của tôi là chống mẫu trong bối cảnh của Neo4j?

Trả lời

7

ID nội bộ Neo4j ổn định hơn một chút so với id hàng sql vì chúng sẽ không bao giờ thay đổi trong một giao dịch, ví dụ:

Và thực sự phơi bày chúng để sử dụng bên ngoài không được khuyến nghị. Tôi biết có một số ý định tại Neo internals để thực hiện một tính năng như vậy.

Về cơ bản người có xu hướng sử dụng hai giải pháp cho việc này:

  1. Sử dụng một máy phát điện UUID ở mức ứng dụng như thế nào cho PHP: https://packagist.org/packages/rhumsaa/uuid và thêm một nhãn/uuid chế duy nhất trên tất cả các nút.

  2. Sử dụng một số ít rất Neo4j cắm như https://github.com/graphaware/neo4j-uuid rằng sẽ thêm các thuộc tính uuid khi đang bay, vì vậy nó loại bỏ bạn gánh nặng để xử lý nó ở cấp độ ứng dụng và nó dễ dàng hơn để quản lý nhà nước kiên trì của nút của bạn đối tượng

+2

Điều này không trả lời được câu hỏi. Tự động tăng id có thể được sử dụng để sắp xếp các đối tượng theo thứ tự sáng tạo, mà không thể được thực hiện với uuid's –

+2

Phần nào của câu hỏi mà bình luận của bạn trả lời? –

+0

Tôi tin rằng thêm dấu thời gian unix hoặc một số loại tiền tố ngày tháng vào chuỗi duy nhất ngẫu nhiên sẽ khắc phục sự cố sắp xếp. – Guy

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