为可路由查询创建连接
JDBC 可路由查询 API 提供了 VerticaRoutableConnection 接口( JDBC 文档中提供了详细信息),此接口可用于连接到群集以及启用可路由查询。除了普通 VerticaConnection 所提供的功能之外,此接口还提供高级路由功能。VerticaRoutableConnection 提供对 VerticaRoutableExecutor 类和 VGet 类的访问。请分别参阅使用 VerticaRoutableExecutor 类为可路由查询定义查询和使用 VGet 类为可路由查询定义查询。
可以通过将 EnableRoutableQueries
JDBC 连接属性设置为 true 来启用对此类的访问。
VerticaRoutableConnection 维护内部连接池和表元数据缓存(由连接的 createRoutableExecutor()/prepareGet()
方法所生成的所有 VerticaRoutableExecutor/VGet 对象共享)。此接口还是一个完全开发的独立 JDBC 连接,并且支持 VerticaConnection 所支持的所有功能。当此连接关闭时,由此 VerticaRoutableConnection 管理的所有池连接和所有子对象也会关闭。连接池和元数据仅由子可路由查询操作使用。
例如:
您可以使用 JDBC 数据源创建连接:
com.vertica.jdbc.DataSource jdbcSettings = new com.vertica.jdbc.DataSource();
jdbcSettings.setDatabase("exampleDB");
jdbcSettings.setHost("v_vmart_node0001.example.com");
jdbcSettings.setUserID("dbadmin");
jdbcSettings.setPassword("password");
jdbcSettings.setEnableRoutableQueries(true);
jdbcSettings.setPort((short) 5433);
VerticaRoutableConnection conn;
conn = (VerticaRoutableConnection)jdbcSettings.getConnection();
您还可以使用连接字符串和 DriverManager.getConnection()
方法创建连接:
String connectionString = "jdbc:vertica://v_vmart_node0001.example.com:5433/exampleDB?user=dbadmin&password=&EnableRoutableQueries=true";
VerticaRoutableConnection conn = (VerticaRoutableConnection) DriverManager.getConnection(connectionString);
以上两种方法生成相同的 conn
连接对象。
注意
请避免打开许多VerticaRoutableConnection
连接,因为此连接维护自己的专用连接池(不与其他连接共享)。相反,应用程序应使用单个连接,并通过该连接发出多个查询。
除了由可路由查询 API 添加到 Vertica JDBC 连接类的 setEnableRoutableQueries
属性之外,该 API 还添加了其他属性。完整列表如下。
-
EnableRoutableQueries
:启用可路由查询查找功能。默认值为 false。 -
FailOnMultiNodePlans
:如果计划需要多个节点,并且 FailOnMultiNodePlans 设置为 true,查询将失败。如果此属性设置为 false,则会生成警告,并且查询会继续执行。但是,延迟会显著提高,因为可路由查询必须先确定数据是否位于多个节点上,然后使用传统执行(在所有节点上)来运行普通查询。默认值为 true。请注意,仅使用谓词和常量值的简单调用不会出现此失败。 -
MetadataCacheLifetime
:保留投影元数据的时间(以秒为单位)。API 缓存有关投影的元数据以用于查询(例如投影)。后续的查询使用该缓存来缩短响应时间。默认值为 300 秒。 -
MaxPooledConnections
:保留在 VerticaRoutableConnection 内部池中的最大连接数(群集范围)。默认值 20。 -
MaxPooledConnectionsPerNode
:保留在 VerticaRoutableConnection 内部池中的最大连接数(每节点)。默认值 5。