sqlite_zip
(档案) 格式#
The SqliteZipBackend
is the storage format used for the AiiDA archive,
whose design draws from consideration outlined in AEP 005: Improved export archive format.
AiiDA 存档是一种单一的文件格式(扩展名为 .aiida
),用于 AiiDA provenance graph 的长期存储。它提供了一个数据存储后台,集成了数据库和文件存储库。
标准格式为 ZIP 压缩包,包含以下文件:
metadata.json
文件,其中包含存档版本信息。包含 AiiDA 数据库的
db.sqlite3
文件。包含 AiiDA 文件库的
repo/
目录。
写入中心目录时,元数据和数据库记录位于文件顶部。读取 Zip 文件时,首先从包含中心目录起始字节位置的底部开始,然后向下扫描中心目录,提取每个文件的记录。只提取元数据/数据库时,只需扫描该记录,然后断开并直接解压该文件的字节数组。这样,我们就不必扫描存储库文件的所有记录了
与 psql_dos 格式 相反,这种格式是 “read-only”,因为压缩文件一旦创建就不能修改。
元数据 schema#
该文件包含 important 信息,是正确理解 db.sqlite3`
所必需的。它用于避免 AiiDA 不同版本之间的不兼容。
下面是 metadata.json
的示例:
{
"export_version": "1.0",
"aiida_version": "2.0.0",
"key_format": "sha256",
"compression": 6,
"ctime": "2021-12-01T03:43:11.909061",
"creation_parameters": {
"entities_starting_set": {},
"include_authinfos": false,
"include_comments": true,
"include_logs": true,
"graph_traversal_rules": {
"input_calc_forward": false,
"input_calc_backward": true,
"create_forward": true,
"create_backward": true,
"return_forward": true,
"return_backward": false,
"input_work_forward": false,
"input_work_backward": true,
"call_calc_forward": true,
"call_calc_backward": true,
"call_work_forward": true,
"call_work_backward": true
},
"entity_counts": {
"users": 8,
"computers": 14,
"groups": 2,
"nodes": 109547,
"links": 159905,
"group_nodes": 219094
}
}
}
在文件开头,我们可以看到存档文件的版本(在 export_version
下)和 AiiDA 代码的版本。引入新的存档版本有几个不同的原因,一般可能是在以下情况:
每个实体可导出或不可导出的内容发生变化、
更新或更改数据库和/或存档 schemes、
或标准化导出的属性值在 AiiDA 中更新。
重要
对于 0.3 及更早版本的存档,建议您手动尝试使自己相信迁移是完全成功的。虽然所有迁移都经过了测试,并尽量包含合理的边缘情况,但从 0.3 版到 0.4 版的迁移过程错综复杂,遗漏边缘情况测试的可能性非常大。值得注意的是,如果您遇到问题,请在 GitHub <https://www.github.com/aiidateam/aiida_core/issues/new> 上报告。
备注
如果您已将存档文件迁移到最新版本,metadata.json
中可能会多出一个条目。这只是说明文件是从哪个存档版本迁移过来的。
备注
如果你提供了一个当前 AiiDA 代码不支持的旧存档文件,verdi archive import
将自动尝试通过调用 verdi archive migrate
来迁移存档。
存储库格式#
储存库由 ZipfileBackendRepository
读取。
压缩文件应包含密钥格式为``repo/<sha256 hash>``,即以文件内容的 sha256 哈希值命名的文件,位于 repo
目录内。
数据库 schema#
schema 数据库旨在直接反映 psql_dos 格式 的数据库。唯一的区别在于 SQLite 与 PostgreSQL 对某些数据类型的处理方式不同:
b6b00fe1 -> 74ac7254
d2399652 -> 57fd7c8e
bb7f15a3 -> fe7247f1
此外,SQLite 中不可能使用 varchar_pattern_ops 索引。
表格#
sqla-model:: ~aiida.storage.sqlite_zip.models.DbUser sqla-model:: ~aiida.storage.sqlite_zip.models.DbNode sqla-model:: ~aiida.storage.sqlite_zip.models.DbLink sqla-model:: ~aiida.storage.sqlite_zip.models.DbGroup sqla-model:: ~aiida.storage.sqlite_zip.models.DbGroupNodes sqla-model:: ~aiida.storage.sqlite_zip.models.DbComputersqlite_zip.models.DbGroupNodes sqla-model:: ~aiida.storage.sqlite_zip.models.DbComputer sqla-model:: ~aiida.storage.sqlite_zip.models.DbAuthInfo sqla-model:: ~aiida.storage.sqlite_zip.models.DbComment sqla-model:: ~aiida.storage.sqlite_zip.models.DbLog