后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载数据库连接器Connector是 Prisma server 与底层数据库之间的桥梁它负责把 Prisma server 连接到 MySQL、PostgreSQL 等关系型数据库。在 Prisma 1.x 架构中选择连接器意味着同时回答两个关键问题数据库是否支持多租户Multitenancy以及数据库结构由谁来管理Prisma 迁移还是外部应用。读完本文你将掌握连接器的两大核心决策模型、MySQL 与 Postgres 连接器的完整配置方式以及如何在 Docker 环境下从零搭建一个可用的 Prisma server。连接器是什么连接器Connector是 Prisma server 与数据库之间的适配层。每当 Prisma server 需要对数据库执行读写、部署或结构迁移时请求都会经过连接器转换为对应数据库方言的 SQL或 MongoDB 的查询语句。在 Prisma 1.x 中数据库层面的能力差异被连接器抽象掉使上层的 Prisma API 能以统一的 GraphQL 形式对外提供服务。从当前仓库的源码结构可以印证这一点连接器被划分为两类分别服务于 Prisma 的两个核心子系统API 连接器server/connectors/api-connector-*负责 Prisma API 层的 CRUD、关系查询、聚合等运行时数据访问例如 api-connector-mysql、api-connector-postgres、api-connector-mongo 等。部署连接器server/connectors/deploy-connector-*负责prisma deploy时对数据库 schema 的创建、修改与迁移例如 deploy-connector-mysql、deploy-connector-postgres、deploy-connector-mongo。连接器的具体加载逻辑集中在 ConnectorLoader.scala它会读取 Prisma 配置中的connector字段将mysql、postgres、sqlite、mongo等字符串分别映射到对应的 API 连接器与部署连接器实现如果遇到未知的 connector 名称则直接抛出Unknown connector错误。这也解释了为什么在配置文件中 connector 字段的值必须是mysql、postgres这类固定标识。决策一多租户还是单租户Multitenancy vs Singletenancy连接数据库时首先要回答的问题这个数据库是否需要支持多个相互隔离的 Prisma service多租户模式Multitenancy如果一个数据库被配置为多租户模式那么每当一个新的 service 被部署到该数据库时Prisma 都会为它创建一个全新的 database schema。也就是说每个 service 的数据都存放在自己独立的 schema 中彼此完全隔离。这个 schema 的命名规则是将 service 名称与 stage 名称组合而成。例如部署一个名为myservice、stage 为dev的 servicePrisma 会为该 service 生成一个类似myservice$dev的独立 schema与myservice$prod等其它 stage 互不干扰。这种模式非常契合多环境、多服务的团队协作场景——同一台数据库服务器可以安全地承载多个 Prisma service而无需担心表名冲突或数据串扰。单租户模式Singletenancy如果数据库运行在单租户模式则必须在配置 Prisma server 时就明确指定 database schema 的名称所有部署到该数据库的 service 都会共享同一个 schema。单租户模式最典型的适用场景是你已有一个被现有应用管理的存量数据库希望用 Prisma 为该数据库生成一个 GraphQL API而数据库本身的结构仍由原应用掌控。此时多租户的 schema 隔离反而是负担直接指向已有的 schema 才能让 Prisma 与现有应用读写同一份数据。从当前仓库的部署连接器实现如 deploy-connector-jdbc可以看出Prisma 在启动时会基于连接配置初始化数据库 schema例如managementSchema、数据库名等内部元数据多租户与单租户的差异最终体现在 schema 的定位与创建策略上。决策二迁移还是内省Migrations vs Introspection第二个决策决定了数据库结构由谁来治理。启用迁移Migrations当迁移被启用时每次执行prisma deploy部署 servicePrisma 都会自动迁移已连接数据库的结构使其与 Prisma API 的 数据模型data model 保持一致。在这种模式下Prisma CLI 成为管理数据库结构的唯一主入口——你在数据模型文件GraphQL SDL中声明的 type、关系、枚举等会被转换为对应数据库的建表、加列、建索引等操作。这带来一个明显优势开发者可以在数据模型中用声明式的方式演进数据库结构配合prisma deploy完成应用与数据库的同步升级无需手工编写 DDL。关闭迁移使用内省Introspection对于已经归属现有应用的存量数据库更合理的做法是配置 Prisma 不去迁移数据库结构。此时prisma deploy不会改动数据库Prisma CLI 会转而使用**内省introspection**机制读取数据库中真实的 schema并将其翻译成一份对应的数据模型文件供 Prisma API 使用。这种以数据库为准的反向工作流让 Prisma 可以优雅地接入遗留系统——数据库继续由原应用控制Prisma 只负责在其上叠加一层 GraphQL API。配置MySQL 与 Postgres 连接器在 Prisma 1.x 中连接器的配置位于启动 Prisma server 所用的docker-compose.yml文件内通过PRISMA_CONFIG环境变量注入。配置的核心部分是databases节点每个数据库条目描述一个连接器实例。版本能力说明以本仓库对应文档为准在本版本中MySQL 连接器目前仅支持多租户 启用迁移的组合Postgres 连接器支持多租户 启用迁移也支持单租户 关闭迁移。更多组合方式在后续版本中才会逐步开放。MySQL 连接器配置以下是一个完整的 MySQL 连接器配置示例来源02-MySQL.mdversion: 3 services: prisma: image: prismagraphql/prisma:1.13 restart: always ports: - 4466:4466 environment: PRISMA_CONFIG: | managementApiSecret: my-server-secret-123 port: 4466 databases: default: connector: mysql host: mysql port: 3306 user: root password: prisma migrations: true managementSchema: management mysql: image: mysql restart: always environment: MYSQL_USER: root MYSQL_ROOT_PASSWORD: prisma volumes: - mysql:/var/lib/mysql volumes: mysql: ~各关键参数说明参数说明connector: mysql指定连接器类型为 MySQLPrisma 会据此加载 api-connector-mysql 与 deploy-connector-mysql 对应的实现host/port数据库地址与端口MySQL 默认端口为3306user/password连接数据库使用的账号与密码migrations: true启用 Prisma 对数据库结构的自动迁移managementSchema: managementPrisma 内部元数据如迁移记录、service 注册信息存放的 schema 名称managementApiSecret保护 Prisma 管理 API 的密钥调用部署等管理操作时需要携带Postgres 连接器配置以下是 Postgres 连接器的完整配置示例来源03-Postgres.mdversion: 3 services: prisma: image: prismagraphql/prisma:1.13 restart: always ports: - 4466:4466 environment: PRISMA_CONFIG: | managementApiSecret: my-server-secret-123 port: 4466 databases: default: connector: postgres host: postgres port: 5432 user: root password: prisma migrations: true managementSchema: management database: root postgres: image: postgres restart: always environment: POSTGRES_USER: root POSTGRES_PASSWORD: prisma volumes: - postgres:/var/lib/postgresql/data volumes: postgres: ~与 MySQL 配置相比Postgres 连接器多了一个database参数此处为root用于指定连接器指向的数据库名这也是单租户模式下定位既有 schema 的基础。Postgres 默认端口为5432。仓库中的实际配置参考除了文档中的示例当前仓库自身也提供了多套可直接参考的连接器配置它们体现了同样的配置结构并补充了额外参数server/docker-compose/mysql/prisma.ymlMySQL 连接器配置额外展示了rawAccess: true允许通过 API 对数据库执行原生访问等参数server/docker-compose/postgres/prisma.ymlPostgres 连接器配置同样包含rawAccess: trueserver/docker-compose/mongo/prisma.ymlMongoDB 连接器配置其连接方式为uri: mongodb://prisma:prisma127.0.0.1:27017/?authSourceadminsslfalse——可见 Mongo 连接器使用完整的uri字符串而非分散的 host/port/user 字段server/docker-compose/mysql/dev-mysql.yml 与 server/docker-compose/postgres/dev-postgres.yml配套的 MySQL 5.6 / PostgreSQL 10 数据库容器定义展示了MYSQL_ROOT_PASSWORD、POSTGRES_USER、POSTGRES_PASSWORD等环境变量的设置方式。从零搭建创建连接 MySQL / Postgres 的 Prisma server使用 Prisma CLI需要先安装 Docker可以快速搭建一个连接 MySQL 或 Postgres 的 Prisma server运行prisma init hello-world初始化项目选择Create new database创建新数据库选择MySQL或PostgreSQL按你的目标数据库选择进入新生成的目录cd hello-world启动 Prisma serverdocker-compose up -d执行prisma deploy部署你的 Prisma API。执行完上述步骤后Prisma server 会通过连接器与数据库建立连接并按照docker-compose.yml中PRISMA_CONFIG的配置创建必要的 schema。之后你可以通过prisma.yml中的endpoint如http://localhost:4466/default/default访问生成的 GraphQL API。关于prisma.yml中datamodel、endpoint、secret等字段的完整定义可参考 02-YAML-Structure.md。常见问题与排障Troubleshooting连接本机非 Docker运行的数据库由于 Prisma server 运行在 Docker 容器中它无法通过localhost直接访问宿主机上运行的数据库。Docker v18.03 引入了host.docker.internal这一特殊主机名它会被路由到宿主机本机。因此当数据库运行在宿主机而非容器中时应将连接器配置中的host改为host.docker.internal。Docker 端口占用port is already allocated如果你之前使用过旧版本的 Prisma CLI 与 Docker在运行docker-compose up -d前需要先清理旧的 Docker 环境否则可能遇到如下报错ERROR: for mysql_prisma_1 Cannot start service prisma: driver failed programming external connectivity on endpoint mysql_prisma_Creating mysql_db_1 ... done ERROR: for prisma Cannot start service prisma: driver failed programming external connectivity on endpoint mysql_prisma_1 (b9aa3375c9374b77bab447b3777d1e5a7d78e0081106699b637065e6db4a5a88): Bind for 0.0.0.0:4466 failed: port is already allocated ERROR: Encountered errors while bringing up the project.该错误的根因是宿主机上的4466端口已被旧容器占用。清理方式如下docker kill $(docker ps -aq) docker rm $(docker ps -aq)注意如果使用的是fish等其它 shell可能需要相应调整上述命令的语法。总结连接器是 Prisma server 与数据库之间不可替代的适配层。使用连接器时你需要依次回答两个核心问题数据库是否按 service 隔离 schema多租户 vs 单租户以及数据库结构由 Prisma 迁移还是由现有应用掌控迁移 vs 内省。在当前版本中MySQL 支持多租户 迁移Postgres 在此基础上还支持单租户 关闭迁移后者正是接入存量数据库、叠加 GraphQL API 的推荐路径。通过docker-compose.yml中的PRISMA_CONFIG配置连接器参数再配合prisma init、docker-compose up -d、prisma deploy三步即可完成一个可用的 Prisma server 搭建。对于更深入的实现细节可以继续阅读仓库中 api-connector-* 与 deploy-connector-* 系列模块的源码。赞分享后端数据库GraphQL【免费下载链接】prisma1 Database Tools incl. ORM, Migrations and Admin UI (Postgres, MySQL MongoDB) [deprecated]项目地址https://gitcode.com/gh_mirrors/pr/prisma1点击查看免费下载相关推荐Prisma 数据库连接器Database Connectors完全指南多租户、迁移与 MySQL/Postgres 配置实战Prisma 数据库连接器Database Connectors完全指南多租户、迁移与 MySQL/Postgres 配置实战 本指南以 Prisma 1后端数据库GraphQLPrisma 数据库连接器Database Connectors完全指南多租户模式、迁移机制与 MySQL/Postgres 配置实战Prisma 数据库连接器Database Connectors完全指南多租户模式、迁移机制与 MySQL/Postgres 配置实战 本指南基于 pri后端数据库GraphQLPrisma 1.12 数据库连接器Database Connectors完整指南连接 MySQL 与 Postgres 的多租户与迁移机制Prisma 1.12 数据库连接器Database Connectors完整指南连接 MySQL 与 Postgres 的多租户与迁移机制 数据库连接器后端数据库GraphQL上一篇推荐文章揭秘Go包依赖 - Spaghetti 工具下一篇WinRAR Keygen完全解析从原理到实践的终极指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
