Что мне нужно знать, чтобы внедрить базу данных концептуальных графов?

У меня есть продукт, для которого нужна графовая база данных, и, к сожалению, все графовые базы данных, которые я нашел, недостаточно совершенны, стоят много денег или просто не соответствуют моим потребностям.
Я хотел бы реализовать адаптацию графовая база данных, которая имеет следующие особенности:

  • Граф может быть только направленным.
  • База данных должна быть встроена в работающий процесс, поэтому она будет храниться в памяти.
  • The database will only perform the following operations:
    • Reading from a node.
    • Запись на узел (создание/обновление)
    • Удаление узла
    • перенаправление ребра (операция, при которой узел, у которого было ребро, указывающее на один узел, теперь будет указывать на другой)
    • алгоритм поиска графа, который не касается этого вопроса.
  • База данных графа должна содержать и обрабатывать только три типа узлов.

Что мне нужно знать, чтобы написать это как доказательство концепции? Сколько времени уйдет на его написание?
Подойдет ли здесь функционально-ориентированный подход (я знаю, что он лучше справляется с рекурсией), чем объектно-ориентированный подход?
Облегчают ли мои ограничения реализацию?


person the_drow    schedule 26.06.2011    source источник


Ответы (2)


Если вы используете какое-то другое хранилище данных в качестве серверной части, вы можете очень быстро написать доказательство концепции, просто добавив поверх API-интерфейса graphdb. Что касается размера проекта: поищите в таких местах, как SourceForge и GitHub, и вы сможете найти небольшие реализации graphdb. Затем вы можете посмотреть на строки исходного кода и функции и получить некоторое представление о своем проекте. Вы не упоминаете такие вещи, как транзакции и восстановление после сбоя — если вы хотите этого, это потребует гораздо больше усилий.

person nawroth    schedule 27.06.2011
comment
А что, если я не буду использовать какое-то другое хранилище данных на сервере? - person the_drow; 27.06.2011
comment
Тогда я бы сказал, что это, вероятно, больше не доказательство концепции. Все дело в том, на какие вопросы вы хотите, чтобы PoC ответил. - person nawroth; 04.07.2011
comment
Если я буду использовать СУБД в качестве серверной части, она не будет масштабироваться даже для 100 узлов. Мне нужно что-то, что могло бы действительно работать, если бы оно было разработано для масштабирования до большого количества узлов. - person the_drow; 04.07.2011

База данных должна быть встроена в работающий процесс, поэтому она будет храниться в памяти.

В основном вы можете использовать любую библиотеку обработки графов (например, QuickGraph для C#) и периодически сериализовать базу данных на диск в фоновом потоке (в случае внезапного отключения питания или сбоя).

Вам понадобится некоторое понимание теории графов (конечно), многопоточности, параллельных вычислений (блокировки, транзакции и т. д.), но если вам не нужны транзакции, то использование библиотек в основном делает проект выходного дня IMO.

person wizzard0    schedule 23.01.2012