MatrixOne Git4Data 技术详解(二):从零跑通所有 Git 原语

大模型-高通qnn基础 提供较低级别、高度可定制的统一API,通过单独的库加速所有AI加速器核心上的AI模型, 可以直接用于针对特定的加速器核心或从流行的运行时(包括Qualcomm Neural Processing SDK、TensorFlow Lite和ONNX运行时)委派工作负载。一个支持异构计算、系统级配置的一体化SDK,旨在将AI工作负载引导到我们平台上的所有加速器核心。为开发人员提供灵活性,包括核心间协作支持和其他高级功能。是一个为训练好的神经网络模型提供高级量化和压缩技术的库。 阅读详情

上一篇我们讲了Git4Data是什么已经为什么它对我们有用。这一篇我们直接开始上手。十分钟之内,你会在自己的机器上把 MatrixOne 跑起来,灌进一百万行真实规模的数据,然后一条条 SQL 把所有 Git 原语都跑一遍——快照、克隆、分支、行级 diff、合并、cherry-pick、任意时间点恢复。所有 SQL 都可以直接复制运行;做完整段,你就有了在大规模的数据上“以 Git 的方式工作”的真实体验。

项目主页:github.com/matrixorigin/matrixone | 文档站:docs.matrixorigin.cn


MatrixOne 的基础背景

MatrixOne 是一个开源、云原生、分布式的 SQL数据库,以 Apache 2.0 协议开源,兼容 MySQL 协议——所有 MySQL 客户端、驱动、ORM 都能直接连接。

MatrixOne 原生支持多种类型的数据和多种数据负载(OLTP,OLAP,时序,向量搜索,全文检索)。它的架构是完全存算分离的,计算节点完全是无状态的容器,存储层直接使用 S3 兼容的对象存储上。这套“存算分离 + 不可变对象 + MVCC”的存储架构,正是它能把 Git 式版本控制能力做进数据库内核的基础——所以与其说 Git4Data 是它的一个附加功能,不如说是它技术架构的自然产物。

想了解架构与实现细节,我们系列的下一篇会详细的介绍MatrixOne的架构细节和实现原理。这一篇我们专注把这些能力先用起来。


第一步:安装 MatrixOne

最快的方式是 Docker 一条命令:

docker run -d -p 6001:6001 --name matrixone matrixorigin/matrixone:4.0.0-rc1

等容器启动后,用任何 MySQL 客户端连进去(默认账号 root、密码 111、端口 6001):

mysql -h 127.0.0.1 -P 6001 -u root -p111

进入会话试一下:

SELECT version();

看到版本号——你就有了一个完整的 MatrixOne 本地单机实例,可以跑起来这篇文章里要演示的全部能力。

想从源码构建的话也可以check我们的Github上的教程。

📦 本文所有 SQL 都整理在配套仓库里:matrixorigin/git4data-tutorial。
不想一段段复制的话,直接跑这一条就能把全文走一遍:

mysql -h 127.0.0.1 -P 6001 -u root -p111 < 02-hands-on/git4data_primitives.sql

本系列后续每一篇的代码也都会放进这个仓库。


第二步:直接灌进 100 万行数据

这一篇我们不拿三五行的玩具表凑数——一上来就灌 100 万行,让你在真实规模的数据上感受 git4data。

建库、建表,然后用一条 INSERT ... SELECT ... generate_series 在库内直接生成 100 万行订单(不用任何外部文件):

CREATE DATABASE git4data_demo;
USE git4data_demo;

CREATE TABLE orders (
    order_id BIGINT PRIMARY KEY,
    customer VARCHAR(32),
    amount   DECIMAL(10, 2),
    status   VARCHAR(16)
);

-- 一条 SQL 在服务端生成 100 万行
INSERT INTO orders
SELECT result,
       concat('cust_', result % 10000),
       round(rand() * 1000, 2),
       CASE result % 3 WHEN 0 THEN 'paid' WHEN 1 THEN 'pending' ELSE 'cancelled' END
FROM generate_series(1, 1000000) g;

SELECT COUNT(*) FROM orders;   -- 1,000,000

generate_series(1, 1000000) 在服务端流式生成 1…100 万的整数,整段 INSERT 全在服务端执行,网络上只走一条 SQL——本地 Docker 上通常一两秒就灌完了。

到这里 MatrixOne 还只是一个普普通通、装了 100 万行数据的 MySQL 兼容库。下面我们开始进入 Git 化的世界——而且接下来每个动作,都是直接作用在这 100 万行上的。


第三步:commit / tag / reset——CREATE SNAPSHOT 与 RESTORE

git commit / tag——CREATE SNAPSHOT

给当前这 100 万行的状态按下“存档键”:

CREATE SNAPSHOT v1 FOR TABLE git4data_demo orders;

⚠ 注意 MatrixOne 的 FOR TABLE 子句里,库名和表名之间是空格而不是点号——git4data_demo orders,不是 git4data_demo.orders。

