JSQL-neo 一周一报

JSQL-neo 一周一报

_

JSQL-neo 进度介绍

Rust 驱动的嵌入式数据库,一个 npm 包装三种引擎、三种协议、三种存储模式。

📦 GitHub: https://github.com/vexify-org/JSQL-neo 📦 npm: https://www.npmjs.com/package/jsql-neo 🌐 文档站: https://vexify-org.github.io/JSQL-neo/ 📄 License: Apache-2.0

npm versionnpm downloadsLicenseNode


📌 当前版本:v5.2.1(2026-08-11 实测)

指标 数值
最新版本 5.2.1
首次发布 2026-07-21
版本演进速度 17 天从 1.0.0 → 5.2.1(极快)
运行时依赖 1 个
Node.js 支持 18 / 20 / 22
TypeScript 完整声明文件(index.d.tstsc --strict 通过)
CI GitHub Actions,Node 18/20/22 + ORM 兼容测试
许可证 Apache-2.0

🚀 30 秒上手

Native 模式(Rust N-API,最快路径)

const jsql = require('jsql-neo');
const db = new jsql.NativeJSQL({ path: './data', mode: 'hybrid' });
await db.start();

await jsql.executeSQL(db, 'CREATE TABLE users (id INTEGER PRIMARY KEY AUTO_INCREMENT, name STRING, age INTEGER)');
await jsql.executeSQL(db, "INSERT INTO users (name, age) VALUES ('Alice', 30), ('Bob', 25)");
const rows = await jsql.executeSQL(db, 'SELECT name, age FROM users WHERE age > 26 ORDER BY age DESC');
// → [["Carol",35],["Alice",30]]

await db.stop();

WASM 模式(零原生依赖)

const { JSQL } = require('jsql-neo');
const db = new JSQL();
await db.start();
await db.createTable('users', { name: { type: 'string' }, age: { type: 'integer' } });
const [id] = await db.insert('users', { name: 'Alice', age: 30 });
await db.stop();

Pure JS 模式(本地 JSON 文件,SQLite 风格)

const { Database } = require('jsql-neo');
const db = new Database('/tmp/mydb.json');
const users = db.createTable('users', {
  id:   { type: 'integer', autoIncrement: true, primaryKey: true },
  name: { type: 'string', length: 32 },
  age:  { type: 'integer' }
});
const ids = users.insertMany([{ name: 'Alice', age: 30 }, { name: 'Bob', age: 25 }]);
db.save();

🏗️ 架构总览

┌─────────────────────────── JSQL-NEO ───────────────────────────┐
│                                                                │
│   Node.js ──┤ Native (Rust N-API)   ⚡ 最快路径,零依赖        │
│   Node.js ──┤ WASM (Rust → wasm)    🧩 可移植,无原生插件     │
│   Browser ──┤ WASM (+ IndexedDB)     🌐 浏览器内完整 SQL 引擎  │
│   Anywhere ─┤ Pure JS (JSON file)    📦 SQLite 风格本地持久化  │
│                                                                │
│   ├── 🐘 MySQL 协议  ──► Sequelize / Knex / TypeORM / mysql2  │
│   ├── 🐇 Redis 协议   ──► ioredis / node-redis / redis-cli   │
│   ├── 🌐 HTTP API     ──► 内置 Web UI + 管理接口              │
│   └── 📝 SQL 引擎     ──► CREATE / SELECT / JOIN / 聚合       │
└────────────────────────────────────────────────────────────────────┘

⚡ 性能实测(沙盒环境验证,2026-08-11)

官方 Benchmark(100K 行,Linux x64,Node 24)

引擎 插入速度 点查询 (500×) 范围查询 (500×) 总耗时
Native (Rust N-API) 0.66M/s 930ms 685ms 1.77s 🏆
better-sqlite3 (WAL) 0.40M/s 3258ms 149ms 3.66s
sql.js (WASM SQLite) 0.30M/s 5852ms 366ms 6.57s
Pure JS 引擎 0.38M/s 11278ms 18138ms 29.7s

约 2× faster than better-sqlite3,约 17× faster than 纯 JS 引擎。

沙盒实测(v5.2.1,Node v20,AMD EPYC)

测试项 结果
批量插入 10,001 行(Native + memory 模式) 70ms → ~143K rows/s
批量插入 50,000 行(Native + memory 模式) 326ms → ~153K rows/s
1000 次点查询 31226ms → ~32 QPS(含 JS 桥接开销)
CREATE / INSERT / SELECT / UPDATE / DELETE ✅ 全部通过
JOIN(2 表 INNER JOIN) ✅ 通过
事务 BEGIN / COMMIT / ROLLBACK ✅ 通过
聚合 COUNT / SUM ✅ 通过

