Representing a DAG (directed acyclic graph)

2020-05-23 08:17发布

I need to store dependencies in a DAG. (We're mapping a new school curriculum at a very fine grained level)

We're using rails 3

Considerations

  • Wider than it is deep
  • Very large
  • I estimate 5-10 links per node. As the system grows this will increase.
  • Many reads, few writes
  • most common are lookups:
    • dependencies of first and second degree
    • searching/verifying dependencies

I know SQL, I'll consider NoSQL.

Looking for pointers to good comparisons of implementation options.

Also interested in what we can start with fast, but will be less painful to transition to something more robust/scalable later.

4条回答
叼着烟拽天下
2楼-- · 2020-05-23 08:43

I think the upcoming version (beta at the moment) of the Ruby bindings for the graph database Neo4j should be a good fit. It's for use with Rails 3. The underlying data model uses nodes and directed relationships/edges with key/value style attributes on both. To scale read-mostly architectures Neo4j uses a master/slave replication setup.

查看更多
够拽才男人
3楼-- · 2020-05-23 08:49

You might want to take a look at the act_as_dag gem.

https://github.com/resgraph/acts-as-dag

Also some good writing on Dags with SQL for people that might need some background on this.

http://www.codeproject.com/Articles/22824/A-Model-to-Represent-Directed-Acyclic-Graphs-DAG-o

查看更多
我欲成王,谁敢阻挡
4楼-- · 2020-05-23 08:54

You could use OrientDB as graph database. It's highly optimized for relationships since are stored as link and not JOIN. Load of bidirectional graph with 1,000 vertices needs few milliseconds.

The language binding for Rails is not yet available, but you can use it with HTTP RESTful calls.

查看更多
劳资没心,怎么记你
5楼-- · 2020-05-23 08:58

I found this example of modeling a directed acyclic graph in SQL:

http://www.codeproject.com/KB/database/Modeling_DAGs_on_SQL_DBs.aspx?msg=3051183

查看更多
登录 后发表回答