PuffinDB 
Serverless HTAP 云数据平台,由 Arrow × DuckDB × Iceberg 提供支持
通过运行在您自己 VPC 中的 10,000 个 AWS Lambda functions 加速 DuckDB
注意:此仓库仅包含初步设计文档(参见 Roadmap)
启动会议:Rovinj, Croatia, March 29-31, 2023
简介
如果您在客户端使用 DuckDB 搭配任何客户端应用程序,添加 PuffinDB 扩展 将允许您:
- 将查询分发到数千个无服务器函数和一个 Monostore
- 使用任何 Airbyte 连接器 从数百个应用程序读取和写入
- 与其他用户协作处理相同的 Iceberg 表
- 以 ACID 事务完整性写回 Iceberg 表
- 执行 跨数据库连接 (Cf. 边缘驱动数据集成)
- 在 19 种 SQL 方言 之间进行转换
- 调用 远程查询生成器
- 调用 curl 命令
- 执行增量且可观察的 数据管道
- 将 DuckDB 转变为下一代 向量数据库
- 支持 Lance 文件格式,实现 100 倍更快的随机访问
- 加速和/或安排将大型表下载到您的客户端
- 缓存表并在边缘运行计算(Amazon CloudFront × Lambda@Edge)
- 记录您数据湖上的查询
PuffinDB 是 STOIC 的一项倡议,而非 DuckDB Labs 或 DuckDB 基金会。
DuckDB 和 DuckDB 标志是 DuckDB 基金会的商标。
PuffinDB 和 PuffinDB 标志是 STOIC (Sutoiku, Inc.) 的商标。
STOIC 是 DuckDB 基金会的成员。
信念
- 没有什么能胜过 SQL,因为没有什么能胜过 数学
- 公有云 是唯一真正弹性的平台
- Arrow × DuckDB × Iceberg 是颠覆性变革
- 边缘驱动数据集成 是前进的方向
- 无客户端 + 无服务器 = 美好
理由
如今有许多优秀的分布式 SQL 引擎可用。我们为什么还需要另一个?
- 真正的无服务器架构
- 面向未来的架构
- 专为虚拟私有云部署设计
- 专为小到大数据集设计
- 专为实时分析设计
- 专为交互式分析设计
- 专为转换和分析设计
- 专为分析和事务设计
- 专为下一代查询引擎设计
- 专为下一代文件格式设计
- 专为湖仓一体设计
- 专为数据网格集成设计
- 专为所有用户设计
- 专为可扩展性设计
- 专为可嵌入性设计
- 专为机器生成的查询优化
- 可跨大规模用户群扩展
大纲
- 真正的 serverless architecture(在 10,000 个 Lambda functions 上运行 DuckDB)
- 同时支持读和写查询(HTAP)
- 使用 Python、Rust 和 TypeScript 实现(使用 Bun)
- 由 Arrow × DuckDB × Iceberg 提供支持
- 由 Redis 提供支持(使用 Amazon ElastiCache for Redis)用于状态管理
- 通过 NAT hole punching 加速,实现超快的数据洗牌
- 与 Apache Iceberg、Apache Hudi 和 Delta Lake 集成
- 首先部署在 AWS 上,然后是 Microsoft Azure 和 Google Cloud
- 部署为两个 AWS Lambda functions 和一个 Amazon EC2 实例
- 与 Amazon Athena 集成(用于湖仓表的写查询)
- 打包为 AWS CloudFormation 模板(使用 Terraform)
- 作为免费的 AWS Marketplace 产品发布
- 运行在你的 Amazon VPC 中
- 采用 MIT License 许可
功能
-
由 DuckDB 驱动的分布式 SQL 查询规划器](docs/Query%20Planner.md)
-
由 DuckDB 驱动的分布式 SQL 查询引擎](docs/Query%20Engine.md)
-
由 Redis 协调的分布式 SQL 查询执行(使用 Amazon ElastiCache for Redis)
-
通过 NAT 打洞 实现 Lambda 到 Lambda 的直接通信,从而启用分布式数据洗牌
-
由 DuckDB 执行的读取查询(运行在 AWS Lambda 上)
-
由 DuckDB 执行的针对对象存储对象的写入查询
-
由 Amazon Athena 执行的针对湖仓表的写入查询
-
内置 Malloy 到 SQL 的转换器
-
内置 PRQL 到 SQL 的转换器
-
内置 SQL 方言转换器
-
运行在独立函数上的亚 500ms 表扫描 API(从过滤谓词中获取表分区)
-
由无服务器 Metastore 管理的高级表元数据
-
并发支持多种表格式(Apache Iceberg、Apache Hudi 和 Delta Lake)
-
并发支持多个湖仓实例
-
原生支持所有湖仓目录(AWS Glue Data Catalog、Amazon DynamoDB 和 Amazon RDS)
-
支持身份验证和授权
-
支持同步和异步调用
-
支持使用
SELECT THROUGH语法的级联远程调用 -
使用不同表格式跨异构表进行连接
-
跨由不同湖仓实例管理的表进行连接
-
小型过滤分区 缓存 在 AWS Lambda 函数上
-
查询结果以 HTTP 响应返回,序列化在对象存储上,或通过 Apache Arrow 流式传输
-
查询结果 缓存 在对象存储(Amazon S3)和 CDN(Amazon CloudFront)上
-
透明支持 DuckDB 和 Lakehouse 支持的所有文件格式
-
透明支持 Lakehouse 提供的所有表生命周期功能
-
计划支持部署在 AWS Fargate 上
部署
PuffinDB 将支持四种增量部署选项:
- 深度集成在您自己的工具或应用中的 Node.js 和 Python 模块
- 部署在您自己的云平台中的 AWS Lambda 函数
- 部署在您自己的 VPC 中的 AWS CloudFormation 模板
- 添加到您自己的云环境中的 AWS Marketplace 产品
理念
- 开发者优先 — 无废话,零摩擦
- 最低延迟 — 每一毫秒都至关重要
- 弹性设计 — 从千字节到拍字节
常见问题
请查阅我们的常见问题。
路线图
请查阅我们的路线图。
赞助方
本项目由 STOIC 发起并目前由其资助。
请查阅我们的赞助方页面以了解赞助机会。
致谢
本项目利用了由 DuckDB Labs 实现并由 STOIC 资助的若干 DuckDB 功能:
- 使用 Node.js 部署时对 Apache Arrow 流的支持(已发布)
- 使用 Node.js 部署时对用户定义函数的支持(已发布)
- 使用新的
COMBINE函数对具有二进制映射结果的 Map-Reduce 查询的支持(已发布) - 对 Hive 分区导入的支持(已发布)
- 使用
COPY ... TO ... PARTITION_BY对分区导出的支持(已发布) - 通过标准查询 API 对 SQL 查询解析 | 字符串化的支持(开发中)
- 对 Azure Blob Storage 的支持(即将开始开发)
我们也在考虑资助以下项目:
- 支持
SELECT * THROUGH 'https://myPuffinDB.com/' FROM remoteTable语法(参见 EDDI) - 支持
FIXED定长字符串(参见 #3) - 支持
C和Stpch-dbgen选项,用于tpch扩展
本项目最初受到这篇出色的 文章 的启发,来自 Alon Agmon。
讨论
目前关于本项目的讨论主要在 @ghalimi Twitter 账号上进行。
如需更低频率的替代方案,请遵循 @PuffinDB。
备注
PuffinDB 不应与 Puffin 文件格式 混淆。
保持坚忍,保持善良,保持冷静。像海鹦一样……