SHOW SNAPSHOTS 可以看到当前所有快照。

git checkout(时间旅行)——SELECT … {snapshot = '…'}

先模拟一个生产事故——手滑删掉了一批订单:

DELETE FROM orders WHERE order_id <= 1000;
SELECT COUNT(*) FROM orders;                      -- 999000,1000 行没了

现在回头去看一眼快照那一刻的数据,当前状态丝毫不动:

SELECT COUNT(*) FROM orders {snapshot = 'v1'};    -- 1000000,过去那一刻完好

带 {snapshot = '…'} 的 SELECT 只是探头去看一眼过去,对当前数据零干扰。这就是 git 的 checkout <tag> -- file,但没有 worktree 副作用。

git reset --hard——RESTORE TABLE

不只想看,想真的回去:

RESTORE TABLE git4data_demo.orders {SNAPSHOT = v1};

SELECT COUNT(*) FROM orders;                       -- 1000000,全回来了

整张表被重置回 v1 那一刻——被误删的 1000 行原封不动回来了。这等价于 git reset --hard v1。


第四步:git clone——CLONE

CLONE 是 MatrixOne 给“基于真生产数据起一个独立副本”准备的最便宜工具:

CREATE TABLE orders_copy CLONE orders;
SELECT COUNT(*) FROM orders_copy;                  -- 1000000,瞬间出现

注意:克隆出的 orders_copy 立刻就有完整的 100 万行,但这一步几乎不耗时、几乎不占空间——底层根本没复制数据,只记了个指向现有数据的指针。改它不影响 orders,反之亦然。

也可以从某个快照 clone(用来开“某个历史状态的 dev 环境”):

CREATE TABLE orders_at_v1 CLONE orders {SNAPSHOT = "v1"};

CLONE 是最便宜的“派生”动作,但它不记血缘。如果之后要做行级 diff/merge,需要的是下一步的 DATA BRANCH CREATE。


第五步:git branch——DATA BRANCH CREATE

DATA BRANCH CREATE 看起来和 CLONE 差不多,但它记下了“我是从谁分出来的”——这份血缘让后续的行级 DIFF / MERGE / PICK 自动找到共同祖先(LCA),跑得既正确又快。

DATA BRANCH CREATE TABLE orders_dev FROM orders;

接下来在这条分支上做点改动,让它跟主线有差异——改其中 1000 行的状态,再加一行新订单:

UPDATE orders_dev SET status = 'shipped' WHERE order_id BETWEEN 5000 AND 5999;
INSERT INTO orders_dev VALUES (1000001, 'Frank', 400.00, 'paid');

-- 主线 orders 一动不动
SELECT COUNT(*) FROM orders;                       -- 还是 1000000

第六步:git diff——DATA BRANCH DIFF

-- 只看总数:分支相对主线到底变了几行
DATA BRANCH DIFF orders_dev AGAINST orders OUTPUT SUMMARY;

在 100 万行的表上,它毫秒级就返回——而且精确到行。返回是一张表,分别给出分支和主线各自的变更行数:

metric   | orders_dev | orders
INSERTED |          1 |      0     -- Frank 那一行
DELETED  |          0 |      0
UPDATED  |       1000 |      0     -- 改掉状态的那 1000 行

它不扫整张表,只扫“变更的那部分”,所以表里有 100 万还是 1 亿行都无所谓——这一点我们在第十一步会用数字证明。

OUTPUT 还有几种实用形式:

-- 看每一行差异(可加 LIMIT)
DATA BRANCH DIFF orders_dev AGAINST orders OUTPUT LIMIT 10;

-- 只看一行:总条数
DATA BRANCH DIFF orders_dev AGAINST orders OUTPUT COUNT;

-- 只对比指定几列
DATA BRANCH DIFF orders_dev AGAINST orders COLUMNS (status, amount) OUTPUT SUMMARY;

-- 把差异导出成可执行的 SQL 补丁文件。注意:导出目录必须事先存在,
-- 且这是 MatrixOne 服务端(容器内)的路径——Docker 场景先建好目录:
--   docker exec matrixone mkdir -p /tmp/orders_diff
DATA BRANCH DIFF orders_dev AGAINST orders OUTPUT FILE '/tmp/orders_diff/';

最后那种用法很有意思:导出的 .sql 是一个完整事务——先把要删/要插的行灌进两张临时表,再 DELETE + INSERT INTO 应用到目标表,最后清掉临时表。它可以直接 mysql … < diff_xxx.sql 灌到任何 MatrixOne 实例——分支的改动凝固成了一份可移植的补丁。


第七步:git merge——DATA BRANCH MERGE

确认完改动,把分支合回主线:

DATA BRANCH MERGE orders_dev INTO orders;
SELECT COUNT(*) FROM orders;                       -- 1000001,Frank 进来了

不写 WHEN CONFLICT 时默认是 FAIL。把三种冲突策略各演示一次:

