Графовая база данных для генеалогии
Кто -то может указать мне на рабочее использование базы данных графа для генеалогии? Я хотел бы изучать neo4j, и я использую python, поэтому я искал, чтобы сделать генеалогический граф БД для себя, чтобы изучить граф БД. Я искал примеры для подражания и обучения (любой граф БД, любой язык), но был удивлен тем, как мало я нашел.
Обратите внимание, я имею в виду граф БД, который имеет структуру, отличную от реляционной БД. Смотрите http://en.m.wikipedia.org/wiki/Graph_database.
Я ищу пример схемы для генеалогии.
2 ответа
Если вы хотите научиться работать с GraphDB, вам не нужно использовать какое-либо программное обеспечение. Карандаш, бумага и мозг подойдут. Вещи, которые вы должны иметь в виду, чтобы придумать дизайн:
- Что такое граф: вершина и ребра
- Что конкретно относится к структуре данных graphdb: вершины и ребра связаны с python-подобным диктом.
- Какая информация должна быть в graphdb, чтобы решить проблему, которая у меня есть. Перечислите все запросы, которые вы хотите выполнять с графиком.
На диаграмме ниже вы увидите график, который может стать основой вашего дизайна.
Вы должны представить, что у каждого узла есть имя, дата рождения и т. Д.... и уникальный идентификатор.
Он представляет две разрозненные семьи: слева одна с двумя детьми, справа одна с тремя детьми.
С помощью приведенного выше графика вы можете вычислить:
- Кто является родителем X?
- Как зовут отцовскую часть самой большой семьи?
И другие, так как есть только две семьи, в которых есть только один родитель и один ребенок, ни один из них не представлял, что вы не можете понять, что на самом деле вы могли бы также вычислить следующий запрос:
- Кто те люди, у которых Х как предок еще жив?
Теперь, если вы хотите поэкспериментировать с Python, у вас есть несколько вариантов, начиная с более простой настройки:
Чистый питон:
- Создайте класс Vertex и класс Edge, который наследует dict.
- Построить генеалогический граф с кодом Python из реальных данных или что-то еще.
- Экспериментируйте с запросами.
- отказ от ответственности: это мой проект
- То же, что и в чистой версии Python, за исключением того, что график сохраняется в базе данных. API похож на привязки python neo4j.
Это другие решения, но без большего контекста о целевом приложении (например, в Интернете или на рабочем столе) я не могу перечислить их все. Это некоторая информация на сайте neo4j, которая может быть полезна.
Тем не менее, лучшее решение может включать neo4j, но Rexster для сетевого приложения или Blueprints для других требуются, если вы хотите легко переключаться между несколькими базами данных, чтобы найти лучшую базу данных с точки зрения производительности для вашего варианта использования. Единственная причина использовать сервер neo4j напрямую - это возможность использовать язык запросов cypher.
Если бы мне нужно было создать генеалогическое веб-приложение и построить из него бизнес, я бы использовал программное обеспечение, которое я создал, а именно:
Те не готовы к производству как есть. Но это то, что я бы сделал.
Если вы хотите использовать быструю базу данных без сервера (и без JVM). Я предлагаю вам попробовать совершенно новую привязку Python Sparksee (ранее Dex). Однако необработанный API не является переносимым. Производительность, однако, на порядок выше.
Второй вариант - использовать Bulbs, который запускается поверх Neo4j через его REST API, он также поддерживает любой сервер Rexsters. Язык запросов - Gremlin (Cypher тоже работает). Хорошим моментом является то, что вы можете переключиться на другой бэкэнд, если он лучше соответствует вашим потребностям.
Что касается вашей схемы БД, у вас есть как минимум 1 узел и 1 ребро:
1 узел: PERSON (имя, рождение, смерть), которые являются индексированными полями.
1 направленный ограниченный фронт от ЛИЦА к ЛИЦУ с именем: CHILD_OF или PARENT_OF.
Вы можете добавить больше ребер между узлами, такими как: SIBLINGS, MARRIED_TO и т. Д.