2011-06-21 61 views
5

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

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

回答

3

只要您可以在存储的文件系统路径上基本上使用字符串匹配执行数据库操作,使用关系数据库就很有意义。数据模型变得越来越复杂的时候,你实际上不能使用字符串匹配来进行查询,但需要遍历一个图形,使用图形数据库将使这变得更容易。

+3

它真的取决于你想在这个数据集上运行的查询。在一个图形中,每个目录和文件都将是它自己的存储元信息的节点,并且这个关系可能会以不同的名称存储文件名(因为可能存在符号或硬链接以及该节点)。 –

3

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

Lucene是Neo4j的索引后端,允许您构建任何可能需要的索引。

您应该阅读并直接询问。

+0

哇,neo4j使用Lucene进行索引?很酷! –

0

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

最坏的情况下查询的例子:

SQLite的:

  • ,如果你有子目录大量深的地方到FS,在SQLite的你的空间需求将不是最佳:保存完整如果你需要移动一个目录,越接近根目录,你需要做的工作越多,这样就不会是一个O(1)个子目录,因为它将与neo4j
  • ca你在sqlite上做多线程来扩展吗?

对于Neo4j的:

    每次搜索的完整路径时
  • ,你需要把它拆分成组件,并建立一个暗号查询与路径的所有元素。
  • 数据模型可能比2个表更加复杂:所有不同的对象,然后DIR-在-dir的关系,文件在-dir的关系,符号链接关系

问候,HJ

相关问题