首页 / 资讯中心 / 文章详情

Prisma 技术 FAQ 全解析:自托管、数据库连接、备份策略与 GraphQL 优势

Prisma 技术 FAQ 全解析:自托管、数据库连接、备份策略与 GraphQL 优势 ★ FEATURED ARTICLE
后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载本文以 Prisma 1.2 版本文档中的 Technical FAQ 为核心骨架系统解答开发者最常问的五大技术问题Prisma 能否自托管、如何接入已有数据库、支持哪些数据库、GraphQL 带来哪些收益以及数据备份如何落地。同时结合本仓库prisma1的 CLI 源码、数据库连接器实现与数据导入导出参考文档给出可验证的底层依据与实操指引。读完本文你将掌握 Prisma 服务自托管与数据库接入的完整路径并理解其数据导入导出NDF机制的细节。一、Prisma 可以自己托管吗答案是肯定的。Prisma 官方 FAQ 明确指出托管 Prisma 基本有两种方式自行托管DIY使用任意主流云服务商如 Digital Ocean、AWS、Google Cloud 等自行部署使用 Prisma CloudFAQ 撰写时为coming soon状态。从当前仓库的源码结构来看Prisma 服务端是一个可独立部署的进程仓库中提供了完整的本地化部署配套资源server/docker-compose 目录下为各数据库准备了开箱即用的 Docker Compose 编排文件覆盖mysql、postgres、mongo、sqlite四种后端如 mysql docker-compose 配置server/images 目录包含prisma-local、prisma-prod、prisma-image-shared三类镜像相关代码说明 Prisma 服务端既可以跑在本地开发环境也可以打包为生产镜像部署到任意云主机。这种服务与数据库解耦的架构意味着Prisma 始终作为数据库之上的一层 API 网关运行数据库本身仍由你完全掌控这一点在后续备份章节会再次强调。二、如何将数据库连接到 PrismaFAQ 给出的接入路径分为三个明确步骤以 MySQL 为例把 SQL schema 翻译成 GraphQL 数据模型SDL用 SDLSchema Definition Language 描述你的数据模型以该数据模型部署一个 Prisma service如果数据库此前已有数据将数据导入 Prisma service参考 Data Import 文档。从本仓库来看第 1、2 步对应的核心配置载体是prisma.yml与datamodel.graphql参见 Data Import 文档中的示例结构而第 3 步的导入机制在仓库中有完整实现与文档支撑值得展开说明。2.1 导入数据CLI 方式Prisma CLI 提供prisma import命令它接受一个选项--data短写-d指向包含待导入数据的目录可以是普通目录或 zip 压缩目录。CLI 方式的优势在于可一次上传多个文件、自动复用 CLI 的认证机制无需手动附带 token、支持暂停与恢复导入。其实现位于 cli/packages/prisma-cli-core/src/commands/import/index.ts。2.2 导入数据原始 Import API原始导入 API 暴露在服务 HTTP 端点的/import路径下例如http://localhost:60000/my-app/dev/importhttps://database.prisma.sh/my-app/prod/import单次请求最多上传 10 MB 的 JSON 数据NDF 格式且必须在 HTTPAuthorization头中携带认证 token。一个通用化的curl请求模板如下curl __SERVICE_ENDPOINT__/import \ -H Content-Type: application/json \ -H Authorization: Bearer __JWT_AUTH_TOKEN__ \ -d {valueType:__NDF_TYPE__,values: __DATA__ } \ -sSv2.3 两个必须知道的约束Data Import 文档 对导入行为给出了两条重要警告导入不具备幂等性每次导入都会新增数据绝不会更新已有节点。同一个id被重复导入会导致未定义行为甚至破坏服务API 不做数据校验原始 import API 不校验数据合法性只有使用 CLI 导入时才会执行基础校验。服务维护者有责任保证导入数据的有效性——一个实用技巧是先导出一个相同数据模型服务的 export 数据作为格式参考。三、Prisma 支持哪些数据库FAQ 撰写时1.2 版本文档明确说明MySQL 是 Prisma 支持的首个数据库。而本仓库的 prisma-cli-core README 提供了更完整的规划信息MySQL 开箱即用更多数据库连接器随后推出包括 PostgreSQL、MS SQL、MongoDB、Oracle、ArangoDB、Neo4j、DynamoDB、Elastic Search、Redis、CockroachDB、Cassandra 等。从当前仓库的源码结构看连接器生态已经远超仅 MySQL的阶段server/connectors/api-connector-mysql 与 server/connectors/deploy-connector-mysql 提供 MySQL 支持server/connectors/api-connector-postgres 与 server/connectors/deploy-connector-postgres 提供 PostgreSQL 支持server/connectors/api-connector-mongo 与 server/connectors/deploy-connector-mongo 提供 MongoDB 支持此外还存在通用 JDBC 连接器api-connector-jdbc、deploy-connector-jdbc以及 SQLite 连接器。也就是说FAQ 中目前仅支持 MySQL的表述对应的是 1.2 版本时期的状态当前仓库已经演进为多数据库连接器架构。如果你希望优先支持某种数据库FAQ 建议通过提交 feature request 或对已有 issue 进行 1 投票来影响路线图。四、GraphQL 给应用开发带来哪些收益FAQ 用五个要点概括了 GraphQL 的核心价值这里完整展开按需取数减少网络流量客户端应用可以精确请求 API 返回自己需要的那部分数据从而降低网络传输量、提升性能前端样板代码显著减少接入 GraphQL API 时可直接使用 Apollo Client、Relay 等客户端库开箱即用地获得缓存、乐观 UI 更新、实时功能、离线支持等能力强类型 API 层GraphQL API 基于强类型的 schema开发者可以确信 API 允许哪些操作、服务端会返回什么形状的响应降低联调出错概率丰富的工具生态例如 GraphQL Playground 提供交互式 IDE可用于向 API 发送查询与变更即使非技术人员也能上手GraphQL bindings 则允许像拼乐高积木一样组合已有的 GraphQL API相关介绍见 docs/1.2/06-GraphQL-Ecosystem/02-GraphQL-Binding 与 03-GraphQL-Playground活跃的社区驱动演进GraphQL 生态由出色的社区持续推动为 GraphQL 的未来演进和新工具开发投入了大量思考与努力。这些收益与 Prisma 的定位一脉相承Prisma 把数据库暴露为生产可用的 GraphQL CRUD API开发者得以直接享受上述全部优势。五、备份如何工作FAQ 给出的备份思路分两个层面本仓库均提供了具体实现佐证。5.1 数据库原生备份始终握有完全控制权由于 Prisma 只是数据库之上的一层你仍然完全拥有数据库本身因此可以自由选择自己的备份策略如使用 MySQL 的 mysqldump、云厂商快照等。这一点在 CLI 源码中也有印证export 命令实现 对 MongoDBdocument store直接提示请使用数据库原生导出功能如 mongodump并对 MySQL/Postgres 场景提示优先使用mysqldump/pg_restore等原生工具。5.2 数据导出从 API 层创建持续备份Prisma 还提供数据导出功能可在 API 层为数据创建持续备份。详见 Data Export 文档CLI 方式prisma export命令接受--export-path短写-e指定导出 zip 文件路径。它自动复用 CLI 认证、直接把数据写入文件系统并在数据量较大时自动管理游标cursor无需手工处理多次请求。导出数据遵循 NDF 格式按nodes、lists、relations三个目录存放可直接导入 schema 完全相同的服务例如为dev环境准备测试数据。当前仓库中该命令的实现位于 cli/packages/prisma-cli-core/src/commands/export/index.ts其行为与 1.2 文档略有演进不指定路径时默认生成export-ISO时间戳.zip且选项已调整为--path/-p生成后还会提示可用prisma import --data exportPath导入到新服务。原始 Export API 方式导出端点位于服务 HTTP 端点的/export路径例如http://localhost:60000/my-app/dev/export。单次响应最多返回 10 MB 数据请求体如下{ fileType: nodes, cursor: { table: 0, row: 0, field: 0, array: 0 } }cursor中的值描述数据库中的偏移量。每次导出响应都会返回新游标有两种状态终止导出完成table、row、field、array全部为-1未终止还有更多数据任一值不等于-1说明本次 10 MB 上限已满把返回的cursor原样作为下一次请求的输入即可继续导出。对应curl请求模板curl __SERVICE_ENDPOINT__/export \ -H Content-Type: application/json \ -H Authorization: Bearer __JWT_AUTH_TOKEN__ \ -d {fileType:__NDF_TYPE__,cursor: {table:__TABLE__,row:__ROW__,field:__FIELD__,array:__ARRAY__}} } \ -sSv5.3 深入理解 NDF导入导出的中间格式无论是导入还是导出数据都遵循Normalized Data FormatNDF详见 Normalized Data Format 文档。NDF 把数据按三种 value type 拆分类型内容values 元素结构nodes节点的标量字段{ _typeName: STRING, id: STRING, scalarField: ANY, ... }lists节点的标量列表字段{ _typeName: STRING, id: STRING, scalarListField: [ANY] }relations通过关系字段连接两个节点由恰好两个元素组成的数组对[ { _typeName: STRING, id: STRING, fieldName: STRING }, ... ]每个 NDF JSON 文档都是包含valueType与values两个键的对象。以如下数据模型为例type User { id: String! unique firstName: String! lastName: String! hobbies: [String!]! partner: User }nodes 示例导入两个User的标量字段{ valueType: nodes, values: [ {_typeName: User, id: johndoe, firstName: John, lastName: Doe}, {_typeName: User, id: sarahdoe, firstName: Sarah, lastName: Doe} ] }lists 示例为两个User导入hobbies列表字段注意每个对象一次只能为一个列表字段提供值{ valueType: lists, values: [ {_typeName: User, id: johndoe, hobbies: [Fishing, Cooking]}, {_typeName: User, id: sarahdoe, hobbies: [Biking, Coding]} ] }relations 示例通过partner关系字段连接两个User节点每个元素是恰好包含两个对象的数组对{ valueType: relations, values: [ [ { _typeName: User, id: johndoe, fieldName: partner }, { _typeName: User, id: sarahdoe, fieldName: partner } ] ] }_typeName对应数据模型中的 SDL 类型名id是节点标识fieldName/scalarField对应 SDL 类型中的字段名。掌握这三种 value type 的结构是手工编写导入数据、或解读导出结果的基础。六、小结这篇 FAQ 围绕五个技术主题给出了明确的结论Prisma 支持自托管云服务商或 Prisma Cloud接入数据库需要SQL schema → SDL 数据模型 → 部署 service → 导入数据三步走MySQL 是首批支持的数据库当前仓库已演进出多连接器架构GraphQL 在按需取数、前端减负、强类型 API、工具生态与社区演进五个层面带来收益备份既可以走数据库原生方案也可以借助prisma export与原始 export API 在 API 层建立持续备份。对于有数据迁移、测试数据准备与备份需求的团队建议进一步阅读 Data Import、Data Export 与 NDF 规范 三篇参考文档并结合 CLI export 源码 验证实际行为。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 技术 FAQ 全解析自托管部署、数据库接入、GraphQL 优势与备份策略Prisma 技术 FAQ 全解析自托管部署、数据库接入、GraphQL 优势与备份策略 本篇技术指南以 Prisma仓库 prisma1 官方 FAQ后端数据库GraphQLPrisma 技术 FAQ 实战指南自托管、数据库接入、GraphQL 优势与备份策略Prisma 技术 FAQ 实战指南自托管、数据库接入、GraphQL 优势与备份策略 本指南以 Prisma 官方技术 FAQ 为主体系统解答开发者最常见后端数据库GraphQLPrisma 技术 FAQ 深度解析自托管、数据库接入、GraphQL 优势与数据备份机制Prisma 技术 FAQ 深度解析自托管、数据库接入、GraphQL 优势与数据备份机制 本文以 docs/1.14/05 FAQ/02 Technical后端数据库GraphQL创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
阅读完成 · 觉得有帮助?
咨询建站