digoal
2023-11-30
PostgreSQL , PolarDB , duckdb , in process , cs
DuckDB发展有点快, 不确定是不是在不久的将来会支持我期待的模式. 2022年9月份写过一些类似使用duckdb实现serverless datalake的文章:
- 《德说-第135期, duckdb的产品形态如何盈利? 未来数据库产品的商业形态》
- 《DuckDB parquet 分区表 / Delta Lake(数据湖) 应用》
- 《德说-第140期, duckdb+容器+parquet+对象存储, 实现SaaS场景, 低代码拖拉拽多维度实时分析 降本提效》
原来2022 11月motherduck就已经在搞这个模式了: https://motherduck.com/
- motherduck重新定义了一把serverless, 因为它的计算跑在client侧, 所以准确的说它是Noserver. 顶多也就用MotherDuck来管理一下元数据. 所以它的商业模式应该是转售对象存储的, 当然还有一定的元数据管理费用. 不过server也不是完全没有计算, 当client和存储很远时(例如client在云下, 而数据在云上的情况), 数据传输就会成为瓶颈, 那么你可以使用server来做计算. 做厚client, 做薄server 是motherduck的思路.
- https://mp.weixin.qq.com/s?__biz=MzA5MTM4MzY1Mw==&mid=2247484124&idx=1&sn=d3d001d54218760f25331d5823e9f817&chksm=907c70d6a70bf9c0ac892be045da3b88f4981b921c6a974454f534ea02aa2d93beb8e4a0d0bc&token=147752621&lang=zh_CN#rd
- https://motherduck.com/docs/architecture-and-capabilities
元数据在本地, 不能共享(但是可以read only模式attach datafile. 也就是说多个进程是可以同时只读模式打开这个datafile的. 我们可以只在datafile内保存schema定义, 实现共享metadata的目的.)
演变成服务.
聚合代理(分发任务多duckdb, 聚合结果) - duckdb(多机的独立分布式in process计算) - metadata db(共享源数据) - s3/oss parquet(廉价远程分布式存储)
就算不做这个聚合代理, 仅剥离metdata也是很有意义的. (每个组件独立发展, 必要的时候可以形成联合体, 非必要依旧可以单机in process运行.) 《将 "数据结构、数据存储" 从 "数据库管理系统" 剥离后 - 造就了大量大数据产品(DataFusion, arrow-rs, databend等)》
- duckdb真正做到了计算存储分离, 像搭积木一样组合数据库能力。想要分析就用分析类引擎, 想要时序就用时序类引擎, 想要时空就用时空类存储引擎...
- 存储只是一个文件格式, 例如支持 iceberg, parquet, arrow, inmemory ..... 存放在哪里都可以只要能访问到(例如oss, s3, ftp, nas, nfs, 或者本地)
- 计算直接嵌入程序, 例如直接嵌入到python中.
duckdb要更加的实用, 在生态还有一个很重要的一环, 如何快速将数据源的数据导出为parquet, 并建立meta信息.
gda (generate data's agent) - data sources - 快速生成parquet并导入s3/oss, 以及对应的metadata.