
【免费下载链接】rocketride-serverHigh-performance AI pipeline engine with a C core and 50 Python-extensible nodes. Build, debug, and scale LLM workflows with 13 model providers, 8 vector databases, and agent orchestration, all from your IDE. Includes VS Code extension, TypeScript/Python SDKs, and Docker deployment.项目地址https://gitcode.com/gh_mirrors/ro/rocketride-server点击查看免费下载本篇技术指南以 RocketRide 仓库中的 database-sequelize.md 为骨架结合 TypeScript SDK 的源码实现与测试用例展开。它解答一个核心问题如何在不打开任何 TCP 数据库连接的前提下让浏览器或 Node.js 应用使用熟悉的 Sequelize 模型语义Model.findAll、Model.create、sequelize.transaction把 SQL 经 RocketRide Pipeline 发送到服务端数据库节点执行。读完本文你将掌握client.database.sequelize()与独立工厂createSequelize的完整用法、事务在 Pipeline 层的真实工作方式以及allow_execute配置与底层pgshim 的实现细节。状态提示重要本文所讲解的 Sequelize 驱动在 RocketRide 中已被标记为Deprecated官方推荐改用 Drizzle over Pipelines。Drizzle 驱动没有 Node 内置模块要求无需打包器 polyfill并随 SDK 以独立包导出rocketride/drizzle见 client-typescript/package.json 的 exports 配置。但database.sequelize()与createSequelize仍被保留——它们是冻结的 SDK 契约frozen SDK contract的一部分只会在一次协同的 major 版本发布中统一移除。存量代码可以继续使用新项目建议直接评估 Drizzle 方案。一、概念什么是 Sequelize over Pipelinesclient.database.sequelize(options)构建一个Sequelize v6ORM 实例其 Postgres 方言将 SQL 通过RocketRide Pipeline传输而不是通过 TCP Socket 直连数据库不打开任何 pg 连接findAll、create、update、destroy以及所有 raw query 都会被转发到 Pipeline 的executetool function事务走工具函数事务通过 Pipeline 的begin/commit/rollbacktool functions 承载而不是BEGIN/COMMITSQL 语句在真实连接上的执行上层语义不变应用层依然使用Model.findAll、Model.create、sequelize.transaction这些标准 Sequelize 写法真正的 SQL 在 Pipeline 内的服务端数据库节点上运行。这套机制让浏览器端与 Node.js 应用都能复用熟悉的 Sequelize 模型语义同时把数据库访问集中收敛到服务端 Pipeline 中便于统一治理连接、权限与执行策略。二、硬性前置要求在使用前必须确认以下三点目标数据库节点开启allow_executePipeline 配置中的数据库节点必须设置allow_execute: true。这一开关同时门控事务能力begin/commit/rollback无需额外配置。在仓库中各数据库节点默认关闭该开关db_mysql节点的mysql.allow_execute参数见 db_mysql/README.md默认falsedb_clickhouse节点的clickhouse.allow_execute参数见 db_clickhouse/README.md默认falsedb_hotdata节点的hotdata.allow_execute参数见 db_hotdata/README.md默认false且其实现会在未开启时直接抛出raw SQL execution is disabled; enable allow_execute on the node错误见 db_hotdata/IInstance.py。E2E 测试中的 Pipeline 定义也印证了这一点db_postgres节点配置中显式写入allow_execute: true与postgresdb.allow_execute: true见 sequelize-e2e.test.ts。Pipeline token通过client.use()获得见 pipelines.md。安装 Sequelize 作为 peer dependencynpm install sequelize。三、方法签名与参数详解client.database.sequelize(options: { Sequelize: SequelizeConstructor; token: string; nodeId?: string; sequelizeOptions?: import(sequelize).Options; }): Sequelize参数类型必填说明SequelizeSequelizeConstructor是Sequelize类来自import { Sequelize } from sequelize。tokenstring是来自use()的 Pipeline 任务 token。nodeIdstring否目标数据库节点 ID。省略时Pipeline 中第一个数据库节点处理查询。sequelizeOptionsOptions否额外的 Sequelize 选项覆盖在默认值之上例如logging、define。为什么必须把Sequelize类传入这是本 API 最容易被忽略的设计点sequelize是rocketride客户端的 peer dependency而不是硬依赖见 package.jsonpeerDependencies 中声明sequelize: ^6.37.8且标记为optional: true。原因在于Sequelize 传递依赖 Node 内置模块util直接依赖tty/util经由其debug依赖这些内置模块无法为浏览器目标打包否则需要打包器 polyfill由调用方自己import { Sequelize } from sequelize并把类传入可以让rocketride在不触碰此方法的浏览器应用中保持可安全打包。源码注释也明确记录了这一点SequelizeConstructor由调用方注入使 RocketRide 客户端永远不会在运行时静态 importsequelize包见 create-sequelize.ts。从源码看database.sequelize()只是createSequelize的一个便捷封装把this即DatabaseApi实例作为db传入见 database.ts。整个方法也带有deprecated标记注释与文档一致地指向 Drizzle 驱动见 database.ts。四、端到端示例定义模型并查询行下面的完整示例展示了从连接客户端、启动 Pipeline 到用 Sequelize 查询数据的全部流程import { RocketRideClient } from rocketride; import { Sequelize, DataTypes } from sequelize; const client new RocketRideClient({ auth: process.env.ROCKETRIDE_APIKEY!, uri: wss://api.rocketride.ai, }); await client.connect(); const { token } await client.use({ filepath: ./db-pipeline.pipe }); // Build a Sequelize instance backed by the RocketRide pipeline const sequelize client.database.sequelize({ Sequelize, token, nodeId: my-postgres-node }); // Define a model — no sync needed; table must exist in the target DB const User sequelize.define( User, { id: { type: DataTypes.INTEGER, primaryKey: true }, name: { type: DataTypes.STRING }, email: { type: DataTypes.STRING }, active: { type: DataTypes.BOOLEAN }, }, { tableName: users, timestamps: false } ); // Query rows const users await User.findAll({ where: { active: true }, limit: 10 }); console.log(users.map((u) u.toJSON())); await client.terminate(token); await client.disconnect();要点不需要sequelize.sync()表必须已存在于目标数据库中。E2E 测试在beforeAll中通过client.database.query()先CREATE TABLE IF NOT EXISTS再TRUNCATE建立隔离表见 sequelize-e2e.test.ts随后Model.define直接使用该表。集成测试验证了findAll确实经由 Pipeline 的tool(execute, ...)调用发出测试中的 fake client 断言client.tool被调用并检查返回行的字段值见 sequelize-integration.test.ts。五、事务如何正确使用sequelize.transaction()事务通过 Pipeline 的begin/commit/rollbacktool functions 转发。使用方式与普通 Sequelize 实例完全一致const sequelize client.database.sequelize({ Sequelize, token, nodeId: my-postgres-node }); await sequelize.transaction(async (t) { await sequelize.query(UPDATE accounts SET balance balance - 100 WHERE id :from, { replacements: { from: 1 }, transaction: t, }); await sequelize.query(UPDATE accounts SET balance balance 100 WHERE id :to, { replacements: { to: 2 }, transaction: t, }); // If this callback throws, the transaction is automatically rolled back. });事务在底层是如何工作的理解事务需要深入pg-shim——它是createSequelize内部挂载的dialectModule让 Sequelize 的 Postgres 方言以为自己在与一个真实的pg客户端通信实际上所有调用都被转到了DatabaseLike即client.database。核心逻辑见 pg-shim.ts拦截事务控制 SQLshim 的Client.query()会先用正则匹配START TRANSACTION|BEGIN|COMMIT|ROLLBACK锚定整条语句形如ROLLBACK TO SAVEPOINT x的语句不会被误拦截命中后调用对应的db方法见 pg-shim.tsSTART TRANSACTION/BEGIN→ 调用db.beginTransaction()把返回的session_id记录在this._sessionIdCOMMIT→ 调用db.commit()若有打开的会话并清除_sessionIdROLLBACK→ 调用db.rollback()若有打开的会话并清除_sessionId。后续查询自动携带会话普通查询构造db.query选项时若_sessionId存在则自动带上sessionId字段见 pg-shim.ts从而保持在同一个事务会话内执行。连接释放时的泄漏防护end()若发现仍有打开的会话会先尝试rollback再完成关闭避免服务端会话泄漏见 pg-shim.ts。SAVEPOINT 等暂不拦截SAVEPOINT、RELEASE SAVEPOINT、SET TRANSACTION按普通会话查询转发嵌套事务支持被列为后续工作见 pg-shim.ts 的注释与 pg-shim.ts 的拦截逻辑。测试如何验证事务语义E2E 测试受ROCKETRIDE_E2E1环境变量门控需要运行中的引擎与真实 Postgres用两个场景验证了事务的原子性见 sequelize-e2e.test.ts场景 1回滚在事务中插入两行后throw new Error(force rollback)断言事务后行数等于事务前行数——两行都不应持久化场景 2提交在事务中插入两行后正常结束断言行数beforeCount 2并验证两行的 label 精确存在——两行都应持久化。集成测试则用 fake client 断言事务流程恰好各调用一次begin与commit工具见 sequelize-integration.test.ts。六、独立工厂createSequelize高级用法如果你的应用不直接持有RocketRideClient实例——例如在 React hook 中已通过useShellConnection()拿到了 client——可以改用从 SDK 顶层导出的createSequelize工厂rocketride包名导出见 client/index.tsimport { createSequelize } from rocketride; import { Sequelize } from sequelize; // client is the RocketRideClient instance from your shell context const sequelize createSequelize({ Sequelize, db: client.database, token: myToken, nodeId: my-postgres-node, }); const [rows] await sequelize.query(SELECT * FROM products WHERE category :cat, { replacements: { cat: electronics }, }); console.log(rows);CreateSequelizeOptions同样被导出供需要单独传递 options 对象的 TypeScript 消费者使用见 client/index.ts 与 create-sequelize.ts。从源码可以看到createSequelize的默认构造参数见 create-sequelize.ts固定dialect: postgres与dialectModule: makePgShim(...)——这是SQL 走 Pipeline的机制核心占位连接参数database: opts.nodeId || rocketride、username: rocketride、host: rocketride、password: ——这些值不会真正建立连接仅满足 Sequelize 的构造要求默认logging: false...opts.sequelizeOptions覆盖在默认值之上可传入logging、define等选项。底层传输DatabaseLike接口无论走client.database.sequelize()还是createSequelize最终都依赖DatabaseLike这个结构性子集接口。它只要求四个方法便于在DatabaseApi演进时保持 shim 稳定见 database.tsinterface DatabaseLike { query(options: { token: string; sql: string; nodeId?: string; sessionId?: string; params?: unknown[] }): Promise{ rows: Recordstring, unknown[]; affected_rows: number }; beginTransaction(options: { token: string; nodeId?: string }): Promise{ session_id: string }; commit(options: { token: string; sessionId: string; nodeId?: string }): Promise{ ok: boolean }; rollback(options: { token: string; sessionId: string; nodeId?: string }): Promise{ ok: boolean }; }DatabaseApi.query()的校验逻辑很直接token与sql必须是非空字符串否则抛错随后把session_id、params、row_mode组装进 input调用client.tool({ tool: execute, nodeId, input })见 database.ts。这意味着database.sequelize()最终发出的每条 SQL 都是通过execute工具函数打到目标数据库节点的。七、补充说明与延伸阅读TypeScript-only 能力本文所述 ORM 绑定仅存在于 TypeScript SDK。Python SDK 拥有同样的原始数据库面client.database的query/begin_transaction/commit/rollback但没有 ORM 绑定。执行路径提醒DatabaseApi的注释明确指出经execute的语句绕过 LLM 翻译层与安全检查调用方需自行对传入的 SQL/Cypher 负责见 database.ts。这与数据库节点的allow_execute门控是两个层面的安全机制前者是客户端契约层面的责任划分后者是节点配置层面的开关。迁移建议新项目优先评估 Drizzle over Pipelines存量使用 Sequelize 驱动的代码可在冻结契约期内继续运行。相关参考client.database.query()—— 不带 ORM 层的裸 SQL参考 TypeScript SDK 参考 的 database 部分client.database.beginTransaction()—— 手动事务管理use()—— 启动承载 SQL 的 Pipeline。赞分享【免费下载链接】rocketride-serverHigh-performance AI pipeline engine with a C core and 50 Python-extensible nodes. Build, debug, and scale LLM workflows with 13 model providers, 8 vector databases, and agent orchestration, all from your IDE. Includes VS Code extension, TypeScript/Python SDKs, and Docker deployment.项目地址https://gitcode.com/gh_mirrors/ro/rocketride-server点击查看免费下载相关推荐Sequelize 中文文档从 v6 升级到 v7 的完整指南Sequelize 中文文档从 v6 升级到 v7 的完整指南 前言为什么需要升级到 Sequelize v7 Sequelize v7 作为 v6 之后如何顺利完成Sequelize从v6到v7的版本迁移开发者必备指南如何顺利完成Sequelize从v6到v7的版本迁移开发者必备指南 Sequelize作为Node.js生态中最流行的ORM库之一其v7版本带来了多项重要改后端ORM数据库vue-analytics完全指南Vue项目集成Google Analytics的终极方案vue analytics完全指南Vue项目集成Google Analytics的终极方案 vue analytics是一款专为Vue.js应用设计的Goog上一篇模拟与数字设计全攻略SkyWater PDK在混合信号芯片中的应用下一篇告别AI失忆用cognee构建永不遗忘的智能交互系统创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考