-- 准备两条分支,让它们在同一行(order_id=1)上撞车
DATA BRANCH CREATE TABLE orders_a FROM orders;
DATA BRANCH CREATE TABLE orders_b FROM orders;

UPDATE orders_a SET status = 'shipped'  WHERE order_id = 1;
UPDATE orders_b SET status = 'refunded' WHERE order_id = 1;

-- 先把 orders_a 合回主线(没冲突,一次过)
DATA BRANCH MERGE orders_a INTO orders;

-- 现在 orders_b 也想合回,但 order_id=1 已被 orders_a 改过——撞上了
DATA BRANCH MERGE orders_b INTO orders WHEN CONFLICT FAIL;
-- 报错:在 order_id=1 上冲突;整个事务回滚,主线一行不动

要把冲突解开,选一种策略:

-- 保留主线、跳过冲突行(git 的 accept ours)
DATA BRANCH MERGE orders_b INTO orders WHEN CONFLICT SKIP;

-- 或者:采用分支的版本(git 的 accept theirs)
DATA BRANCH MERGE orders_b INTO orders WHEN CONFLICT ACCEPT;

关键设计:MatrixOne 只把“两边都改了同一行”算真冲突——如果只有一边动过那行,数据库会自动把改动应用过去,根本不打扰你。所以哪怕几百万行的改动,真正要你拍板的,往往就是真撞车的那几十几百行。


第八步:git cherry-pick——DATA BRANCH PICK

Git 里那个“只把分支里某几行挑过来”的动作,对应 MatrixOne 的 DATA BRANCH PICK。语法比 MERGE 多一个 KEYS(...):

-- 准备一条分支,改几行、加一行
DATA BRANCH CREATE TABLE orders_fix FROM orders;
UPDATE orders_fix SET status = 'refunded' WHERE order_id IN (2, 4);
INSERT INTO orders_fix VALUES (1000002, 'Grace', 500.00, 'paid');

-- 我只要把 order_id = 2 和 1000002 这两行挑回主线,其它一概不动
DATA BRANCH PICK orders_fix INTO orders KEYS (2, 1000002) WHEN CONFLICT ACCEPT;

SELECT order_id, status FROM orders WHERE order_id IN (2, 4, 1000002) ORDER BY order_id;
-- 2       → refunded(被挑过来了)
-- 4       → 仍然是原状态(没被挑,一动不动)
-- 1000002 → Grace 那条新订单(被挑过来了)

KEYS 也支持子查询,挑的范围由 SQL 决定:

DATA BRANCH PICK orders_fix INTO orders
    KEYS (SELECT order_id FROM orders_fix WHERE customer = 'Grace')
    WHEN CONFLICT ACCEPT;

这一招在 RLHF 偏好数据、协作标注这些场景里特别好用——“我只要 Alice 改判过的那 80 行”,一条 SQL 就挑出来。


第九步:rewind to any moment——PITR

SNAPSHOT 是你手动按的存档键;PITR 是数据库自动在背后按着的连续历史。先建一个 PITR 策略,告诉系统“这张表/这个库,过去 X 时间窗口的状态都给我留着”:

-- 给整个 git4data_demo 库开 1 天的 PITR 保留窗口
CREATE PITR demo_pitr FOR DATABASE git4data_demo RANGE 1 'd';

RANGE 的单位支持 h(小时)/ d(天,默认)/ mo(月)/ y(年)。

⚠ 一个时序细节:PITR 有一个“生效边界”(约等于它的创建时刻)。刚建完 PITR 就立刻记录秒级时间点去恢复,可能会撞上 input timestamp ... is less than the pitr valid time 的报错。稳妥做法是建完 PITR 后等 1–2 秒,或先 SHOW PITR 看一眼生效边界,再记录恢复点:

SHOW PITR;              -- 确认 demo_pitr 已生效(看它的起始时刻)

之后任何一刻——无论你有没有显式打过 snapshot——都可以恢复回去。先记一下“现在”,然后乱改一通:

SELECT now();           -- 比如:2026-06-04 14:03:07,把这个值记一下

DELETE FROM orders;     -- 整张表清空,最糟的情况

恢复到刚才那个时刻:

RESTORE DATABASE git4data_demo FROM PITR demo_pitr "2026-06-04 14:03:07";

SELECT COUNT(*) FROM orders;   -- 100 万行又回来了

时间戳格式是 "YYYY-MM-DD HH:MM:SS"——“恢复到下午两点三分零七秒那一刻”的字面意思。


第十步:不止表级——库 / 租户 / 集群都能版本化

前面所有演示都在表这个粒度上。但 MatrixOne 的 git4data 不止于表——它对表、库、租户(account)、整个集群四个层级都成立。这一点很重要:很多真实诉求其实是“多张表一起”的。

