TypeORM适配Gaussdb开源验证任务心得
【摘要】 TypeORM 是一个流行的 TypeScript 和 JavaScript 数据库 ORM(对象关系映射)工具,用于在 Node.js 环境中与数据库交互。它使开发者能够使用面向对象的编程方式来操作数据库,而无需编写复杂的 SQL 查询。文章大概描述TypeORM适配GaussDB数据库的整个流程及可能会出现的问题,希望能帮读者解决自身问题。
背景介绍
开源 for Huawei 通过和公司、高校、社区的开发者合作,完成鲲鹏、昇腾、欧拉、鸿蒙、高斯、云服务等与开源软件的适配开发,帮助繁荣 Huawei 的基础生态,同时让开源软件能够更加简单、高效的运行于华为云上。
开始之前,开发者可以下载 开源 for Huawei Wiki了解详细的开发步骤,技术准备,以及开发过程需要的各种资源。
适配准备
ECS 配置
- 计费模式选择:包月
- 区域:中国-上海 1
- CPU 架构:鲲鹏通用计算增强型
- CPU 规格:kc1.large.4
- CPU 规格:2vCPUs&&8GiB
- 镜像类型:公共镜像
- 镜像:Huawei Cloud EulerOS 2.0 标准版 64 位 ARM 版
GaussDB 配置
- 计费模式选择:按需
- 区域:中国-上海 1
- 数据库类型:基础版
- 数据库版本:8.x
- 实例类型:主背版
- 部署形态:1 主两备
- 性能规格:4 核 16GB
需要注意的小点
- 服务器和 DB 最好放在同一区域,GassDB 目前只支持同区域的内网访问。
- 若使用按需的 GuassDB,使用完需删除实例
环境准备
- 配置 SSH 免密登录 ECS
- 本地通过 SSH 实现, 本地端口:ECS 内网 GaussDB 的端口
#!/bin/bash
ssh -L 本地端口:GaussDB内网IP:GaussDBPort 本地ECS-ssh配置别名 sleep infinity
开发过程
遇到无法连接 GaussDB 的问题?
Cannot connect: Error: SASL: Only mechanism SCRAM-SHA-256 is currently supported
at Object.startSession (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/crypto/sasl.js:6:11)
at /Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/client.js:261:33
at Client._checkPgPass (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/client.js:225:7)
at Client._handleAuthSASL (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/client.js:259:10)
at Connection.emit (node:events:517:28)
at Connection.emit (node:domain:489:12)
at /Users/yhj/code/code/typeorm/node_modules/.pnpm/pg@8.13.1_pg-native@3.2.0/node_modules/pg/lib/connection.js:116:12
at Parser.parse (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg-protocol@1.7.0/node_modules/pg-protocol/src/parser.ts:103:9)
at Socket.<anonymous> (/Users/yhj/code/code/typeorm/node_modules/.pnpm/pg-protocol@1.7.0/node_modules/pg-protocol/src/index.ts:7:48)
at Socket.emit (node:events:517:28)
由异常返回大概定位到问题是pg
package 的函数 startSession 抛出异常。
- 本地启动 Postgres 容器, 并使用 gaussdb driver 进行本地测试,连接成功,可推断
pg
package 是正常的。 - 通过异常跳转到
startSession
函数发现抛出异常的逻辑是基于mechanisms
参数内是否包含SCRAM-SHA-256
来判断,接下来通过向上 debug 查出mechanisms
组成就可以得出异常的原因 - 最终确认是:建立 socket 后,并进行 authenticationSASl 时候,buffter 里面无法解析出’SCRAM-SHA-256’。
鉴于此情况,通过查阅官方文档,得到结论,需要通过 GaussDB 控制台内,进行参数配置,把参数dn:password_encryption_type
改为 1。
CCE 部署
- 建立集群,按默认推荐选择就可以,按需模式。需要注意的点:保持与 GaussDB 服务在同一个网段
- 建立节点,根据 docker 镜像平台,选择对应的服务器配置,4 核 8GB,六个节点
- 建立负载。
- 负载实例选择 1 个,
- 在实例的环境变量中填写你所需要注入的环境变量。
- 核心最高为 4,最低保持默认。
- 内存最高为 8G,最低保持默认。
- 镜像选择对应镜像
- 弹性 IP 绑定对应的负载服务器,就可以公网访问(注意:留意相关安全组是否开放对应端口)。
总结
从功能角度看,GaussDB 的功能多于 Postgre,导致 pg
package 和 TypeORM 上的 Driver 满足不了 GaussDB 的需求。
从开发角度看,目前已基本支持 TypeORM 的 API,一些功能还需要结合调节 GaussDB 控制台上的参数。
最后,通过该任务,可以证明使用 pg
配合 TypeORM
是可以接入 GaussDB 的。
建议
- driver 的支持不完善与缺乏,目前只能用
pg
,从配置、使用等角度看,pg
是无法满足 GaussDB。但不阻碍使用。期待未来有一个完全适配 GaussDB 的 开源 driver - 文档方面,数据类型方面和功能方面给出的文档,给人感觉还是大而不全,有些功能的支持还是需要与 PostgreSQL 相互印证才能确认,期待未来 GaussDB 官方文档的完善。
- docker 镜像方面,向上游社区推送代码时候,缺乏 docker 镜像供其他开发者测试与验证。期待未来 GaussDB 官方提供 docker 镜像,或者可供社区测试验证的入口。
- CI/CD 方面, 希望 GitCode 尽快支持 import 第三方仓库后 Sync 的功能
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)