【发布时间】:2012-07-25 10:36:20
【问题描述】:
我需要解决的问题是将文件系统树的等价物存储到数据库中(以加快搜索操作)。树包含 +400.000.000 个 inode,对于每个 inode,我需要存储一些元信息(平均文件路径为 100 字节,元信息约为 50 字节)。
将在 C++ 程序中进行以下操作:
1. SELECT(预期结果:~200.000)
2. 一次插入约 20.000 条记录
3. 一次删除约 20.000 条记录。
到目前为止,我只考虑了关系数据库:MySQL、MariaDB、PostgresSQL(到目前为止我还没有进行任何测试,我仍处于“信息收集”阶段)并且我阅读了一些关于将树存储在这样一个数据库。
第一个选项
- 邻接表模型:表中的每一项都包含一个指向其父项的指针。
http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/
第二个选项
- 将所有目录存储在单独的表中
- 为其余文件创建一个单独的表,并带有指向它们所属目录的指针
所以表格将如下所示:
目录表:
/home
/home/test/
文件表:
file1
file2
我的问题:
1.你知道另一种适合在关系数据库中存储大树的模型吗?
2. 如果我要搜索 NoSQL DB,我应该从哪里开始?
非常感谢。
【问题讨论】:
-
您可以查看分层数据库,例如 LDAP(OpenDS、OpenDJ、OpenLDAP)。你想优化什么样的搜索操作?例如。在树中的任何位置搜索具有给定名称的文件以及搜索具有一组限制在子树中的属性的文件,最好通过稍微不同的数据组织来实现。
-
嗨乔尼。因为我们每次操作都要对单个文件(从子树)进行大量搜索,所以我们认为最好从内存中的子树加载所有文件(比如说,200.000 个条目),尽可能减少内存占用,然后在内存中进行所有查找。否则(每个文件单选)效率太低。