贝米·德利兹尔
贝米 插件进入 滴水龙头 和用于自动跟踪数据变化的现有 PostgreSQL 数据库。 它解锁了强烈的上下文感审计线索 和时间旅行查询 在你的应用程序.
贝米的设计简单且不侵扰 不需要修改你现有的数据库结构 它在背景中运行,赋予你数据变化跟踪功能.
此库是一个可选的 Drizzle 集成, 允许您在进行数据库更改时通过特定应用程序的上下文 。 这可以包括上下文,如"在哪里"(API端点,工人等),"谁"(用户,克龙工作等),以及"变化背后的",从而丰富了被贝米所捕获的信息.
目录
要点
- 以结构化形式自动和安全地跟踪特定应用程序上下文的数据库更改
- 获取数据变化的100%可靠性, 即使通过应用程序外的直接 SQL 执行
- 高性能,不影响代码运行时间执行和数据库工作量
- 易于使用而不改变表格结构和重写代码
- 时间旅行查询和方便分组和过滤变化的能力
- 自动提供云基础设施的可扩展性
- 完全拥有您的数据
见 实例还原 用于自动跟踪所有变化的 Drizzle.
使用大小写
贝米建设的用途案例范围很广!. 该技术最初是作为Fintech的合规工程系统而建造的,支持了管理下价值15B美元的资产,但后来被取入了通用用途. 一些使用案例包括:
- 审计路线: 使用日志进行合规,或向客户支持和外部客户展示.
- 更改还原 : 恢复用户所做的更改或回滚API请求中的所有数据更改.
- 时间旅行: 检索历史数据而不执行事件来源.
- 解决问题: 查明申请问题的根源.
- 分布式追踪 : 跨分布式系统的跟踪变化.
- 测试 : 回滚或回滚到不同的应用测试状态.
- 分析趋势: 深入了解历史趋势和变化,以便作出知情决策.
快速启动
安装国家预防机制软件包
npm install @bemi-io/drizzle
将您的 Drizzle 实例包装并添加一个 快递 通过自动跟踪数据库更改的应用程序上下文的中间软件
import { withBemi, bemiExpressMiddleware } from "@bemi-io/drizzle";
import express, { Request } from "express";
const db = withBemi(drizzle(process.env.DATABASE_URL!));
const app = express();
app.use(
// Customizable context
bemiExpressMiddleware((req: Request) => ({
userId: req.user?.id,
endpoint: req.url,
params: req.body,
}))
);
更改数据库,确保它们都保存在名为“表格”的表格中 changes 在目的地 DB 中
psql -h [HOSTNAME] -U [USERNAME] -d [DATABASE] -c 'SELECT "primary_key", "table", "operation", "before", "after", "context", "committed_at" FROM changes;'
primary_key | table | operation | before | after | context | committed_at
-------------+-------+-----------+---------------------------------------------------+----------------------------------------------------+---------------------------------------------------------------------------------------------+------------------------
26 | todo | CREATE | {} | {"id": 26, "task": "Sleep", "isCompleted": false} | {"userId": 187234, "endpoint": "/todo", "params": {"task": "Sleep", "isCompleted": false}} | 2023-12-11 17:09:09+00
27 | todo | CREATE | {} | {"id": 27, "task": "Eat", "isCompleted": false} | {"userId": 187234, "endpoint": "/todo", "params": {"task": "Eat", "isCompleted": false}} | 2023-12-11 17:09:11+00
28 | todo | CREATE | {} | {"id": 28, "task": "Repeat", "isCompleted": false} | {"userId": 187234, "endpoint": "/todo", "params": {"task": "Repeat", "isCompleted": false}} | 2023-12-11 17:09:13+00
26 | todo | UPDATE | {"id": 26, "task": "Sleep", "isCompleted": false} | {"id": 26, "task": "Sleep", "isCompleted": true} | {"userId": 187234, "endpoint": "/todo/complete", "params": {"id": 26}} | 2023-12-11 17:09:15+00
27 | todo | DELETE | {"id": 27, "task": "Eat", "isCompleted": false} | {} | {"userId": 187234, "endpoint": "/todo/27", "params": {"id": 27}} | 2023-12-11 17:09:18+00
看看我们 Drizzle 文档 更多细节.
结构概览
贝米被设计为轻量级和安全型. 它采取切实可行的办法,实现以下利益: 事件源代码 不需要重排现有代码, 切换到高度专门化的数据库, 或者在数据库之上使用不必要的像git的抽象。 我们希望你的系统能像它已经做的一样 与你现有的数据库保持尽可能简单.
Bemi将数据库和应用层都插入,确保100%的可靠性和对每个变化的全面理解.
在数据库级别上,贝米安全地连接到 PostgreSQL 写入前端日志'' 及其执行 更改数据抓取。这可以跟踪甚至通过直接 SQL 触发的变化.
在应用程序级别上,这个软件包会自动将应用程序上下文传递到复制日志来增强低级别数据库的更改. 例如,一个用户进行更改的信息,启动更改的API端点,自动触发数据库更改的工人名等.
Bemi工人然后将低级数据与应用程序上下文相接,并以结构化的易于查询的格式储存这些信息,如下文所描述:

云溶液包括工人活虫,为过错耐受性而排队,以及一个没有服务器的PostgreSQL. 如果你想自己运行一个自办的版本,请看我们 自动托管文件。 。 。 .
许可证
根据《议定书》的规定分发 LGPL-3.0 许可证。 。 。 . 如果需要修改并分发代码,请放出以回馈开源社区.