2

目前我正在寻找一个可嵌入的数据库(C++,Win32),我发现 SQLite 非常迷人。但是,我想知道将文件路径与文件属性一起存储在 SQL 数据库中是否有意义。在服务器系统上,文件的数量可以从几百或几千到几百万或几十亿。这是用于探索磁盘内容的软件(但不是文件本身的内容)。

我正在考虑的是一个存储完整目录部分的表和另一个存储文件属性(包括名称)的表。然后后者将包含对“父”文件夹的反向引用。

我也在考虑的一件事是目录表是否应该存储每个目录的完整路径,这将导致存储冗余信息,例如:

ID | Name
0  | C:
1  | C:\Windows
2  | C:\Windows\System32
3  | C:\Windows\System32\config

代替:

ID | Name     | Parent
0  | C:       | NULL
1  | Windows  | 0
2  | System32 | 1
3  | config   | 2 

当然,我不能“贪婪”地保存存储/内存,也不能存储每个字符串(每个路径组件)的单个实例,除非有某种修剪或引用计数......

你认为哪一个更优秀,为什么?第二种方法不会造成性能损失吗?

此外,是否有任何项目是FLOSS并且已经实现了类似的东西(存储分层路径名和属性),最好已经使用 SQLite?


在我正在考虑的架构中,该文件C:\Windows\System32\config\SOFTWARE将由以下内容表示:

ID | Name   | Folder | Size    | Attributes | ...
42 | SYSTEM | 3      | 1024000 | 0x00000301 | ...
4

1 回答 1

4

SQLite 应该很容易处理这个问题。请参阅SQLite 的适当用途

我更喜欢您的表的第二种自连接形式。SQLite 应该有问题跟随包含在Parent字段中的 ID 回到ID(应该有一个索引)。但是该Name字段也应该有一个索引。当您将新条目插入表中时,这将启用对现有文件夹的快速查找。

于 2012-10-23T11:14:54.610 回答