Представление DAG (направленного ациклического графа)

Мне нужно хранить зависимости в DAG. (Мы собираем новую школьную учебную программу на очень мелком уровне)

Мы используем рельсы 3

Соображения

  • Больше, чем глубокий
  • Очень большой
  • Я оцениваю 5-10 ссылок на node. По мере роста системы это увеличится.
  • Многие читают, мало пишет
  • Наиболее распространенными являются поисковые запросы:
    • зависимости первой и второй степени
    • поиск/проверка зависимостей

Я знаю SQL, я буду рассматривать NoSQL.

Поиск указателей на хорошее сравнение вариантов реализации.

Также интересуется тем, что мы можем начать с быстрого, но будет менее болезненным для перехода к чему-то более надежному/масштабируемому позже.

Ответ 1

Я думаю, что предстоящая версия (бета на данный момент) привязки Ruby для базы данных графа Neo4j должно быть хорошо. Он используется с Rails 3. В базовой модели данных используются узлы и направленные отношения/ребра с атрибутами стиля key/value на обоих. Чтобы масштабировать архитектуры, предназначенные только для чтения, Neo4j использует настройку мастера/ведомой репликации.

Ответ 3

Вы можете использовать OrientDB в качестве базы данных графа. Он очень оптимизирован для отношений, поскольку хранится как ссылка, а не JOIN. Загрузка двунаправленного графика с 1000 вершинами требует нескольких миллисекунд.

Языковая привязка для Rails еще недоступна, но вы можете использовать ее с HTTP RESTful вызовами.