存储#
每个 AiiDA 配置文件都定义了一个 * 存储器*,用于存储 provenance graph 中的所有数据。通常,存储空间由 database 和 repository 组成。provenance graph 数据本身主要持久化到数据库中,而附加到 node 的文件(或其他二进制内容)则存储在存储库中。
默认情况下,存储包括一个PostgreSQL数据库和一个 disk-objectstore container 文件存储库。然而,从AiiDA 2.0开始,这个存储空间可以通过插件定制,也就是说,如果需要,可以使用其他数据库和文件存储空间。AiiDA 本身有许多存储插件,每个插件都有自己的优缺点。本节将概述这些存储插件,并建议何时使用它们。
备注
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)