图引擎服务 GES
图引擎服务 GES
- 最新动态
- 产品介绍
- 计费说明
- 快速入门
-
用户指南
- 如何使用图引擎服务
- 准备工作
- 权限管理
- 元数据操作
- 创建图
- 管理图
- 数据迁移
- 访问图和分析图
- 查看图任务
- 配置图操作权限
- 运维监控
- 套餐包管理
-
算法参考
- 算法一览表
- PageRank算法
- PersonalRank算法
- k核算法(k-core)
- k跳算法(k-hop)
- 最短路径算法(Shortest Path)
- 全最短路算法(All Shortest Paths)
- 带一般过滤条件最短路径(Filtered Shortest Path)
- 单源最短路算法(SSSP)
- 点集最短路(Shortest Path of Vertex Sets)
- 关联路径算法(n-Paths)
- 紧密中心度算法(Closeness Centrality)
- 标签传播算法(Label Propagation)
- Louvain算法
- 关联预测算法(Link Prediction)
- Node2vec算法
- 实时推荐算法(Real-time Recommendation)
- 共同邻居算法(Common Neighbors)
- 连通分量算法(Connected Component)
- 度数关联度算法(Degree Correlation)
- 三角计数算法(Triangle Count)
- 聚类系数算法(Cluster Coefficient)
- 中介中心度算法(Betweenness Centrality)
- 边中介中心度(Edge-betweenness Centrality)
- OD中介中心度(OD-betweenness Centrality)
- 单点环路检测(Single Vertex Circles Detection)
- 点集共同邻居(Common Neighbors of Vertex Sets)
- 点集全最短路(All Shortest Paths of Vertex Sets)
- 带一般过滤条件环路检测(filtered circle detection)
- 子图匹配(Subgraph Matching)
- 带过滤全对最短路径(Filtered All Pairs Shortest Paths)
- 带过滤全最短路径(Filtered All Shortest Paths)
- TopicRank算法
- 带过滤的n_paths算法(filtered_n_paths)
- 时序路径分析(Temporal Paths)
- 开发指南
-
API参考
- 使用前必读
- API概览
- 如何调用API
- 管理面API(V2)
-
业务面API
-
内存版
- 点操作API
- 边操作API
- 元数据操作API
- 索引操作API
- Gremlin操作API
-
算法API
- 执行算法(1.0.0)
-
算法API参数参考
- 算法公共参数
- pagerank算法(1.0.0)
- personalrank算法(1.0.0)
- k核算法(kcore)(1.0.0)
- k跳算法(k_hop)(1.0.0)
- 共同邻居(common_neighbors)(1.0.0)
- 点集共同邻居(common_neighbors_of_vertex_sets)(2.2.13)
- 关联预测(link_prediction)(1.0.0)
- 最短路径(shortest_path)(2.1.5)
- 全最短路(all_shortest_paths)(1.0.12)
- 带一般过滤条件最短路径(filtered_shortest_path)(2.2.4)
- 单源最短路(sssp)(1.0.0)
- 点集最短路(shortest_path_of_vertex_sets)(2.1.5)
- 关联路径(n_paths)(1.1.2)
- 带过滤的n_paths算法(filtered_n_paths)(2.2.22)
- 带过滤全对最短路径(filtered_all_pairs_shortest_paths)(2.2.17)
- 点集全最短路(all_shortest_paths_of_vertex_sets)(2.2.15)
- 带过滤全最短路径(filtered_all_shortest_paths)(2.2.17)
- 连通分量(connected_component)(1.0.0)
- 标签传播(label_propagation)(2.1.8)
- louvain算法(louvain)(2.2.1)
- node2vec算法(node2vec)(1.0.5)
- 实时推荐(realtime_recommendation)(2.2.21)
- 度数关联度(degree_correlation)(1.0.0)
- 三角计数(triangle_count)(1.0.0)
- 聚类系数(cluster_coefficient)(1.0.0)
- 紧密中心度(closeness)(1.0.0)
- 中介中心度算法(betweenness)(2.2.4)
- 边中介中心度(edge_betweenness)(2.2.4)
- OD中介中心度(od_betweenness)(2.2.4)
- 单点环路检测(single_vertex_circles_detection)(2.2.4)
- 带一般过滤条件环路检测(filtered_circle_detection)(2.2.15)
- 子图匹配(subgraph_matching)(2.2.16)
- topicrank算法(topicrank)(2.2.20)
- 动态图分析API
- 路径API
- 图统计API
- 图操作API
- 子图操作API
- Job管理API
- 自定义操作API
- Cypher操作API(2.2.16)
- Filtered-query API(2.2.13)
- Filtered-query V2(2.3.6)
- DSL查询API(2.3.14)
- 通过导入文件更新点边的指定属性(2.2.13)
- 通过读取文件删除点边(2.2.15)
- 运维监控API
-
持久化版
- 持久化版规格说明
- 点操作API
- 边操作API
- 元数据操作API
- 索引操作API
- HyG图管理API
-
HyG算法API
- 执行算法
-
算法API参数参考
- 算法公共参数
- pagerank算法
- personalrank算法(personalrank)
- k核算法(kcore)
- k跳算法(k_hop)
- 点集共同邻居(common_neighbors_of_vertex_sets)
- 最短路径(shortest_path)
- 全最短路(all_shortest_paths)
- 全对最短路径(all_pairs_shortest_paths)
- 单源最短路算法(sssp)
- 点集最短路(shortest_path_of_vertex_sets)
- 点集全最短路(all_shortest_paths_of_vertex_sets)
- 连通分量(connected_component)
- 三角计数算法(triangle_count)
- 紧密中心度算法(closeness)
- 中介中心度算法(betweenness)
- 边中介中心度(edge_betweenness)
- OD中介中心度(od_betweenness)
- 单点环路检测(single_vertex_circles_detection)
- topicrank算法(topicrank)
- louvain算法(louvain)
- Bigclam算法(bigclam)
- Cesna算法(cesna)
- infomap算法(infomap)
- 标签传播算法(label_propagation)
- 子图匹配算法(subgraph matching)
- 关联预测算法(link_prediction)
- n_paths算法(n_paths)
- 聚类系数算法(cluster_coefficient)
- 算法结果TXT格式说明
- 执行DSL算法
- DSL语法说明
- HyG Job管理API
- 原生算法API
- 图统计API
- 图操作API
- Job管理API
- Cypher操作API
- 交互式事务API
- 运维监控API
-
内存版
- 应用示例
- 权限策略和授权项
- 云监控服务监控指标说明
- 历史API
- 附录
- 常见问题
- 视频帮助
- 文档下载
- 通用参考
链接复制成功!
使用Cypher JDBC Driver访问GES
功能介绍
GES Cypher JDBC Driver是专为GES编写的JDBC驱动,基于Neo4j JDBC Driver中的接口,提供了使用JDBC访问GES并进行cypher查询的一种方法。
尤其是当cypher请求返回数据量较大、并发数高、JVM缓存完整请求体有困难的场景下,该组件内置了一种可以流式解析响应body体的方法,与获得整个body体再解析相比,极大地降低了cpu和内存的占用。
依赖配置
- 下载相应的SDK和驱动,具体操作请参考连接管理章节。
- 若Maven源可用(有配置maven源,且maven源可以从开源仓库下载jar包),则解压huaweicloud-ges-sdk-java-xxx.zip,进入maven-install目录中,执行ges-sdk-java-maven-install.bat文件或ges-sdk-java-maven-install.sh文件,将graph-sdk-xxx.jar、cypher-jdbc-driver-xxx.jar安装到本地maven仓库,即可在maven工程中配置pom依赖以使用Cypher JDBC Driver。
<dependency> <groupId>com.huawei.ges</groupId> <artifactId>cypher-jdbc-driver</artifactId> <version>xxx</version> //此处需要输入当前cypher jdbc驱动的版本号 </dependency> <dependency> <groupId>org.neo4j</groupId> <artifactId>neo4j-jdbc</artifactId> <version>xxx<version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>xxx</version> </dependency>
- 若Maven源不可用(没有配置maven源或者maven源不能从开源仓库下载jar包),则解压huaweicloud-ges-sdk-java-xxx.zip,将jars目录下的cypher-jdbc-driver-xxx-with-dependencies.jar导入工程或者将cypher-jdbc-driver-xxx.jar以及cypher-jdbc-lib目录下所有包导入工程皆可。
参数说明
参数 |
参数说明 |
url |
“jdbc:ges:”前缀拼接GES Cypher API的URL。 在GES控制台的“连接管理”页面,“可用图实例名称”下拉选择待访问的图名称,“JDBC连接字符串”即为Cypher API的URL。 |
prop |
Properties对象,包含连接GES API所需的各项配置,详见表2。 |
参数 |
参数说明 |
X-Auth-Token |
通过IAM鉴权接口获取到的token。 |
parse-json |
是否转换点边对象,默认值为"false"。
|
deserializer-type |
解析cypher响应的策略,可选项为lazy和eager,默认为lazy。
|
limit |
流速控制,默认值100000,内核以批的形式返回给server侧的webapp,由webapp整理成流返回给前端。limit的含义为内核返回给webapp时的批的大小。对同一条查询,limit越小时,GES内核侧交互次数增多,jdbc client拿到第一条记录的时间越快,整体查询时间变长。 |
鉴权方法
GES Cypher JDBC Driver支持Token和AK/SK两种鉴权。
- Token鉴权代码示例:
import com.huawei.ges.jdbc.io.model.GesElement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Properties; public class CypherJDBCClient { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException { String token = ""; // 调用IAM服务API获取 String url = ""; // 值为“jdbc:ges:JDBC连接字符串”,其中“JDBC连接字符串”从GES控制台“连接管理”界面获取 Class.forName("com.huawei.ges.jdbc.Driver").newInstance(); Properties prop = new Properties(); prop.setProperty("X-Auth-Token", token); prop.setProperty("deserializer-type", "lazy"); prop.setProperty("parse-json", "true"); prop.setProperty("limit", "10000"); try (Connection conn = DriverManager.getConnection(url, prop)) { String query = "match (m) return m limit 1"; try (PreparedStatement stmt = conn.prepareStatement(query)) { try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { GesElement.GesVertex vertex = (GesElement.GesVertex) rs.getObject("m"); System.out.println(vertex.getId()); System.out.println(vertex.getLabels()); System.out.println(vertex.getProperties()); } } } } catch (SQLException e) { System.out.println("Execute SQL query error."); } } }
- AK/SK鉴权可以使用GES业务面SDK提供的方法生成签名,导入业务面SDK依赖详见下载与安装。
AK/SK鉴权代码示例如下,ak,sk和regionCode参数获取请参考初始化参数获取章节。
import com.huawei.ges.graph.v1.auth.aksk.HttpRestClient; import com.huawei.ges.jdbc.io.model.GesElement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Map; import java.util.Properties; public class CypherJDBCClientByAKSK { public static void main(String[] args) throws ClassNotFoundException, IllegalAccessException, InstantiationException { // 认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全 // 本示例以ak和sk保存在环境变量中来实现身份验证为例,运行本示例前请先在本地环境中设置环境变量HUAWEICLOUD_SDK_AK和HUAWEICLOUD_SDK_SK String ak = System.getenv("HUAWEICLOUD_SDK_AK"); String sk = System.getenv("HUAWEICLOUD_SDK_SK"); String regionCode = ""; String url = ""; // 值为“jdbc:ges:JDBC连接字符串”,其中“JDBC连接字符串”从GES控制台“连接管理”界面获取 Map<String, String> iamHeader = HttpRestClient.getIamSignHeaders(ak, sk, regionCode); // 业务面SDK的方法,生成签名 Class.forName("com.huawei.ges.jdbc.Driver").newInstance(); doCypherQuery(url, iamHeader); } public static void doCypherQuery(String url, Map<String, String> iamHeaders) { Properties prop = new Properties(); for (Map.Entry<String, String> pair : iamHeaders.entrySet()) { prop.setProperty(pair.getKey(), pair.getValue()); } prop.setProperty("deserializer-type", "lazy"); prop.setProperty("parse-json", "true"); prop.setProperty("limit", "10000"); try (Connection conn = DriverManager.getConnection(url, prop)) { String query = "match (m) return m limit 1"; try (PreparedStatement stmt = conn.prepareStatement(query)) { try (ResultSet rs = stmt.executeQuery()) { while (rs.next()) { GesElement.GesVertex vertex = (GesElement.GesVertex) rs.getObject("m"); System.out.println(vertex.getId()); System.out.println(vertex.getLabels()); System.out.println(vertex.getProperties()); } } } } catch (SQLException e) { System.out.println("Execute SQL query error."); } } }