存储#

每个 AiiDA 配置文件都定义了一个 * 存储器*,用于存储 provenance graph 中的所有数据。通常,存储空间由 databaserepository 组成。provenance graph 数据本身主要持久化到数据库中,而附加到 node 的文件(或其他二进制内容)则存储在存储库中。

默认情况下,存储包括一个PostgreSQL数据库和一个 disk-objectstore container 文件存储库。然而,从AiiDA 2.0开始,这个存储空间可以通过插件定制,也就是说,如果需要,可以使用其他数据库和文件存储空间。AiiDA 本身有许多存储插件,每个插件都有自己的优缺点。本节将概述这些存储插件,并建议何时使用它们。

core.psql_dos

用于要求性能的生产项目的默认存储。

PostgreSQL 数据库

disk-objectstore 容器

优势

  • 支持 AiiDA 的所有功能

  • 性能良好

  • 自动数据库迁移

弱点

  • 需要运行服务(PostgreSQL)

core.sqlite_dos

易于为测试、演示和实验设置存储设备。

SQLite 数据库

disk-objectstore 容器

优势

  • 易于设置和备份

  • 无需运行服务

弱点

  • SQLite 的性能不如 PostgreSQL

  • 不支持某些 QueryBuilder 功能

core.sqlite_zip

存储在用于导出档案的单个 ZIP 文件中。

SQLite 数据库

disk-objectstore 容器

优势

  • 易于设置

  • 无需运行服务

弱点

  • 只读

  • 不支持某些 QueryBuilder 功能

core.sqlite_temp

临时存储,主要用于单元测试或演示。

SQLite 数据库

沙盒目录

优势

  • 无需运行服务

  • 自动清理

弱点

  • 会话关闭后,存储将被删除

  • 不支持某些 QueryBuilder 功能

备注

QueryBuilder 的以下功能不支持基于 SQLite 的存储:

  • filters 中使用 contains

  • get_creation_statistics 方法

core.psql_dos#

core.psql_dos 是默认的存储插件,建议用于所有生产工作。它使用 PostgreSQL 作为数据库,使用磁盘对象存储作为文件存储库。要使用该存储插件创建配置文件,请运行

verdi profile setup core.psql_dos

该命令要求 PostgreSQL 数据库已经存在并能连接到它。

小技巧

尝试使用 verdi quicksetup 命令自动创建 PostgreSQL 数据库。某些系统需要 root 访问权限才能这样做,如果无法获得 root 访问权限,命令就会失败。在这种情况下,应手动创建数据库(详见 创建数据库 )。创建完成后,可使用 verdi profile setup core.psql_dos 命令使用数据库创建配置文件。

core.sqlite_dos#

core.sqlite_dos 存储插件是 core.psql_dos 存储的替代品,适用于对性能要求不高的用例。它使用 SQLite 代替 PostgreSQL 数据库。由于 SQLite 数据库只是磁盘上的一个文件,不需要运行服务,因此更易于设置。

只需一条命令,就能创建使用该存储插件的完整运行配置文件:

verdi profile setup core.sqlite_dos -n --profile <PROFILE_NAME> --email <EMAIL>

<PROFILE_NAME> 替换为所需的配置文件名称,将 <EMAIL> 替换为默认用户的电子邮件。

SQLite 数据库和磁盘对象存储容器都存储在 verdi profile setup core.sqlite_dos 命令 --filepath 选项指定的目录中。默认情况下,这是 $AIIDA_PATH/repository 定义的目录内的一个文件夹,其形式为 sqlite_dos_{UUID} ,其中后缀是随机生成的十六进制 UUID。自动生成目录的例子是 .aiida/repository/sqlite_dos_962e87af09b746c985335cb77acaa553

备注

$AIIDA_PATH 环境变量 determines the location of the configuration directory ,默认为用户主文件夹中的 .aiida

core.sqlite_zip#

core.sqlite_zip 是用于创建导出归档的存储插件。它的功能与 core.sqlite_dos 插件大致相同,因为它使用 SQLite 数据库和磁盘对象存储容器,只不过一切都被捆绑在 zip archive 中。

存储插件不适合正常使用,因为存档一旦创建,就会变成只读。不过,由于它在其他方面的功能与普通存储插件相同,因此可以用它创建一个配置文件,以便轻松查看其内容:

verdi profile setup core.sqlite_zip -n --profile <PROFILE_NAME> --filepath <ARCHIVE>

<PROFILE_NAME> 替换为所需的配置文件名称,将 <ARCHIVE> 替换为存档文件的路径。现在就可以像其他预案一样加载创建的预案,并像往常一样查看 provenance graph 的内容。

core.sqlite_temp#

core.sqlite_temp 存储插件利用内存 SQLite 数据库和沙盒文件夹来存储数据。一旦配置文件被垃圾回收(卸载或关闭 Python 解释器),数据就会自动销毁。因此,该存储插件主要用于演示和测试目的,不需要持久存储。

创建和加载新的临时配置文件的方法如下:

from aiida import load_profile
from aiida.storage.sqlite_temp import SqliteTempBackend

temp_profile = SqliteTempBackend.create_profile('temp-profile')
load_profile(temp_profile, allow_switch=True)