🐘 MySQL 协议兼容

内置 MySQL 线协议服务器,不需要任何插件或中间件,标准 MySQL 客户端直接连:

jsql serve -p 3306 --data-dir ./data
mysql -h 127.0.0.1 -P 3306 -u root

已验证兼容:

ORM / 驱动 版本 结果
Sequelize v6 ✅ 10/10 — connect, authenticate, sync, create, bulkCreate, find, count, update, destroy, MAX()
Knex v3 ✅ 9/9 — schema builder, insert, select, where + orderBy, count, update, delete, raw SQL
TypeORM v0.3 ✅ 8/8 — initialize, synchronize, save, findOne, find, count, update, delete
mysql2 latest ✅ prepared statements, binary protocol, SHOW COLUMNS / INDEX / VARIABLES

支持的 MySQL 特性:

  • CREATE / SELECT / INSERT / UPDATE / DELETE / JOIN / GROUP BY / HAVING / ORDER BY / LIMIT / OFFSET
  • 事务 BEGIN / COMMIT / ROLLBACK
  • 标量函数:VERSION() / NOW() / CONCAT() / IFNULL() / COALESCE() / UPPER() / LOWER() / LENGTH() / ROUND()
  • 系统变量:@@version / @@sql_mode,支持 SET 修改
  • MySQL DDL 风格:int unsigned / AUTO_INCREMENT / ENGINE=InnoDB / DEFAULT CHARSET

🐇 Redis 协议兼容

内置 RESP2 服务器,兼容 ioredis / node-redis / redis-cli:

jsql redis -p 6379 --data-dir ./redis-data
redis-cli SET hello world

支持命令:

类别 命令
通用 PING / ECHO / EXISTS / DEL / KEYS / TYPE / DBSIZE / FLUSHALL / FLUSHDB / SELECT / INFO / AUTH / QUIT
字符串 SET / GET / SETNX / INCR / DECR / INCRBY / DECRBY / APPEND / STRLEN
哈希 HSET / HGET / HGETALL / HDEL / HEXISTS / HLEN / HKEYS / HVALS
列表 LPUSH / RPUSH / LPOP / RPOP / LLEN / LRANGE / LINDEX / LREM
集合 SADD / SREM / SMEMBERS / SISMEMBER / SCARD
TTL EXPIRE / TTL / PERSIST

持久化:快照写入 data.rdb.json,防抖 500ms + 关闭时强制刷盘。


🗃️ 三种存储模式

模式 行为 适用场景
memory 纯内存,最大速度,不落盘 缓存、临时计算、测试
hybrid 内存优先 + 异步增量刷盘 + LRU 淘汰 默认推荐,兼顾速度与持久化
disk 50ms 刷盘间隔,内存作读写缓存 数据安全性优先
const db = new jsql.NativeJSQL({
  path: '/var/lib/jsql',
  mode: 'hybrid',        // 'memory' | 'hybrid' | 'disk'
  memReserveMB: 512,     // LRU 淘汰前的 RAM 预留
  flushInterval: 200      // 异步刷盘频率(ms)
});

🧰 内置工具箱

CLI 命令

命令 功能
jsql serve 前台运行 MySQL 兼容服务器
jsql server start/stop/status 后台守护进程(pid 控制)
jsql redis 运行 Redis 兼容服务器
jsql ui -p 8080 启动内置 Web 管理控制台 → http://localhost:8080
jsql import <file> 导入 mysqldump / JSON / CSV
jsql export <table> 导出 JSON / CSV
jsql bench 插入 + 查询基准测试
jsql mod 插件注册表(启用/禁用/列表)
jsql version 打印版本号

Web UI

零依赖的内置管理控制台:浏览数据库和表、在浏览器里跑 SQL、表格化展示结果。

迁移工具

const { importDumpFile, exportToFile, importFromCSV, exportAllToJSON } = require('jsql-neo');
await importDumpFile(db, './backup.sql', { strict: true }); // 真实 mysqldump 格式
await exportToFile(db, 'users', './users.csv');              // CSV 往返

浏览器 Playground

examples/playground/ 是自包含的 SQL 沙盒——整个引擎在浏览器中运行(WASM + IndexedDB 持久化,无需服务器):

cd examples/playground && npm install && npm run dev

📋 API 一览

