使用Neo4j对文件系统进行索引是否有意义?

6
我正在开发一个基于Java的备份客户端,它会在文件系统上扫描文件,并将找到需要备份的目录和文件名填充到Sqlite数据库中。使用Neo4j而不是Sqlite是否更加合理?对于这个应用程序来说,它是否更具性能和易用性?我认为,由于文件系统是一棵树(或者如果您考虑符号链接,则是一个图形),因此图形数据库可能比较适合?Sqlite数据库模式仅定义了两个表:一个用于目录(包含全路径和其他信息),另一个用于文件(只有名称,且在目录表中具有外键),因此相对简单。该应用程序需要索引数百万个文件,因此解决方案需要快速执行。
3个回答

3
据我所知,Neo4j 最早的应用之一就是作为 CMS 系统的一部分来执行此操作。Lucene 是 Neo4j 的索引后端,它将允许您构建任何可能需要的索引。您应该阅读相关资料并直接向他们询问。

3
只要您可以使用存储在文件系统路径上的字符串匹配执行数据库操作,使用关系型数据库是有意义的。当数据模型变得更加复杂,您实际上无法使用字符串匹配来查询数据,而需要遍历图形时,使用图形数据库将使此过程更加容易。

3
这取决于您想在这个数据集上运行的查询。在图形中,每个目录和文件都将是其自身的节点,存储元信息,并且关系可能会保存文件名(因为该节点可能还有符号链接或硬链接),并带有不同的名称。 - Michael Hunger

0

我正在考虑在文件系统上索引数据存储的类似解决方案。关于上面的查询的评论是正确的。

最坏情况查询的例子:

对于sqlite:

  • 如果你有大量深入文件系统的子目录,你在sqlite上的空间需求将不会是最优的:为每个小的子目录保存完整路径(比如考虑代码项目)
  • 如果你需要移动一个目录,越靠近根节点,你需要做的工作就越多,所以这不会像neo4j一样是O(1)
  • 你能在sqlite上进行多线程扩展吗?

对于neo4j:

  • 每次搜索完整路径时,你需要将其拆分成组件,并构建一个包含路径所有元素的cypher查询。
  • 数据模型可能会比2张表更复杂:所有不同的对象,然后是目录-目录关系,文件-目录关系,符号链接关系

问候,hj


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接