< 返回版块

Mike Tang 发表于 2026-09-30 09:07

rivet:直接读 MySQL binlog 进 BigQuery

rivet 是一个开源 Rust CLI,从 OLTP 数据库读取变更并写入数仓。作者完成了第一轮生产试点:MySQL 由 rivet 直接读 binlog,写成 Parquet 后放到 Google Cloud Storage,再进入 BigQuery。链路上是一台虚拟机加 cron,不经过 Kafka、Debezium 或 Airflow。

试点库有 154 张表、32 亿行,每天刷新 8 次。原管道用日期窗口拉取变更,每周再全量重载一次;没有 updated_at 变化的修改要等到周重载才会被看见。对照同一数据库上的原管道:第一天发现 880 行事后被改过、但时间戳没动的记录,抽查后确认是过期余额。MySQL 副本读负载约降 99%,每月约 4 TB 读取(其中约 95% 来自每周全量)变成约 24 GB binlog 流。AWS 到 GCP 出站流量约降 98%,每天约 150 MB 压缩 Parquet,不再每周传整库快照。BigQuery 的 MERGE 作业少 25%,每次 MERGE 的字节少 30%。同等刷新频率下,BigQuery、GCS 与出站合计基础设施成本约降 50%。存储变化约在 ±2%。

完整一轮目前约 68 分钟:读完全部 154 张表的 binlog 约 9 分钟,其余是逐表加载和合并。日志里 BigQuery 忙碌时间约占 25%–30%。作者估计升级到最多 16 张表并行后,一轮可能到 10–25 分钟,试点升级后的数字还没测完。仓库:panchenkoai/rivet。说明页:https://panchenkoai.github.io/rivet/cheat-sheet.html

原文链接:https://www.reddit.com/r/rust/comments/1wtm323/replaced_a_weekly_full_reload_mysql_bigquery_with/

用 Iced 重写整个界面

Git Cherry Tree 是一个用 Rust 写的 Git 客户端。作者把原先的 Tauri + React 界面换成 Iced。

换之前,Linux 上的 Tauri 构建大约 90 MB,也不能像 Windows 那样直接发一个免安装二进制。Windows 上跨进程调用的延迟至少 3 ms。Tauri command 大约 2–10 MB/s;一次传很大的负载大约 100 MB/s,传输期间界面会卡住;绕过 Tauri command API 的内部下载协议大约 40 MB/s。有杀毒软件把启动浏览器这一步报成诈骗软件。

换完后,界面代码从约 2.4 万行 TypeScript 增到约 4.5 万行 Rust,其中包含为了打磨效果而放进仓库的一部分 Iced 组件。二进制从 Web 版的 15 MB,到第一版 Iced 的 8 MB,功能补齐后到 23 MB,再压回 15.3 MB;若把 panic 设为 abort,大约还能到 11 MB。高负载下帧时间从约 9 ms 降到 3–6 ms。Linux 上可以打成单个可运行二进制。作者自写了一个只生成着色 span 的语法高亮,支持 30 多种语言、70 个文件扩展名;百万行 diff 从点击到显示大约 700 ms,大约比 Web 版快 3–4 倍。图标没有用完整 SVG 渲染器,那个依赖大约会增加 3 MB。

原文链接:https://www.gitcherrytree.com/blog/rewriting-the-ui-in-rust/

用 Rust 写 Linux 内核模块

这是一篇在 Ubuntu 26.04 和 Raspberry Pi 4 上搭建 Rust 内核模块开发环境的记录。目标是给 Pi 4 上的 16x2 LCD 写驱动;本文只写环境,下一篇给驱动规格和最小示例。环境按 2026-09-27 在 Ubuntu 26.04 LTS 上验证。

Raspbian 内核默认没有打开 Rust。作者按树莓派文档交叉编译内核,并关掉与 Rust 不兼容的 CONFIG_MODVERSIONS。模块目录里把 rustup 工具链固定到 1.93.1 后,交叉编译出的 hello_rust.ko 可以在 Pi 上 insmod,dmesg 打出 Hello from Rust! 和 Goodbye from Rust!。本机 Ubuntu 构建则不用 rustup:需要 apt 安装 rust、rust-src 和与当前内核版本对应的 linux-lib-rust-$(uname -r),并且不要加 LLVM=1,因为 Ubuntu 预编译内核走的是 gcc。作者注明 Hello Rust 示例里有一部分代码来自 Gemini,Makefile 做了小改。

原文链接:https://thehecknow.hashnode.dev/implementing-a-linux-device-driver-in-rust

cargo-crap 0.6:给重复函数做类型化分级

cargo-crap 是用来找出 Rust 代码里重复函数的命令行工具。0.5.0 的 --duplicates 用 syn 把函数解析成树,抹掉函数名、变量名、字段名、路径名和字面量,再按子树指纹的 Jaccard 相似度比较。默认阈值 0.82。在作者自己的源码上,这一步报出 24 对,其中既有改名后的同一段逻辑,也有只是都调用了 writeln! 的相似形状。

0.6.0 增加可选 triage:把每一对函数体和相似度发给 TypeSafe 的 System One 模型(默认 jev-latest),返回四种类型之一(same-logic、parameterisable、shared-shape-only、structural-obligation)、是否值得合并,以及一边修 bug 另一边会不会漏修的概率。置信度默认低于 0.5 时只标 uncertain。结果缓存在 target/,键包含两边函数体、模型和问题集的哈希。triage 只加注释,不改变退出码;没有密钥、没有网络或某一对请求失败时,整段分级会被丢掉,退回原来的结构报告。默认关闭,要在 .cargo-crap.toml 里打开,并且环境变量里有 TYPESAFE_API_KEY。发布二进制自带该功能;从源码安装需要 --features triage。

原文链接:https://minikin.me/blog/cargo-crap-triage


From Rust中文社区 Mike

社区学习交流平台订阅:

评论区

写评论

还没有评论

1 共 0 条评论, 1 页