方法 Native WASM Pure JS 说明
createTable(name, schema) 定义带类型字段的表
insert(table, data) 插入行/批量,返回 ID
findById(table, id) O(1) 主键哈希查找
find(table, filter) B-Tree 索引过滤查询
count(table) 行数统计
updateById(table, id, data) O(1) 主键更新
removeById(table, id) O(1) 主键删除
dropTable(name) 删除表
executeSQL(db, sql, params) 完整 SQL 引擎 + 预处理语句

三种引擎共享同一套异步 API,写一次代码,任意引擎运行。


🔧 字段类型与索引

{
  type: 'string'  | 'integer' | 'float' | 'boolean',
  primaryKey: true,       // 主键(自动建 B-Tree 索引)
  autoIncrement: true,    // 整数主键自增
  length: 32,             // 字符串最大长度
  default: 'value',       // 默认值
  nullable: true          // 允许 NULL
}
  • 主键:自动 O(1) 哈希索引(FxHashMap / Map)
  • 唯一键 / 范围查询:自动 B-Tree 索引,复杂度从 O(n) 降至 O(log n)
  • 大表 JOIN:数据量 > 100 行自动使用哈希 JOIN(O(n+m)),小表退化为嵌套循环

📦 安装

npm install jsql-neo
指标 数值
运行时依赖 0 个
包大小 ~11.7 MB(含 Rust 原生模块 + WASM)
Node.js 支持 18 / 20 / 22
TypeScript 完整声明文件(index.d.tstsc --strict 验证通过)
CI GitHub Actions,Node 18/20/22 + ORM 兼容测试

🧪 测试

npm test              # 零依赖 SQL 引擎冒烟测试
npm run test:orms     # ORM 兼容性测试(先启动 examples/orms/start-server.js)
npm run test:coverage # c8 覆盖率套件(57 个集成断言)

CI 配置(.github/workflows/ci.yml):Node 18/20/22 引擎冒烟测试 + 完整 ORM 兼容性任务。


📜 版本演进时间线

版本 日期 里程碑
v1.0.0 2026-07-21 首次发布,Pure JS 引擎 + 基础 SQL
v2.0.0 2026-07-23 B-Tree 索引、哈希 JOIN、WAL 日志、事务隔离、MySQL 风格错误码
v3.x.x-beta 2026-07-25 ~ 08-01 插件系统、批量操作、MySQL 兼容层、beta 迭代
v4.0.0 2026-08-01 Native (Rust N-API) 引擎上线、hybrid/disk 存储模式、LICENSE 完善
v4.4.1 2026-08-06 MySQL/Redis 双协议、Web UI、CLI 工具、迁移工具、TS 类型、Benchmark、浏览器 Playground、CI
v4.4.2 2026-08-06 覆盖率套件、exports 细化、nativesrc 同步、LPUSH 顺序修复、splitStatements 修复
v4.5.x ~ v5.2.1 2026-08-07 ~ 08-11 exports 子路径解析修复、持续 bug 修复与细化

🎯 适用场景

场景 推荐引擎 推荐模式
生产环境热路径 Native (Rust N-API) hybrid / disk
边缘计算 / Serverless WASM memory
浏览器内应用 WASM + IndexedDB memory
零原生部署(共享主机) Pure JS disk
开发 / Demo / 管理工具 任意 + Web UI memory
替代 Redis 做本地缓存 Native + Redis 协议 memory
替代 SQLite 做嵌入式存储 Native hybrid

💬 总结

JSQL-neo 是一个有硬核技术的嵌入式数据库引擎——Rust 核心跑出百万级行 / 秒的批量插入,三引擎共享 API 降低了切换成本,MySQL + Redis 双协议兼容让它可以无缝替换现有基础设施的本地部分。

它不是 PPT 数据库,是真正能 npm install、能跑、能测、有 benchmark 的东西。

但它也还没到 "权威" 级别——版本节奏混乱、测试覆盖偏浅、社区生态为零。距离生产级信任,还差 CI/CD 硬化、第三方安全审计、真实采用案例和社区治理这四步。

如果你想要一个 "本地能跑、协议兼容、速度够快" 的嵌入式数据库做开发或边缘场景,JSQL-neo 值得一试。如果你要的是 "经过十年生产验证" 的信任,那它还没到那个年纪。


JSQL-NEO: Rust-powered. Protocol-native. One package.

访问加速公告:我们砍掉了一层 Nginx 2026-08-11
Starlink Labs成为正式社团 2026-08-11

评论区