使用neo4j索引文件系统是否有意义

时间:2011-06-21 08:38:04

标签: database database-design neo4j graph-databases

我正在研究基于Java的备份客户端,该客户端扫描文件系统上的文件,并使用它找到要备份的目录和文件名填充Sqlite数据库。使用neo4j而不是sqlite是否有意义?它是否更适用于此应用程序并且更易于使用。我在想因为文件系统是树(或者如果考虑符号链接的图形),gaph数据库可能是合适的吗? sqlite数据库模式只定义了2个表,一个用于目录(完整路径和其他信息),另一个用于文件(名称只包含用于包含目录表中目录的外键),因此它相对简单。

应用程序需要索引数百万个文件,因此解决方案需要快速。

3 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

据我所知,Neo4j的最早用途之一是将其作为Neo4j源自CMS系统的一部分。

Nece4j的索引后端Lucene将允许您构建可能需要的任何索引。

你应该阅读并直接询问他们。

答案 2 :(得分:0)

我正在考虑一种类似的解决方案来索引文件系统上的数据存储。备注上述查询是对的。

最坏情况查询的示例:

对于sqlite:

  • 如果在fs深处有大量子目录,那么sqlite上的空间需求将不是最佳的:保存每个小子目录的完整路径(例如,考虑代码项目)
  • 如果你需要移动一个目录,离根越近,你需要做的工作就越多,所以不会像neo4j那样是O(1)
  • 你可以在sqlite上进行多线程扩展吗?

对于neo4j:

  • 每次搜索完整路径时,都需要将其拆分为组件,并使用路径的所有元素构建密码查询。
  • 数据模型可能比2个表更复杂:所有不同的对象,然后是dir-in-dir关系,file-in-dir关系,符号链接关系

问候,hj