相关工作¶
最初的提案中包含一份对现有解决方案和系统的调查,下文部分重现了该调查以供参考,但请注意,描述仅尽力保持最新。
现有的数据库客户端 API¶
- Arrow Flight SQL
一个基于 Arrow Flight 构建的标准,定义了如何使用 Flight 与数据库通信、检索元数据、执行查询等。它提供了 C++ 和 Java 语言的单一客户端,可与任何实现该协议的数据库服务器通信。它的 API 表面(而非 API 设计)以 JDBC 和 ODBC 为蓝本。
- R 的 DBI
一个用于数据库访问的 R 包/生态系统。它为特定数据库提供了一个带有“后端”的单一接口。虽然是面向行的,但与 Arrow 的集成正在考虑中,包括与 ADBC 几乎相同的想法的草图。
- JDBC
一个用于数据库访问的 Java 库,提供基于行的 API。它为特定数据库提供了一个带有驱动程序的单一接口。
- ODBC
ISO/IEC 发布的一个与语言无关的数据库访问标准,与 Microsoft 相关。在功能上,它与 JDBC 相似(实际上 JDBC 可以包装 ODBC 驱动程序),但它通过获取列值缓冲区(有一些注意事项)提供列式数据支持。它为特定数据库提供了一个带有驱动程序的单一 C 接口。
- PEP 249 (DBAPI 2.0)
一个用于数据库访问的 Python 标准,提供基于行的 API。它不是一个单独的包,而是一组由包实现的接口。
现有库¶
这些库要么 1) 为特定系统实现列式数据访问;要么 2) 可以用于实现此类访问。
- Arrow Flight
一个 RPC 框架,针对传输 Arrow 记录批次进行了优化,具有特定于应用程序的扩展点,但没有任何更高级别的语义。
- 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
一套 Python ODBC 绑定,实现 PEP 249,它还提供 API 以 Arrow 批次的形式获取数据,并在内部优化转换。
论文¶
Raasveldt, Mark 和 Hannes Mühleisen。“Don’t Hold My Data Hostage - A Case for Client Protocol Redesign”。收录于 Proceedings of the VLDB Endowment,第 1022–1033 页,2017 年。