4

Я хочу хранить график миллионов узлов, где каждый узел ссылается на другой неориентированным образом (точка А-В, автоматически B указывает на А). Я рассматривал Neo4j, OrientDB как возможные решения, но они, похоже, ориентированы в ориентированных графах, а Neo4j не является бесплатным для> 1 миллиона узлов, для меня не является решением.Nosql DB для неориентированных графиков?

Помогите мне, какие из других NoSQL DB (Redis, CouchDB, MongoDB, ...) лучше всего подходят для чего-то подобного и как это можно реализовать? Я хочу сделать не-свойство (просто дайте мне связанные элементы) широкие запросы с двумя уровнями глубины (с A < -> B, B < -> C, C < -> D, запрос A должен дать мне B и C, но не D).

+0

Интересующий бит запроса! Я думал об этом с точки зрения Кассандры, и, хотя хранение может быть достигнуто с помощью одного семейства столбцов, я не уверен, как справляться с условием запроса уровня 2-уровня. Требуется еще некоторое время :) –

ответ

4

Neo4j всегда хранит отношения/ребра в соответствии с указаниями, но при перемещении/запросе вы можете легко обрабатывать график как неориентированный с помощью Direction.BOTH или в некоторых случаях, не определяя направление вообще. (Таким образом, нет необходимости в «двойных» краях для покрытия обоих направлений, вы просто игнорируете направление - и при обходных краях «назад» нет штрафа за производительность.)

1 миллион предисловий «примитивов» был удален для сейчас. Если ваш код является открытым исходным кодом, вы можете использовать версию сообщества для любого размера БД. Для других случаев есть commercial versions, который включает в себя один free alternative.

+0

Есть ли штраф за выполнение для продвижения направлений отношений в обходах? – JohnnyM

5

OrientDB не имеет ограничений по количеству узлов. Кроме того, модель по умолчанию является двунаправленной. Вы можете использовать его БЕСПЛАТНО также в коммерческих целях, так как прикладная лицензия - Apache 2.

GraphDB документально описан здесь: http://code.google.com/p/orient/wiki/GraphDatabase. Basilary вы можете использовать собственный API или реализацию Blueprints. Собственные API имеют эволюцию языка SQL со специальными операторами для графиков. Пример:

SELECT FROM WHERE счета друзей ХОДА (1,7) (address.city.country.name = «Новая Зеландия»)

Это означает, что даст мне все счета такого друга, который живет в Новой Зеландии , Друзья поднимаются на 7-й уровень глубины.

Вторая позволяет использовать полный стек Blueprint, такой как язык Гремлина, для создания ваших сложных сложных запросов.