- ノード(が円で表される)、
- 縁(が矢印によって表される)、及び
- 特性(メタデータを理解しますノード/エッジの数)
グラフィック(ウィキペディアの礼儀は)directed graphを説明しています。
undirected graphをRailsでモデル化する最良の方法は何ですか? 、すべてのエッジが(グラフィック上記のよう)の逆数であり、ここで、各エッジの特性に関係なく方向(グラフィック上へ逆)と同じであるグラフを言うことである
。
ActiveRecordを介してSQLストアを使用するデフォルトのRails 3の設定を想定しましょう。
二重polymorphic associationは、上記の画像で記述されたデータをモデル化できる有向グラフを作成します。
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
このモデルを拡張して逆の関係を管理するか、より良いモデルを使用できますか?グラフ同位角がデータに対して実行されなければならないこと、またデータセットが利用可能なメモリよりも大きいこと、アプリの一つの要素は、グラフの問題かもしれないが、それはアプリが問題を中心とするわけではありません
。
大きなグラフで高性能が必要な場合は、前提条件に基づいて作業する必要があります。これは、(SQL)RDBMSにとっては間違いです。 –
大きなグラフにはうんざりですか?絶対に。それにもかかわらず可能です。最初のプロトタイプの後に記憶層を入れ替えたり変更したりすることは、私の本の最初の複雑さよりも好ましいものです。 (Knuthの "時期尚早最適化..."を呼び出す) –
正しいツールとデザインの選択肢は時期尚早最適化と同じではありません。あなたはハンマーを本当にうまく使う方法を知っていますし、ハンマーでねじを動かすこともできますが、それがその仕事のための最良のツールであるとは限りません。この時点でドライバーに切り替えることは時期尚早の最適化ではありません。このプロジェクトを真剣に考えようと思えば、それはおもちゃ以外のものです。このような考え方は、全面的な意味を先取りしています。これが単にリレーショナルデータベースがグラフをどの程度保存することができるかを確認するための実験であれば、それは大丈夫ですが、主な目的であることがわかっているように質問に追加しましょう。 – ctcherry