importowanie języka graph databases, rozumiećModel nieukierunkowany wykres w Rails?
- węzły (reprezentowane przez kółka)
- krawędzie (reprezentowanych przez strzałki) i
- właściwości (metadanych węzłów/krawędzi)
graficzny (dzięki uprzejmości wikipedia) opisuje directed graph.
Jaki jest najlepszy sposób na modelowanie undirected graph w Railsach?
To znaczy wykres, na którym wszystkie krawędzie są wzajemne (jak podano graficznego) i gdzie właściwości każdej krawędzi są takie same, niezależnie od kierunku (przeciwnie powyżej graficznego).
Załóżmy domyślną konfigurację Rails 3 przy użyciu magazynu sql za pośrednictwem ActiveRecord.
Podwójny polymorphic association tworzyłby ukierunkowany wykres, zdolny do modelowania danych opisanych przez powyższy obraz.
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
Jeżeli jedna przedłużyć ten model zarządzania odwrotne relacje, czy jest lepszy model dostępny?
Jednym z elementów aplikacji może być problemem wykres, ale to nie znaczy, że aplikacja jest wokół problemu, że kąty naprzemianległe wykres musi być wykonywane na danych, ani też, że zestaw danych jest większy niż dostępnej pamięci .
Jeśli potrzebujesz wysokiej wydajności z dużymi wykresami, musisz popracować nad swoimi założeniami. Jest to złe dopasowanie dla (sql) RDBMS. –
Złe dopasowanie do dużych wykresów? Absolutnie. Ale możliwe jednak. Zamiana lub modyfikowanie warstwy pamięci po początkowym prototypie, gdy jeden z nich będzie miał przykład prawdziwych danych, z którymi będziemy się zajmować, jest lepszy od początkowej dodanej złożoności w mojej książce. (wywołaj "optymalizację przedwczesną Knutha ...") –
Prawidłowe wybory narzędzia i projektu to nie to samo co przedwczesna optymalizacja. Wiesz, jak bardzo dobrze używać młotka, i możesz napędzać śrubę młotkiem, ale to nie znaczy, że jest to najlepsze narzędzie do pracy. Przełączenie na śrubokręt w tym momencie nie jest przedwczesną optymalizacją. Jeśli masz zamiar potraktować ten projekt poważnie i jest czymś więcej niż zabawką, rozważania takie jak ta mają z góry sens. Jeśli jest to po prostu eksperyment, aby zobaczyć, jak dobrze relacyjna baza danych może przechowywać wykres, to też jest w porządku, ale dodajmy to do pytania, abyśmy wiedzieli, że to główny cel. – ctcherry