数据库
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:
关系型数据库
许多项目可能需要更严格的数据库架构,要求数据形态在数据库层面就得到强约束。例如,当你的数据结构已知且相对"扁平",且预期不会频繁变更时,Postgres 这类关系型数据库会非常适合你的工作负载。
在以下情况下推荐使用 Postgres 或 SQLite 等关系型数据库:
- 你熟悉数据迁移操作
- 需要在数据库层面强制保证数据一致性
- 集合之间存在大量关联关系且需要强制约束这些关系
Payload 差异说明
需要注意的是,几乎所有 Payload 功能在我们官方支持的所有数据库适配器中都可用,包括本地化、数组、区块等。目前唯一在 SQLite 中还不支持的是点字段,但该功能应该很快就会添加。
你可以根据项目需求自由选择要使用的数据库。Payload 不会对你最终选择哪种数据库做出限制。