6

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

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

4

3 回答 3

3

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

于 2011-06-21T13:13:55.847 回答
3

据我了解,Neo4j 最早的用途之一就是作为 CMS 系统 Neo4j 的一部分。

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

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

于 2011-07-22T11:39:04.360 回答
0

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

最坏情况查询示例:

对于 SQLite:

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

对于neo4j:

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

问候,hj

于 2017-10-01T05:57:12.467 回答