c++ - SQLite 能胜任这项任务吗?存储路径名和文件属性

标签 c++ windows sqlite

目前我正在寻找一个嵌入式数据库(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 | ...

最佳答案

SQLite 应该能够轻松处理这个问题。请参阅Appropriate Uses For SQLite .

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

关于c++ - SQLite 能胜任这项任务吗?存储路径名和文件属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13029057/

相关文章:

android - Android 上的 SQLiteOpenHelper.getWriteableDatabase() 空指针异常

c# - 如何通过 P/Invoking 在 Windows 8/8.1 中以编程方式更改视觉主题?

Windows cmd - 使用 oneliner 与用户输入提示 [npm] 交互

java - 更新表中的确定字段

c++ - CSocket 在发送时不阻塞

ruby - 如何从安装在 linux 上的 ruby​​ 在 windows 操作系统上执行控制台应用程序?

android - 如何插入到多对多关系中。 SQLite

c++无法将数据放入 vector 中

c++ - 测量执行简单指令的时间

c++ - 为什么我基于堆栈的代码实现比递归慢得多?