2015-03-09 2 views
1

Я хотел бы сохранить несколько деревьев на диске (мои деревья представляют собой иерархии файлов и папок) с информацией о ключах/значениях на каждом узле.NoSQL: Хранить иерархическое дерево (представляющее файлы и папки)

Я хочу, чтобы иметь возможность сравнивать эти деревья (пересечение, объединение, разность, ...), у них будет миллион узлов.

Какое решение лучше всего подходит? хранилища на основе документов (MongoDB ...) или Graph DB (Neo4J ...)?

ответ

0

База данных графов была бы естественной подгонкой для древовидной структуры. В Neo4j вы могли бы представлять файлы и папки очень просто, как это:

(:Folder)-[:CONTAINS]->(:File) 
(:Folder)-[:CONTAINS]->(:Folder) 

Если после этого вы хотели сравнить структуры, вы могли бы сделать два высчитывать запросы

MATCH path=(top_folder:Folder)-[:CONTAINS*1..15]->(leaf) 
WHERE 
    ID(top_folder) = {specified_id} 
    (leaf:File OR leaf:Folder) AND 
    NOT(leaf-[:CONTAINS]->()) 
RETURN path 

Это даст Вам все пути структуры каталогов, начиная с указанной вами папки, которую вы могли бы сравнить.

Альтернативно, если вам нравится Java (или некоторый язык с интеграцией Java), вы можете использовать встроенные API-интерфейсы Neo4j для создания собственных рекурсивных алгоритмов для сравнения структур.

Смежные вопросы