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/ 目录。

../../_images/archive-file-structure.svg

图 32 sqlite_zip 压缩文件格式。#

写入中心目录时,元数据和数据库记录位于文件顶部。读取 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