Представление DAG (направленного ациклического графа)
Мне нужно хранить зависимости в DAG. (Мы собираем новую школьную учебную программу на очень мелком уровне)
Мы используем рельсы 3
Соображения
- Больше, чем глубокий
- Очень большой
- Я оцениваю 5-10 ссылок на node. По мере роста системы это увеличится.
- Многие читают, мало пишет
- Наиболее распространенными являются поисковые запросы:
- зависимости первой и второй степени
- поиск/проверка зависимостей
Я знаю SQL, я буду рассматривать NoSQL.
Поиск указателей на хорошее сравнение вариантов реализации.
Также интересуется тем, что мы можем начать с быстрого, но будет менее болезненным для перехода к чему-то более надежному/масштабируемому позже.
Ответы
Ответ 1
Я думаю, что предстоящая версия (бета на данный момент) привязки Ruby для базы данных графа Neo4j должно быть хорошо. Он используется с Rails 3. В базовой модели данных используются узлы и направленные отношения/ребра с атрибутами стиля key/value на обоих. Чтобы масштабировать архитектуры, предназначенные только для чтения, Neo4j использует настройку мастера/ведомой репликации.
Ответ 2
Я нашел этот пример моделирования ориентированного ациклического графа в SQL:
http://www.codeproject.com/KB/database/Modeling_DAGs_on_SQL_DBs.aspx?msg=3051183
Ответ 3
Вы можете использовать OrientDB в качестве базы данных графа. Он очень оптимизирован для отношений, поскольку хранится как ссылка, а не JOIN. Загрузка двунаправленного графика с 1000 вершинами требует нескольких миллисекунд.
Языковая привязка для Rails еще недоступна, но вы можете использовать ее с HTTP RESTful вызовами.
Ответ 4
Возможно, вы захотите взглянуть на драгоценный камень act_as_dag.
https://github.com/resgraph/acts-as-dag
Также хорошо написано о Dags с SQL для людей, которым может понадобиться некоторый фон.
http://www.codeproject.com/Articles/22824/A-Model-to-Represent-Directed-Acyclic-Graphs-DAG-o