hacker30提到的文件锁问题让我想起去年在莫大实验室的一次事故。
我们有个项目处理俄罗斯文学语料库,大概300万条文本记录。最初用SQLite嵌入式模式,三个研究生同时跑不同的分析脚本,结果文件锁冲突导致数据损坏,修复花了两天。后来换成DuckDB的嵌入式模式,情况好了一些,但还是在并发写入时偶尔出问题。
Quack协议解决的不只是"远程访问"这个表面问题。从系统设计的角度看,它把DuckDB从一个库(library)变成了一个进程(process),这个边界变化很关键。库是被动的,它依赖宿主程序的调度和资源管理;进程是主动的,它可以自己管理连接池、缓存策略、查询队列。这意味着DuckDB服务端可以做查询优化,这在嵌入式模式下是不可能的——嵌入式模式每次查询都是独立的,无法利用跨查询的统计信息。
不过楼主说的"云厂商托管服务的价格水分会被挤干",这个判断我觉得需要补充一点。云厂商卖的不是单纯的数据库,而是SLA保证、自动备份、监控告警、合规认证这一整套运维体系。DuckDB+Quack降低了技术门槛,但对于需要99.99%可用性的场景,自建服务的隐性成本(半夜被报警叫起来修数据库)可能比云服务费还高。我在上一份工作经历过这个,公司为了省钱自建PostgreSQL集群,结果一年内三次半夜宕机,算上加班费和业务损失,比直接用RDS贵了三倍。
另一个值得讨论的点是Quack协议的生态兼容性。楼主提到BI工具可以直接连,但实际情况取决于工具是否实现了Quack协议驱动。目前主流BI工具(Metabase、Superset、Tableau)原生支持的是MySQL/PostgreSQL协议,Quack作为一个新协议,需要社区贡献连接器。hacker30能在Metabase上跑起来,说明已经有初步支持了,但生产环境里可能会遇到兼容性问题——比如某些SQL方言特性不支持,或者认证机制不完善。
关于NAS上跑DuckDB这个想法,我上个月在自家Synology上试过。DS220+,双核Celeron,6GB内存,跑DuckDB处理50GB的日志数据,简单聚合查询在2秒内返回,比同一台机器上跑的MySQL快了一个数量级。列式存储对分析型负载的优势确实明显。不过有个实际问题:DuckDB目前不支持用户认证,Quack协议也没有加密层,如果你的NAS暴露在公网上,安全风险需要考虑。我现在的做法是只在内网用,通过WireGuard VPN连回去。
说到树莓派,我好奇楼主具体测试过什么配置?我之前在树莓派4B(8GB版)上跑DuckDB,处理百万行CSV的GROUP BY查询大概需要15秒,内存占用稳定在2GB左右。作为对比,同一数据用Pandas处理直接OOM了。这个性能对于边缘计算场景很有吸引力,比如工厂生产线上的实时质量数据分析,不需要把数据传到中心服务器。
最后想问问楼主,你提到"如果社区后续在这个协议上玩出读写分离或者副本同步",这个方向具体有什么想法?DuckDB目前是单机架构,要实现副本同步需要解决很多分布式系统的基础问题(共识算法、数据分片、故障恢复),这可能会让它失去"轻量"这个核心优势。嗯我觉得更现实的方向是WAL日志的流式复制,类似SQLite的Litestream方案,把DuckDB的WAL实时备份到对象存储,这样至少能做到灾难恢复。