2013-03-18 38 views
7

Tôi có loại nút có thuộc tính chuỗi sẽ có cùng giá trị thực sự thường xuyên. Vv. Hàng triệu nút chỉ có 5 tùy chọn có giá trị chuỗi đó. Tôi sẽ thực hiện tìm kiếm theo thuộc tính đó.Thiết kế Neo4j: Thuộc tính vs "Nút và mối quan hệ"

Câu hỏi của tôi sẽ là tốt hơn về hiệu suất và bộ nhớ: a) Triển khai thuộc tính nút và có nhiều bản sao (và tìm kiếm bằng WHERE). b) Thực hiện nó như 5 nút bổ sung, trong đó tất cả các nút gốc tham chiếu một trong số chúng (và tìm kiếm bằng cách sử dụng MATCH bổ sung).

Trả lời

6

Nếu không biết thêm chi tiết, thật khó để đưa ra câu trả lời có mục đích chung.

Từ góc độ hiệu suất, tốt hơn nên giới hạn tìm kiếm càng sớm càng tốt. Thậm chí có lợi hơn nếu bạn không phải xem xét các thuộc tính cho một sự truyền tải.

Giả sử tốt hơn là di chuyển thuộc tính tra cứu vào một nút riêng biệt và sử dụng giá trị làm loại mối quan hệ.

+0

Tôi thực sự thích ý tưởng của bạn để sử dụng giá trị như kiểu mối quan hệ. Sau đó, tôi chỉ cần 1 nút vô dụng mà không có dữ liệu để chỉ vào các mối quan hệ mới này. Một câu hỏi khác sẽ là: sẽ có bất kỳ vấn đề hiệu suất nào với 1 triệu mối quan hệ với một nút duy nhất không? Tôi sẽ không thực hiện bất kỳ tìm kiếm nào từ nút đó, chỉ với nó. Ngoài ra, nó sẽ có ý nghĩa để sử dụng nút gốc cho nó? – Martynas

+2

Miễn là bạn chỉ đi qua nút đó thì không có hình phạt về hiệu suất. Nếu bạn đi theo hướng khác, bạn sẽ phải quét 1 triệu mối quan hệ tất nhiên. –

+0

Tôi sẽ không khuyên bạn nên sử dụng nút gốc.Có thể tạo một nút mới được kết nối với nút gốc cho điều này. Nếu không, bạn có thể cư trú nút gốc với nhiều khái niệm khác nhau mà là chiến lược mô hình hóa xấu theo ý kiến ​​của tôi. –

1

Tôi cũng đã nghĩ về vấn đề này một chút. Trong trường hợp của tôi, tôi phải đại diện cho nhà nước:

  • ĐẦU
  • IN_PROGRESS
  • NỘP
  • HOÀN THÀNH

Nhìn chung, Node + Mối quan hệ cách tiếp cận trông hấp dẫn hơn trong đó chỉ có một mối quan hệ đơn tham chiếu cần được duy trì mỗi lần thay vì chuỗi thuộc tính và bạn không cần quét thêm chỉ mục bổ sung cần được duy trì trên thuộc tính (bộ nhớ và hiệu năng sẽ trực quan b e ủng hộ cách tiếp cận này).

Một ưu điểm khác là nó dễ dàng hỗ trợ khả năng của một nút được liên kết với nhiều "nút đặc biệt". Nếu bạn thấy trước một tình huống mà điều này có thể xảy ra trong mô hình của bạn, điều này tốt hơn là phải sử dụng một mảng thuộc tính (và tìm kiếm bằng cách sử dụng "in").

Trong thực tế, tôi thấy rằng vấn đề sau đó đã trở thành, làm thế nào để bạn truy cập các nút đặc biệt mỗi lần. Hoặc bạn duy trì một số loại hằng số tham chiếu nơi bạn có ID nút của các nút đặc biệt này, nơi bạn có thể nhảy ngay vào trong câu lệnh START (đây là những gì chúng tôi làm) hoặc bạn cần thực hiện tìm kiếm nút mỗi lần (tên, có lẽ) và sau đó đi qua các mối quan hệ của nó. Điều này không làm cho các truy vấn cypher đẹp nhất.

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