我想在磁盘上存储多个树(我的树代表文件和文件夹的层次结构),每个节点都有键/值信息。
我希望能够比较这些树(交集,联合,差异......),它们将拥有数百万个节点。
哪种解决方案最适合?基于文档的商店(MongoDB ...)或Graph DB(Neo4J ...)?
答案 0 :(得分: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集成语言)感到满意,您可以使用内置的Neo4j API构建自己的递归算法来比较结构。