


Avatica 是一个用于构建数据库 JDBC 和 ODBC 驱动程序,以及 RPC 有线协议的框架。

Avatica 的 Java 绑定依赖性非常小。尽管它是 Apache Calcite 的一部分,但它并不依赖于 Calcite 的其他部分。它仅依赖于 JDK 8+ 和 Jackson。
Avatica 的有线协议是 JSON 或 HTTP 上的协议缓冲区。JSON 协议的 Java 实现使用 Jackson,将请求命令对象转换为 JSON,或从 JSON 转换为响应命令对象。
Avatica-Server 是 Avatica RPC 的 Java 实现。
核心概念:
Avatica provider 提供程序;Meta 之上创建 JDBC 类的实现;Meta 在请求和响应命令对象方面的功能。Avatica 通过 AvaticaFactory 实现 JDBC。AvaticaFactory 的实现在 Meta 之上创建 JDBC 类 (Driver、Connection、Statement、ResultSet) 的实现。
Avatica ODBC 的工作尚未开始。
Avatica ODBC 将使用相同的有线协议,并可以使用 Java 中的相同服务器实现。ODBC 客户端将用 C 或 C++ 编写。
由于 Avatica 协议抽象了 provider 提供程序之间的许多差异,因此相同的 ODBC 客户端可用于不同的数据库。
虽然 Avatica 项目不包含 ODBC 驱动程序,但是有基于 Avatica 协议编写的 ODBC 驱动程序,例如 Apache Phoenix 的 ODBC 驱动程序。
Avatica 服务端嵌入了 Jetty HTTP 服务器,提供了一个实现 Avatica RPC 协议的 HttpServer 类,可以作为独立的 Java 应用程序运行。
如果需要,可以通过扩展 HttpServer 类,并重写其 configureConnector() 方法,来配置 HTTP 服务器中的连接器。例如,用户可以将 requestHeaderSize 设置为 64K 字节,如下所示:
1 | HttpServer server = new HttpServer(handler) { |
我们知道客户端库具有最小的依赖性非常重要。
Avatica 是 Apache Calcite 的一个子项目,在一个单独的存储库中维护。它不依赖于 Calcite 的任何其他部分。
软件包:
create connection、创建语句 create statement、元数据 metadata、准备 prepare、绑定 bind、执行 execute、获取 fetch;getTables 返回所有行)。Statement.executeQuery 应该获取前 N 行)。Statement.execute 应用于 SELECT 语句。以下是可用的 Avatica 客户端列表,其中一些客户端是 Apache Phoenix 的适配器,但也与其他 Avatica 后端兼容。非常欢迎为其他语言的客户端做出贡献!
写在最后
笔者因为工作原因接触到 Calcite,前期学习过程中,深感 Calcite 学习资料之匮乏,因此创建了 Calcite 从入门到精通知识星球,希望能够将学习过程中的资料和经验沉淀下来,为更多想要学习 Calcite 的朋友提供一些帮助。
