1

一个 Windows 桌面应用程序,我所在的开发团队使用旧版 MFC CArchive 作为其应用程序文件格式,将文本文件和二进制文件序列化到磁盘和从磁盘中读取。该应用程序用于本地化这些文本/二进制文件中包含的字符串,CArchive 封装了一个翻译“项目”,因此它被生成为一个包含一个或多个这些子文件的整体文件。

这种文件格式在很多方面都显示了它的时代,我们正在寻求改变为更现代的东西。我们主要担心的是它速度慢并且占用大量内存;这不是随机访问,因此访问存档中的任意文件甚至只是生成目录列表都需要将整个内容加载到内存中,因此操作存档的空间和时间消耗取决于其大小,并且不可行存档的就地更新。

最后,扩展格式是痛苦的,因为它涉及到我们在代码中乱扔条件语句,这些条件语句根据存档的版本标记的值将某些字段(或不)序列化到存档或从存档序列化。

我花了一些时间寻找替代方案,其中最突出的是 ZIP/7Z 或 SQLite,因为 ZIP 已经内置了大部分文件管理/索引功能,而 SQLite 将是存储、检索的理想选择和搜索字符串,所以我认为这两种技术的某种组合可能是要走的路。

据我所知,诀窍是以这样一种方式组织或分区 SQLite DB每个文件,我不确定。

有没有其他人尝试过这样的事情,如果是这样,有什么建议吗?

谢谢

4

1 回答 1

1

作为基于文件的数据库,SQLite 可用于实现应用程序文件格式

如果您只想存储嵌入文件,您可以将一堆 blob 放入一个表中(参见sqlar示例)。但是如果你想对这些文件的内部结构进行建模,你当然可以有更复杂的表。

要将搜索限制为文件,您只需要存储一些东西来识别文件:

CREATE TABLE Strings (
    StringID  INTEGER PRIMARY KEY,
    FileID    REFERENCES FileTable(FileID),
    Value     TEXT,
    [...]
);

这样您就可以限制您的查询:

SELECT * FROM Strings WHERE Value = 'hello' AND FileID = 42;

如果您不想搜索整个字符串而是搜索其中的单词,请考虑使用全文搜索扩展

于 2017-03-27T14:24:34.683 回答