数据库

Payload 是数据库无关的,这意味着你可以在 Payload 熟悉的 API 背后使用任何类型的数据库。Payload 设计通过 Database Adapter(数据库适配器)与你的数据库交互,这是一个薄层,负责将 Payload 的内部数据结构转换为你的数据库原生数据结构。

目前,Payload 官方支持以下 Database Adapter:

要配置 Database Adapter,请在你的 Payload Config 中使用 db 属性:

import { buildConfig } from 'payload'
import { mongooseAdapter } from '@payloadcms/db-mongodb'

export default buildConfig({
  // ...
  // highlight-start
  db: mongooseAdapter({
    url: process.env.DATABASE_URI,
  }),
  // highlight-end
})

提醒: Database Adapter 是一个外部依赖项,必须与 Payload 分开安装在你的项目中。你可以在各自的文档中找到每个 Database Adapter 的安装说明。

选择数据库

在选择适合你项目和工作负载的数据库技术和托管选项时,有几个因素需要考虑。理论上 Payload 可以支持任何数据库,但具体使用哪个数据库由你决定。

主要有两类数据库可供选择:

非关系型数据库

如果你的项目包含大量动态字段,并且你希望 Payload 能够确保文档间的数据完整性,MongoDB 会是一个理想选择。使用 MongoDB 时,无论你是否启用了本地化功能、拥有多少区块或数组字段,你的 Payload 文档在数据库中都将存储为单一文档。这意味着数据库中的数据形态会高度匹配你的字段架构,存储和检索数据的复杂度极低。

在以下情况下推荐使用 MongoDB:

  • 你偏好数据库结构的简洁性
  • 你不想通过 DDL 变更来保持生产/测试环境数据库同步
  • 项目中大部分(或全部)内容都启用了本地化
  • 大量使用了数组区块hasMany 选择字段

关系型数据库

许多项目可能需要更严格的数据库架构,要求数据形态在数据库层面就得到强约束。例如,当你的数据结构已知且相对"扁平",且预期不会频繁变更时,Postgres 这类关系型数据库会非常适合你的工作负载。

在以下情况下推荐使用 Postgres 或 SQLite 等关系型数据库:

  • 你熟悉数据迁移操作
  • 需要在数据库层面强制保证数据一致性
  • 集合之间存在大量关联关系且需要强制约束这些关系

Payload 差异说明

需要注意的是,几乎所有 Payload 功能在我们官方支持的所有数据库适配器中都可用,包括本地化数组区块等。目前唯一在 SQLite 中还不支持的是点字段,但该功能应该很快就会添加。

你可以根据项目需求自由选择要使用的数据库。Payload 不会对你最终选择哪种数据库做出限制。