操作表级库级租户级集群级
快照 CREATE SNAPSHOTFOR TABLE db tFOR DATABASE dbFOR ACCOUNT accFOR CLUSTER
恢复 RESTORERESTORE TABLE …RESTORE DATABASE …RESTORE ACCOUNT …RESTORE CLUSTER …
时间点恢复 PITRFOR TABLE …FOR DATABASE …FOR ACCOUNT …FOR CLUSTER
零拷贝克隆 CLONECREATE TABLE … CLONECREATE DATABASE … CLONE——
分支 DATA BRANCH CREATE… TABLE … FROM… DATABASE … FROM——

库级是最常用的“一致性版本”粒度:特征表 + 标签表 + 元数据表一起打一个快照、一起恢复,保证整份训练集跨表一致,多表一次性原子回滚:

CREATE SNAPSHOT db_v1 FOR DATABASE git4data_demo;     -- 库里所有表,一个版本
-- …改了库里好几张表…
RESTORE DATABASE git4data_demo {SNAPSHOT = db_v1};    -- 多表原子回到 db_v1

租户级把“一个 account 下所有库的所有表”一次性版本化——多租户 SaaS 给每个客户做隔离快照、或整租户回滚时尤其有用:

CREATE SNAPSHOT acct_v1 FOR ACCOUNT myacct;           -- 整个租户一个版本
-- RESTORE ACCOUNT myacct {SNAPSHOT = acct_v1};        -- 整租户回滚(生产慎用)

集群级则覆盖整个实例,通常用于灾备级别的统一快照与恢复。

一句话:从一张表,到一个库,到一个租户,到整个集群,git4data 是同一套语义、同一种廉价。


第十一步:灌到 1000 万、1 亿——看“成本与数据量无关”

现在把数据加大,再重跑这些原语——你会看到 git4data 最反直觉的一点:快照、克隆、分支几乎不随数据量变化。

灌更多数据,只要改 generate_series 的上限(order_id 加个偏移避免主键冲突):

-- 再灌 900 万,把表凑到 1000 万行
INSERT INTO orders
SELECT result + 2000000,
       concat('cust_', result % 10000),
       round(rand()*1000, 2),
       CASE result % 3 WHEN 0 THEN 'paid' WHEN 1 THEN 'pending' ELSE 'cancelled' END
FROM generate_series(1, 9000000) g;

我们在一台单机 Docker(MatrixOne 4.0.0-rc1)上,把同一张表分别灌到 100 万、1000 万、1 亿行,每一档都跑同一组 git4data 操作(其中 diff / merge 都只改其中 1000 行)。实测(稳定态,多次取中位数):

表规模灌入耗时CREATE SNAPSHOTCLONEDATA BRANCH CREATEDIFF(改 1000 行)MERGE(1000 行)
100 万行0.5 s6 ms6 ms7 ms13 ms64 ms
1000 万行5.3 s8 ms8 ms7 ms21 ms178 ms
1 亿行41 s5 ms25 ms19 ms23 ms189 ms

这张表的三个关键,正是 git4data 的命门所在:

  • 快照:完全恒定——数据涨了 100 倍(100 万 → 1 亿),CREATE SNAPSHOT 始终是 5–8 毫秒。因为快照只是给“当前由哪些数据对象组成”的那份元数据目录起个名字,跟表里有多少行毫无关系。
  • 克隆 / 分支:复制的是元数据目录,不是数据——100 倍数据,克隆只从 6 毫秒涨到 25 毫秒。它复制的那份目录会随对象数量缓慢变大,但始终是在拷几 MB 元数据,而不是几十 GB 数据。
  • diff / merge:只随“改了多少行”走——三档都只改了 1000 行,所以无论表里躺着 100 万还是 1 亿行,DIFF 始终一二十毫秒、MERGE 始终几十到一两百毫秒。MERGE 比 DIFF 略重(它要把变更真正写回主表),但同样由“改了多少行”决定,不随表规模线性膨胀。

一个诚实的细节:第一次对刚灌完的大表打快照会稍慢一点(实测约 10–12 毫秒),因为它要先把内存里还没落盘的数据 flush 到对象存储——这是一次性开销,之后就回落到上表的稳定态。我们灌完数据、稍作停顿再测,正是为了让数字反映 git4data 操作本身的成本,而不是这一次性的落盘。

这正是上一篇那句话的实证:难的从来不是版本控制本身,而是在海量数据上还能让它廉价。

注:再往上(10 亿行以上),单机 Docker 的内存会先成为瓶颈(我们这台 VM 仅 ~4GB,灌到 5000 万行就被 OOM)。真正的十亿级数据,该上多节点集群或云——论文里那组 6 亿行的实验跑在 64 核 / 256GB 的机器上,克隆同样是 0.2 秒。


串起来:一次完整的“Git 化数据”工作流

到这里所有原语你都用过了。最后把它们串成一个迷你工作流,模拟“一次模型训练前的数据策展”:

-- ① 训练入口的原始数据,先按一下存档键
CREATE SNAPSHOT samples_v3_raw FOR TABLE git4data_demo orders;

