HugeGraph是一个Java语言实现的开源图数据库,内置支持多种后端存储(Cassandra、RocksDB等),此外还支持通过插件的方式扩展存储后端。插件实现者无需更改HugeGraph本身源代码,插件使用者无需关注代码细节,就能轻松增加插件扩展功能。这篇文章主要讲述了HugeGraph扩展自定义插件的流程。
可扩展维度
目前插件方式提供如下几个维度的扩展项:
- 后端存储:HugeGraph支持多种内置存储后端,也允许用户无需更改现有源码的情况下扩展自定义后端。
- 系列化器:配合自定义后端实现系列化器,或者扩展内置后端的系列化器。
- 自定义配置项:配合自定义插件扩展配置项。
- 分词器:HugeGraph支持全文检索,全文检索功能涉及到各语言分词,目前已内置8种中文分词器,也允许用户无需更改现有源码的情况下扩展自定义分词器。
插件实现机制
- HugeGraph提供插件接口HugeGraphPlugin,通过Java SPI机制支持插件化
- HugeGraph提供了4个扩展项注册函数:
registerOptions()
、registerBackend()
、registerSerializer()
、registerAnalyzer()
- 插件实现者实现相应的Options、Backend、Serializer或Analyzer的接口
- 插件实现者实现HugeGraphPlugin接口的
register()
方法,在register()
中调用上述第2步中的函数,来注册第3步列出的具体实现类,并打成jar包 - 插件使用者将jar包放在HugeGraph-Server安装目录的
plugins
目录下,修改相关配置项为插件自定义值,重启即可生效
插件实现流程实例
1 新建一个maven项目
1.1 项目名称取名:hugegraph-plugin-demo
1.2 添加hugegraph-core
Jar包依赖
maven pom.xml详细内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.baidu.hugegraph</groupId>
<artifactId>hugegraph-plugin-demo</artifactId>
<version>1.0.0</version>
<packaging>jar</packaging>
<name>hugegraph-plugin-demo</name>
<dependencies>
<dependency>
<groupId>com.baidu.hugegraph</groupId>
<artifactId>hugegraph-core</artifactId>
<version>${project.version}</version>
</dependency>
</dependencies>
</project>
2 实现扩展功能
扩展功能一般包括:扩展自定义后端存储(下文2.1讲述)和扩展自定义分词器(下文2.2讲述)。插件实现者关注其中之一即可,若有需要当然也可两者同时进行扩展,或者只扩展下文2.1.3所述系列化器等。
2.1 扩展自定义后端
2.1.1 实现接口BackendStoreProvider
- 可实现接口:
com.baidu.hugegraph.backend.store.BackendStoreProvider
- 或者继承抽象类:
com.baidu.hugegraph.backend.store.AbstractBackendStoreProvider
以RocksDB后端RocksDBStoreProvider为例:
public class RocksDBStoreProvider extends AbstractBackendStoreProvider {
protected String