Nhập ngôn ngữ của graph databases, hiểuTạo mô hình đồ thị vô hướng trong Rails?
- nút (đại diện bởi vòng tròn),
- cạnh (đại diện bởi mũi tên), và
- tính (siêu dữ liệu của các nút/cạnh)
Các đồ họa (biếu không của wikipedia) mô tả một directed graph.
Cách tốt nhất để tạo mô hình undirected graph trong Rails là gì?
Đó là để nói, một biểu đồ mà tất cả các cạnh là đối ứng (như trong trên đồ họa), và nơi các thuộc tính của mỗi cạnh đều giống nhau bất kể hướng (trái với trên đồ họa).
Giả sử thiết lập Rails 3 mặc định bằng cách sử dụng cửa hàng sql thông qua ActiveRecord.
Một đôi polymorphic association sẽ tạo biểu đồ có hướng, có thể mô hình dữ liệu được mô tả bằng hình ảnh trên.
def Edge < ActiveRecord::Base
belongs_to :head, polymorphic: true
belongs_to :tail, polymorphic: true
end
class Node < ActiveRecord::Base
has_many :from, as: :head
has_many :to, as: :tail
end
class Group < ActiveRecord::Base
# a Node of Type: Group
has_many :from, as: :head
has_many :to, as: :tail
end
Có nên mở rộng mô hình này để quản lý các mối quan hệ nghịch đảo hoặc mô hình tốt hơn không?
Một yếu tố của một ứng dụng có thể là một vấn đề đồ thị, nhưng nó không có nghĩa là ứng dụng tập trung vào các vấn đề, rằng transversals đồ thị phải được thực hiện trên các dữ liệu, cũng không phải là các tập dữ liệu lớn hơn bộ nhớ còn trống .
Nếu bạn cần hiệu suất cao với biểu đồ lớn, Bạn cần phải làm việc trên các giả định của mình. Đây là một sự phù hợp không tốt đối với RDBMS (sql). –
Phù hợp với đồ thị lớn không phù hợp? Chắc chắn rồi. Nhưng dù sao thì cũng có thể. Trao đổi hoặc sửa đổi một tầng lưu trữ sau một nguyên mẫu ban đầu khi một ví dụ có một ví dụ về dữ liệu thực sẽ được xử lý là thích hợp hơn với độ phức tạp ban đầu được thêm vào trong cuốn sách của tôi. (gọi Knuth "tối ưu hóa sớm ...") –
Lựa chọn công cụ và thiết kế đúng không giống như tối ưu hóa sớm. Bạn biết làm thế nào để sử dụng một cái búa thực sự tốt, và bạn có thể lái một cái đinh vít bằng một cái búa, nhưng điều đó không có nghĩa nó là công cụ tốt nhất cho công việc. Chuyển sang một tuốc nơ vít tại thời điểm này không phải là một tối ưu hóa sớm. Nếu bạn dự định thực hiện dự án này một cách nghiêm túc, và nó không chỉ là một món đồ chơi, thì những cân nhắc như thế này làm cho toàn bộ ý nghĩa trả trước. Nếu đây chỉ là một thử nghiệm để xem cơ sở dữ liệu quan hệ có thể lưu trữ một đồ thị tốt như thế nào thì cũng không sao, nhưng hãy thêm nó vào câu hỏi để chúng ta biết đó là ý định chính. – ctcherry