-- ② 在带血缘的分支上跑清洗——主线一动不动
DATA BRANCH CREATE TABLE orders_clean FROM orders;
DELETE FROM orders_clean WHERE amount < 200;
UPDATE orders_clean SET status = 'cancelled' WHERE status = 'pending';

-- ③ 评审:清洗到底动了什么?
DATA BRANCH DIFF orders_clean AGAINST orders OUTPUT SUMMARY;

-- ④ 质量门禁通过,原子地合并回主线
DATA BRANCH MERGE orders_clean INTO orders WHEN CONFLICT FAIL;

-- ⑤ 这就是 model_v3 的“训练所用数据”,钉一个名字
CREATE SNAPSHOT samples_v3 FOR TABLE git4data_demo orders;

-- ……后面发现模型变差……

-- ⑥ 实在不行,一秒回退
RESTORE TABLE git4data_demo.orders {SNAPSHOT = samples_v3_raw};

每一次实验、每一次训练、每一次发布,都有一个可命名的版本钉在那里。任何“哪里出了问题”,从此都是 SQL 一行能问得清的事。


收尾 & 清理

回头看看:从 docker run 到 RESTORE,十分钟之内你在 100 万行真实规模的数据上跑通了:

  • commit / tag / reset(CREATE SNAPSHOT / SELECT … {snapshot = '…'} / RESTORE … {SNAPSHOT = …})
  • clone(CREATE TABLE … CLONE / CREATE DATABASE … CLONE)
  • branch(DATA BRANCH CREATE TABLE/DATABASE)
  • diff(DATA BRANCH DIFF … OUTPUT SUMMARY / COUNT / LIMIT / FILE)
  • merge + 三种冲突策略(DATA BRANCH MERGE … WHEN CONFLICT FAIL|SKIP|ACCEPT)
  • cherry-pick(DATA BRANCH PICK … KEYS(…))
  • rewind to any moment(CREATE PITR + RESTORE … FROM PITR "…")
  • 表 / 库 / 租户 / 集群四个粒度

清理一下用过的对象:

DROP SNAPSHOT v1;
DROP SNAPSHOT db_v1;
DROP SNAPSHOT samples_v3_raw;
DROP SNAPSHOT samples_v3;
DROP PITR demo_pitr;
DROP DATABASE git4data_demo;        -- 一句清掉所有演示表

或者你也可以一句 docker rm -f matrixone 把整个实例端掉。

这就是上一篇那“三个动作”在 SQL 里的全部样貌——它们现在已经在你机器上、在百万行数据上跑过一遍了。你可以拿真生产数据当 staging、拿任意时刻当起点、让团队在同一张大表上并行作业、让模型训练有可复现的版本钉。

下一篇我们会回头讲实现原理:MatrixOne 凭什么能在亿级、乃至论文里的 6 亿行上把这些动作做到秒级、字节级?答案在它的存储引擎里——下次我们去把它打开看看。

📎 完整文档:本文用到的每个原语都有专门页面,参考 docs.matrixorigin.cn 的 SQL Reference / DDL 章节。
📎 源码与社区:github.com/matrixorigin/matrixone

RS422总线 ①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式; 阅读详情

相关推荐

别再死记硬背了!用Amesim HCD库亲手搭建单向阀、锥阀、球阀模型(附详细参数设置)

本文详细介绍了如何使用Amesim HCD库从零构建单向阀、锥阀和球阀的仿真模型,帮助工程师摆脱死记硬背,掌握物理建模的核心技巧。通过实战案例和参数设置指南,读者将学会如何优化阀门动态响应、验证流量特性以及处理旋转运动等独特挑战,提升液压系统设计效率。

weixin_29248611的博客 501

MatrixOne Git4Data 技术详解(三):MatrixOne 架构及 Git4Data 原理解析,快照、Diff、Merge 凭什么这么快

文章摘要: MatrixOne数据库通过云原生存算分离架构,实现毫秒级数据版本控制。核心原理为:1) 数据以不可变对象存储,仅目录元数据可变;2) 快照通过记录时间戳保护对象版本,克隆仅复制元数据引用,均无需数据拷贝;3) Diff操作仅扫描增量变更对象而非全表;4) 合并采用三方对比机制,自动处理非冲突修改。这种设计使得对1亿行数据创建快照仅需5ms,克隆25ms,比对1000行差异23ms,版本控制成本与数据量解耦,成为存储引擎的自然特性而非额外开销。

MatrixOrigin的博客 775

电机控制易混知识点1-基波频率/载波频率/采样频率

在电机控制学习工作中会接触到很多专业名词,其中基波频率,载波频率,采样频率是最常接触到的,特别对于电机控制小白开说,不容易理解,现对这几个概念做下总结归纳。

新能源电机控制工程师 | 聚焦实战问题,搭建互助平台 分享电机控制代码调试、现场故障排查、算法优化中的真实困惑;开放讨论电机基础知识以及工作中遇到难点等共性难题。拒绝单向输出,只做工程师的“技术树洞”与“解忧杂货铺”! 2195

