一套改过、还没投入使用的报表链路:物化视图在明细每次插入时把这一批聚合进按 UTC 半小时分桶的报表表,日报、周报、月报按时区在查询时上卷。lab 上整点、半点时区和夏令时那天都对得上,+5:45 的加德满都对不上。
ClickHouse 的查询路径和 FINAL 的代价
两三亿行的日分区里查交易明细,ClickHouse 依次按分区、part 的最值、稀疏主键和跳数索引跳过数据,只读用到的列。明细换成 ReplacingMergeTree 后要带 FINAL 读,lab 上它的代价随重叠范围变,比手写去重省一个数量级的内存。
ClickHouse 的写入路径
一批交易明细 INSERT 进复制表之后,服务端按分区切块、排序压缩成新的 part,后台 merge 把小 part 合大,另外两个副本照着 Keeper 里的复制日志去拉。part 写完不再改,去重、改数据和修数据的做法都从这一点来。
ClickHouse 轻量删除清重复行的代价
按 _part、_part_offset 删掉重复的那份,带子查询的 DELETE 在复制表上先被拒;放开之后子查询跟着全表 part 数重复执行。加上 IN PARTITION 它反而最省,但同一秒写进来的两份按 create_time 分不开。
清理 ClickHouse 重复行时行数校验拦不住的情形
用 argMin 重建出事窗口再 REPLACE 的清理方案,在三副本 lab 里先报语法错;修好之后,列序错位、迟到写入、落后副本和只看一个节点的核对都能让数据坏掉或丢掉,而方案自带的行数校验照样通过。
ClickHouse 重复行的四个入口和 sink exactlyOnce 的覆盖范围
同一条 Kafka 到 ClickHouse 的链路上,重复行能从 producer 重试、sink 超时重投、task 重启重放和人工补发四处进来。lab 实测官方 sink 的 exactlyOnce 挡得住重放,挡不住超时重投,打开之后崩溃重启默认会停在状态冲突上。
在 Cloudflare Tunnel 后面按 key 查 LiteLLM 的用量和来源 IP
LiteLLM 的 spend log 按 key 记了 token 和来源 IP,放在 Cloudflare Tunnel 后面时 IP 全是集群内地址。改用 pre-call hook 读 CF-Connecting-IP,对外的 key 另加别名和限流。
MySQL 8 迁到 OceanBase 4.2 的兼容差异与分区取舍
prize-service 换到 OceanBase 4.2.5 后,隔离级别、gap lock、等锁超时和 FOR UPDATE OF 都与 MySQL 8 不同;时间分区拆不开 pmax,建表脚本不写分区,交给 DBA 做 HASH/KEY 分区。
xiaogpt 怎么接管小爱音箱:轮询原理与 homelab 部署
xiaogpt 不改音箱固件,靠每秒轮询小米云的对话记录截下带关键词的问题,再交给大模型回答。在新加坡密码登录会被小米风控拒绝,只能用 passToken;它会轮换,登录失败还会删掉 token 文件,所以在 K3s 里放 PVC、单文件挂载。
Kubernetes 怎样用容器重现虚拟机
借 Ivan Velichko 在 iximiuz 上的系统解析,回顾软件部署从虚拟机到容器编排的演进脉络:分析 VM 时代的实例抽象、Docker 单进程容器的断层,以及 Kubernetes 怎样用三层对象重现经典服务模型。