相关工作¶
最初的提案中包含了一项现有解决方案和系统的调查,为了上下文连贯,下文部分保留了该内容,但请注意,这些描述仅在尽力而为的基础上保持最新。
既有的数据库客户端 API¶
- Arrow Flight SQL
建立在 Arrow Flight 之上的标准,定义了如何使用 Flight 与数据库通信、检索元数据、执行查询等。提供了一个 C++ 和 Java 语言的单一客户端,用于与任何实现该协议的数据库服务器通信。其 API 表面(尽管不是 API 设计)仿照了 JDBC 和 ODBC。
- R 语言的 DBI
用于数据库访问的 R 语言包/生态系统。提供了一个具有特定数据库“后端”的单一接口。虽然是面向行的,但与 Arrow 的集成正在考虑中,其中包括一个与 ADBC 本质上相同构思的草案。
- JDBC
一个用于数据库访问的 Java 库,提供基于行的 API。提供了一个具有特定数据库驱动程序的单一接口。
- ODBC
由 ISO/IEC 制定的、与微软相关的语言无关的数据库访问标准。在功能上,它与 JDBC 类似(事实上 JDBC 可以封装 ODBC 驱动程序),但它通过获取列值缓冲区来提供列式数据支持(存在一些局限性)。提供了一个具有特定数据库驱动程序的单一 C 接口。
- PEP 249 (DBAPI 2.0)
一种用于数据库访问的 Python 标准,提供基于行的 API。它不是单一的包,而是一组由各个包实现的接口。
既有的库¶
这些库要么:1) 为特定系统实现列式数据访问;或者 2) 可用于实现此类访问。
- Arrow Flight
一个针对传输 Arrow 记录批次优化的 RPC 框架,具有特定于应用程序的扩展点,但不具备任何更高级别的语义。
- Arrow JDBC
Arrow/Java 的一个 Java 子模块,它使用 JDBC API 来生成 Arrow 数据。在内部,它只能逐行读取数据。
- arrow-odbc
一个 Rust 社区项目,它使用 ODBC API 来生成 Arrow 数据,利用 ODBC 的缓冲区 API 来执行批量拷贝。(另请参阅:Turbodbc。)
- Arrowdantic
用于 Rust 中 ODBC<>Arrow 实现的 Python 绑定。
- pgeon
一个手动解析 Postgres 有线格式并生成 Arrow 数据的客户端,绕过了 JDBC/ODBC。虽然它试图优化这种情况,但 Postgres 有线协议仍然是面向行的。
- Turbodbc
一组实现 PEP 249 的 Python ODBC 绑定,同时也提供将数据作为 Arrow 批次获取的 API,并在内部优化了转换过程。
论文¶
Raasveldt, Mark, 和 Hannes Mühleisen. “不要将我的数据扣为人质——客户端协议重新设计的理由”. 刊载于 Proceedings of the VLDB Endowment, 1022–1033, 2017.