MatrixOne Git4Data 技术详解(四):数据版本控制全景——MatrixOne、lakeFS、DVC、Neon、Dolt 到底有什么不同

Git4Data 系列(四):画一张数据版本控制的全景地图。'git for data' 这个词被 DVC / Git LFS、lakeFS、Iceberg / Delta + Nessie、Snowflake / Neon、Dolt 一起用,但它们说的并不是同一件事。本文用五个问题立框架,按版本控制所在的层次分成四个种类(每类配一张架构图),再用一张 git 原语完整度矩阵把各家的 git 语义对齐,最后标定 MatrixOne 的准确坐标与诚实边界。

MatrixOrigin的博客 417

C++动态规划详解

动态规划思想 一、动态规划概念: 动态规划(dp)是研究多步决策过程最优化问题的一种数学方法。在动态规划中,为了寻找一个问题的最优解(即最优决策过程),将整个问题划分成若干个相应的阶段,并在每个阶段都根据先前所作出的决策作出当前阶段最优决策,进而得出整个问题的最优解。即记住已知问题的答案,在已知的答案的基础上解决未知的问题。 在这类问题中,可能会有许多可行解。每一个解都对应于一个值,我们希望找到具有最优值的解。动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后

weixin_51951103的博客 2万+

图像相似度的评价指标 : FID(Fréchet Inception Distance)

FID(Fréchet Inception Distance) 是用来计算真实图像与生成图像的特征向量间距离的一种度量。如果FID值越小,则相似程度越高。最好情况即是FID=0,两个图像相同。 实际计算: 参考链接:https://machinelearningmastery.com/how-to-implement-the-frechet-inception-distance-fid-from-scratch/ # example of calculating the frechet inceptio

weixin_43723625的博客 1万+

MatrixOne Git for Data详解:如何像管理代码一样管理数据

MatrixOne的Git for Data功能是数据库领域的革命性创新,它将Git版本控制的强大能力引入数据管理领域。正如Git彻底改变了代码协作方式一样,Git for Data让您能够像管理代码一样管理数据库,为数据工作流带来前所未有的灵活性和安全性。本文将为您全面解析这一创新功能的原理、优势和实践方法。 ## 🎯 什么是Git for Data? Git for Data是Matri

gitblog_00115的博客 714

Verilog基本代码结构及常用语句always、begin...end解读

Verilog基本代码结构及常用语句always、begin...end解读 线性反馈以为寄存器(LFSR)

weixin_62380586的博客 1万+

# MatrixOne Git4Data 技术详解(八)·AI 训练实践篇:从数据进入到模型迭代——Git4Data 能力如何贯穿机器学习全流程

Git4Data 系列(八),AI 训练实践篇开篇:先建立机器学习全流程的坐标系。从数据接入、质量门禁、清洗标注、特征工程、训练/验证/测试集发布、模型评估,到上线监控与反馈重训,逐环节说明 snapshot、branch、diff、merge、cherry-pick、restore 与 PITR 能解决什么、不能解决什么,并以一个持续迭代的风控模型完整串联。配套脚本在 MatrixOne 4.1.0 上实测。

MatrixOrigin的博客 429

从零实现机械臂抓取仿真:用MoveIt+Gazebo完成物体pick&place全流程

本文详细介绍了如何使用ROS的MoveIt框架与Gazebo仿真环境,从零构建机械臂抓取仿真系统。涵盖环境搭建、MoveIt配置、Gazebo集成、抓取动作实现等全流程,帮助开发者掌握机械臂控制的核心技术,实现高效的pick&place任务。

weixin_29250403的博客 478

【Unity 城市建模插件】POLY-Megapolis City Pack 提供超过数百种城市建筑、道路、车辆与城市家具模型,完美适用于构建现代化城市、模拟城市游戏、都市题材冒险类游戏和开放世界项目

POLY - Megapolis City Pack 是一套风格统一、内容丰富的低多边形城市建模资源包,专为 Unity 引擎设计。该资源包提供超过数百种城市建筑、道路、车辆与城市家具模型,完美适用于构建现代化城市、模拟城市游戏、都市题材冒险类游戏和开放世界项目。无论是快速原型开发还是正式发布项目,POLY 系列都能提供高效、风格统一的解决方案。

2403_88403568的博客 635

MatrixOne Git4Data 技术详解(十)·深度学习篇:训练数据怎么管——lakeFS 管文件,MatrixOne 管元数据

Git4Data 系列(十),深度学习篇:文件型(图像等)训练数据分成两个世界——图/音/视频文件交给 lakeFS,指针/标签/哈希/切分组成的元数据交给 MatrixOne。以训练一个图像分类模型为例,用 SQL 在元数据上完成接入(WAP)、精确+感知去重、评测去污染、完整性检查、重标注、data curation 发布,并用「元数据快照 × lakeFS commit」钉成可复现训练集;lakeFS + MatrixOne 端到端脚本已实测。SQL 在 MatrixOne 4.1.0 上实测。

