【发布时间】:2015-03-09 04:05:06
【问题描述】:
我想在磁盘上存储多个树(我的树代表文件和文件夹的层次结构),每个节点上都有键/值信息。
我希望能够比较这些树(交集、联合、差异……),它们会有数百万个节点。
哪种解决方案最适合?基于文档的存储 (MongoDB...) 还是 Graph DB (Neo4J...)?
【问题讨论】:
标签: mongodb tree graph-databases database nosql
我想在磁盘上存储多个树(我的树代表文件和文件夹的层次结构),每个节点上都有键/值信息。
我希望能够比较这些树(交集、联合、差异……),它们会有数百万个节点。
哪种解决方案最适合?基于文档的存储 (MongoDB...) 还是 Graph DB (Neo4J...)?
【问题讨论】:
标签: mongodb tree graph-databases database nosql
图形数据库非常适合树形结构。在 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 来构建自己的递归算法来比较结构。
【讨论】: