@ atscript/db-memory (中文(简体) )
一次定义模型 ——从单个获取 TypeScript 类型、运行时间验证和 DB 元数据 .as 型号.
模拟适配器 @atscript/db。 。 。 . MemoryAdapter 是一个完整的 BaseDbAdapter 与 没有引擎,没有I/O,没有持久性 ——行居普通入行JS结构. 它以两种方式运行:
- 提供方支持(只读)——主模式. 一张桌子的行是关闭的
() => Row[] | Promise<Row[]>查询时引用。 这样就可以了 运行时间 没有数据库的表面——从Redis + 工作登记、 工作运行快照、 任何计算出来的组合中拉链的“ 排定任务” 列表—— 被观测为真实的标记表( 在标记- ui中, 包含@DbAction行动作和@InputForm(s) 不获取数据库。 写作掷出. - 被存储(读写)——一种二级便利. 单行活在
Map{\fn黑体\fs22\bord1\shad0\3ahbe\4ah00\fscx67\fscy66\2chffffff\3ch808080}给一个快速的记忆DbSpace测试和微小的应用表格。 满 CROUD.
过滤,排序,项目,相接,乐观-货币(OCC)版本,以及主键+唯一-索引执行都得到了支持. 叶比较语义(regex, 无效, 命令)是 JS-原生并有文件记载 - 故意不声称与SQL发动机相同(见 接受的限制) (中文(简体) ).
安装
pnpm add @atscript/db-memory
@atscript/db 是同级依赖.
提供者支持(只读)——主模式
将运行时拥有的实体作为只读表. 服务商的关闭被重新启动 每个 读取(每次更新快照),并在 syncSchema 这样它就可以关闭工厂时间不存在的依赖性:
import { createAdapter, setMemoryProvider } from "@atscript/db-memory";
import { syncSchema } from "@atscript/db/sync";
import { Job } from "./models/job.as";
// A DbSpace backed by the in-memory adapter — no engine, no I/O.
const space = createAdapter();
await syncSchema(space, [Job]);
// Make `Job` a READ-ONLY table whose rows come from a runtime closure
// (e.g. Redis keys zipped with an in-code job registry). Set AFTER syncSchema.
setMemoryProvider(space, Job, async () => await loadScheduledJobs());
// Observe it like any other atscript table.
const jobs = space.getTable(Job);
await jobs.findMany({
filter: { scheduled: { $eq: true } },
controls: { $sort: { nextRun: 1 }, $limit: 20 },
});
// Any write (insert/update/delete) throws: the table is provider-backed.
因为可读性是统一的, @DbAction 发现, ?$actions=true 弹琴, disabled 长相, @InputForm,和标注-ui表 / /meta 表面显示所有针对此表格的工作,没有适配器边动作代码.
存储(已读出)——测试和小表
滴入记忆 DbSpace 带有完整的 CRUD —— 一个内置 SQLite 服务的角色, 减去本地模块和 SQL 的回程 :
import { createAdapter } from "@atscript/db-memory";
import { syncSchema } from "@atscript/db/sync";
import { User } from "./models/user.as";
const space = createAdapter();
await syncSchema(space, [User]);
const users = space.getTable(User);
await users.insertOne({ id: "u1", name: "Ada" });
await users.findMany({
filter: { name: { $regex: "^A" } },
controls: { $sort: { name: 1 } },
});
公共 API
| 导出 | 目的 |
|---|---|
createAdapter() | 构建一个 DbSpace 由新鲜的 MemoryAdapter 每个表格. |
setMemoryProvider(space, Type, fn) | 后期封存服务商 Type适配器,使该表只读(提供模式). |
MemoryAdapter | 适配器类,用于构建 DbSpace 手动new DbSpace(() => new MemoryAdapter())) (中文(简体) ). |
MemoryProviderFn | 提供者关闭类型 : () => Row[] | Promise<Row[]>。 。 。 . |
buildMemoryPredicate(filter) | 编译 a FilterExpr d. 将《公约》纳入《任择议定书》 (row) => boolean 上游(引擎的滤波核心). |
接受限制(v1)
特意——在这里搭配一个真正的发动机对于这个适配器目标的小型计算表面来说是很难或不可能和不必要的. 所有文件都有记载,没有沉默:
- Regex / 无效语义 - 联合来文----内在性
RegExp, (中文(简体) ),/pat/flags荣誉;$ne编号 :$exists和蒙哥一样 与任何 SQL 引擎的字节相同 . - 没有整理 —— 说
@db.column.collate过滤器和种类是密码点 / JS-内置的,所以不敏感$eq/类型与SQLite/蒙戈不同. - 没有阵列元素匹配 点-路径取出器与平板和嵌入式物体路径相匹配; Mongo 式隐含数组元素 /
$elemMatch未提供匹配. - 非原子存储批量写入 —— 说
insertMany编号 :updateMany编号 :replaceMany编号 :deleteMany按顺序应用,不回滚;中框冲突留下了更早的项目。 单行本是安全的。 (提供的表格是只读的,因此这绝不适用于主模式. ) - 提供方表格只读,没有交叉请求的平面稳定性 第1页和第2页是分开的快照请求.
- 聚合是一个进程内扫描 —— 说
$groupBy/ 总量/日历桶 /$having编号 :$count在联署材料中运行一个带有SQL语义的快照(Null和缺失组在一起);sum编号 :avg没有值null) (中文(简体) ). 对小套件来说这个适配器目标很好;没有指数支持的分组. - 关系
$with——通过核心的app级批量加载解决,不是本土的. - 无 FTS / 矢量 / 地理学 /
$search——无支持. - 不是生产数据库 ——没有坚持或共享任何进程.
文档
许可证
麻省理工学院