MatrixOrigin的博客 346

腾讯Android开发面试指南与参考答案

腾讯深圳元宝高级Android开发工程师岗位要求3-5年Android开发经验,熟悉Kotlin和性能优化,具备架构设计能力。岗位职责包括元宝Android客户端研发、稳定性优化及跨团队协作。面试重点考察Kotlin、Jetpack Compose、多线程编程等核心技术,3轮线上面试流程较快。无AI项目经验也可应聘,需突出展示Android架构设计、性能调优等实战能力。建议准备Compose开发、算法等加分项案例。

郑伟强dev的专栏 1136

MatrixOne Git4Data 技术详解(五)·数据运维实践篇:误操作急救——从手滑 UPDATE 到误删整表,都能秒级回退

本文针对数据运维四大典型事故场景(误更新、批处理错误、脏写、误删表),提供了一套基于git4data的应急方案。核心策略是事前布防+精准恢复:通过PITR自动保护近期数据,配合毫秒级快照建立存档点。事故后先通过DATA BRANCH DIFF快速定位受损行,再根据业务连续性需求选择整表回滚或行级修复。关键优势在于:1)无需全表扫描即可生成行级事故报告;2)支持保留事故后的正常写入;3)所有操作均通过标准SQL实现,配套仓库提供可立即执行的示例。

MatrixOrigin的博客 467

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

MatrixOne Git4Data 技术详解(十一)·大模型篇:SFT 数据 curation——可审计、可复现的数据清洗

Git4Data 系列(十一),大模型篇:SFT 的数据量比预训练小好几个数量级,每一次取舍都印在模型行为上。本文用一个对话模型的 SFT 数据池,在零拷贝分支上完整走一遍 curation——精确去重、近重复、质量门、安全、评测去污染、多轮对话完整性六步过滤,每步先计数,DATA BRANCH DIFF 给出这一轮的净变更,再按先登记、后替换、再快照的顺序发布;并对比业内其他做法。SQL 在 MatrixOne 4.1.0 上实测。

MatrixOrigin的博客 358

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

MatrixOne Git4Data 技术详解(九)·AI 训练实践篇:数据集发布与泄漏——别让离线指标骗了你

Git4Data 系列(八),AI 训练实践篇开篇:先建立机器学习全流程的坐标系。从数据接入、质量门禁、清洗标注、特征工程、训练/验证/测试集发布、模型评估,到上线监控与反馈重训,逐环节说明 snapshot、branch、diff、merge、cherry-pick、restore 与 PITR 能解决什么、不能解决什么,并以一个持续迭代的风控模型完整串联。配套脚本在 MatrixOne 4.1.0 上实测。

MatrixOrigin的博客 406

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

MatrixOne Git4Data 技术详解(七)·数据运维实践篇:Write-Audit-Publish——给 ETL 流水线装一道发布门禁

Git4Data 系列(七),数据运维实践篇收官:Write-Audit-Publish(WAP)。新数据先落 staging 分支、跑一组 SQL 审计门禁、再一次原子 MERGE 发布——脏批次在门口就被拦下,生产表全程零感知。含真实场景、三步落地、以及和直接灌/蓝绿改名/staging+INSERT/事务/DQ 工具等方案的详细对比。全部 SQL 在 MatrixOne 4.0.0-rc3 上实测。

MatrixOrigin的博客 264

MatrixOne Git4Data 技术详解(十二)·大模型篇:RLHF 偏好数据——分歧、裁决与可复现

Git4Data 系列(十二),大模型篇:偏好数据的单位不是行而是对,而且不是采集来的、是从标注投票算出来的二阶数据——RLHF 与 DPO 两条路线共用同一份。本文用 20000 个 prompt 的偏好池,从 63000 条投票推导偏好对,在分支上审计退化对、无共识、偏好环与长度偏置,DIFF 出这一轮的净变更,用分支裁决标注分歧、合并前先把冲突清单物化下来,最后先登记后快照把数据集与奖励模型绑成可复现的一对。SQL 在 MatrixOne 4.1.0 上实测,全部确定性可复现。

MatrixOrigin的博客 432

Git for Data:像Git一样管理你的数据

摘要 AI时代的数据管理面临新挑战,MatrixOne提出"Git for Data"解决方案,将代码版本控制理念引入数据管理。该方案支持数据版本控制、快速回滚、分支管理等功能,能有效应对AI幻觉、确保数据溯源、提升协作效率。核心能力包括细粒度版本控制、秒级恢复、数据分支/克隆、权限管理等,基于存储优化技术实现低成本高效运作。作为云原生超融合数据库,MatrixOne兼容MySQL,支持多模态数据存储,为AI应用开发提供敏捷、安全的数据管理新范式。

MatrixOrigin的博客 1095

MatrixOne Git4Data:为机器学习数据管理打造可执行、可审计、可复现的版本链

清洗与标注环节,先打快照,标注员各自开分支,处理重叠标注区冲突,资深评审员挑回争议样本,标注平台与 Git4Data 能力分工明确;训练、验证、测试集发布环节,不仅要冻结数据,还要明确切分成员关系与规则,采用库级快照发布,可复现样本角色,新版本发布前需分别 review 样本内容和切分成员关系;实际管理中存在诸多难题,背后反映出机器学习缺乏作用在数据本身的版本语义,MatrixOne 的 Git4Data 能力可填补这一缺口,本文先建全流程地图,后续深入典型节点。Branch 用于隔离未证明正确的假设;

IT界那些事儿 16

MatrixOne Git4Data 技术详解(一):海量数据的 Git 时刻

摘要: MatrixOne推出的Git4Data技术为海量数据提供了类似Git的版本控制能力(commit、branch、diff等),解决了数据管理长期缺乏高效并行协作的痛点。通过指针而非复制实现分支,其在TB级数据上仍能毫秒级操作,成本近乎为零。这一突破尤其适配AI时代需求——AI Agent的自主性、错误率和并行探索特性亟需数据版本化支撑,如同Git曾推动开源协作革命。Git4Data填补了数据基础设施的关键空白,成为AI安全操作数据的前提。后续文章将深入解析其技术原理及在MLOps、Agent进化等

MatrixOrigin的博客 246

基于MatrixOne Git4Data的ETL流水线Write-Audit-Publish模式实战

在数据工程领域,ETL(提取、转换、加载)是构建数据仓库和数据湖的核心技术,负责将分散、异构的源数据转化为统一、可用的目标数据。其核心原理是通过一系列可编程的数据处理步骤,实现数据的整合与价值提炼。该技术的核心价值在于保障数据质量、提升处理效率,并支持复杂的业务分析需求,广泛应用于数据集成、报表生成和机器学习等场景。随着数据规模与业务复杂度的增长,确保ETL任务在生产环境中的稳定性和数据准确性成为关键挑战。为此,业界引入了Write-Audit-Publish(WAP)模式,通过将数据写入、审计校验和发布生

weixin_30800987的博客 324

ETL发布门禁:基于Git4Data的Write-Audit-Publish模式实践

在数据工程领域,ETL(提取、转换、加载)是构建数据仓库和数据分析平台的核心技术,负责将原始数据转化为可信、可用的数据资产。其核心原理是通过一系列预定义的转换逻辑与工作流,实现数据的清洗、整合与建模。该技术的核心价值在于确保数据质量、一致性与时效性,为业务决策和数据分析提供可靠基础。典型的应用场景包括报表生成、用户画像构建和机器学习特征工程。然而,传统“写后即走”的ETL发布模式存在直接将未经验证的数据变更推入生产环境的风险。为此,结合**数据版本控制**与**分支隔离**的Write-Audit-Publ

weixin_30265103的博客 369

MatrixOne Git4Data 技术详解(六)·数据运维实践篇:数据协作开发——像合并代码一样合并数据

description Git4Data 系列(六),数据运维主题:数据协作开发。多个人要同时改同一张表时怎么办——多人并行清洗主数据、把数据改动做成可评审的 PR、在分支上开发大改造而主线照常服务——用每人一条分支、行级 DIFF 评审、三方 MERGE、冲突策略(FAIL/SKIP/ACCEPT)与 cherry-pick 实现。全部 SQL 在 MatrixOne 4.0.0-rc3 上实测。

MatrixOrigin的博客 382

在数据库里玩“平行宇宙”:MatrixOne Data Branch 让数据也拥有Git 的分支/合并/对比/回滚(含跨集群同步)

这篇文章讲一件事:当数据像代码一样频繁迭代时,数据库内生的“分支工作流”会比备份/复制更可靠、更省钱、更工程化。

MatrixOrigin的博客 1156

基于WAP模式与Git4Data构建安全可靠的ETL数据发布门禁

在数据工程领域,ETL(提取、转换、加载)流水线是数据仓库与数据湖的核心组件,负责将原始数据转化为可供分析使用的可靠数据资产。其核心原理在于通过一系列预定义的转换规则,对数据进行清洗、整合与加工。这一过程的技术价值在于保障下游数据分析、商业智能(BI)报表及机器学习模型的输入质量,是数据驱动决策的基石。然而,直接将未经校验的数据写入生产环境存在巨大风险,可能引发数据污染与业务决策失误。为此,Write-Audit-Publish(WAP)模式应运而生,它通过引入一个隔离的审计缓冲区,在数据最终发布前进行系统

weixin_33947521的博客 379
上一篇: MatrixOne Git4Data 技术详解(一):海量数据的 Git 时刻
下一篇: 重写组织源代码,我们怎么走向 AI-Native
MatrixOrigin
博客等级 码龄5年 708粉丝 230原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值