Version 1.3 of the documentation is no longer actively maintained. The site that you are currently viewing is an archived snapshot.
For up-to-date documentation, see the latest version.
HugeGraph Plugin mechanism and plug-in extension process
Background
HugeGraph is not only open source and open, but also simple and easy to use. General users can easily add plug-in extension functions without changing the source code.
HugeGraph supports a variety of built-in storage backends, and also allows users to extend custom backends without changing the existing source code.
HugeGraph supports full-text search. The full-text search function involves word segmentation in various languages. Currently, there are 8 built-in Chinese word
breakers, and it also allows users to expand custom word breakers without changing the existing source code.
Scalable dimension
Currently, the plug-in method provides extensions in the following dimensions:
backend storage
serializer
Custom configuration items
tokenizer
Plug-in implementation mechanism
HugeGraph provides a plug-in interface HugeGraphPlugin, which supports plug-in through the Java SPI mechanism
HugeGraph provides four extension registration functions: registerOptions(), registerBackend(), registerSerializer(),registerAnalyzer()
The plug-in implementer implements the corresponding Options, Backend, Serializer or Analyzer interface
The plug-in implementer implements register()the method of the HugeGraphPlugin interface, registers the specific
implementation class listed in the above point 3 in this method, and packs it into a jar package
The plug-in user puts the jar package in the HugeGraph Server installation directory plugins, modifies the relevant
configuration items to the plug-in custom value, and restarts to take effect
1publicinterfaceBackendStore{ 2// Store name 3publicStringstore(); 4 5// Database name 6publicStringdatabase(); 7 8// Get the parent provider 9publicBackendStoreProviderprovider();1011// Open/close database12publicvoidopen(HugeConfigconfig);13publicvoidclose();1415// Initialize/clear database16publicvoidinit();17publicvoidclear();1819// Add/delete data20publicvoidmutate(BackendMutationmutation);2122// Query data23publicIterator<BackendEntry>query(Queryquery);2425// Transaction26publicvoidbeginTx();27publicvoidcommitTx();28publicvoidrollbackTx();2930// Get metadata by key31public<R>Rmetadata(HugeTypetype,Stringmeta,Object[]args);3233// Backend features34publicBackendFeaturesfeatures();3536// Generate an id for a specific type37publicIdnextId(HugeTypetype);38}
2.1.3 Extending custom serializers
The serializer must inherit the abstract class: org.apache.hugegraph.backend.serializer.AbstractSerializer
( implements GraphSerializer, SchemaSerializer) The main interface is defined as follows:
When adding a custom backend, it may be necessary to add new configuration items. The implementation process mainly includes:
Add a configuration item container class and implement the interface org.apache.hugegraph.config.OptionHolder
Provide a singleton method public static OptionHolder instance(), and call the method when the object is initialized OptionHolder.registerOptions()
Add configuration item declaration, single-value configuration item type is ConfigOption, multi-value configuration item type is ConfigListOption
Take the RocksDB configuration item definition as an example:
1publicclassRocksDBOptionsextendsOptionHolder{ 2 3privateRocksDBOptions(){ 4super(); 5} 6 7privatestaticvolatileRocksDBOptionsinstance; 8 9publicstaticsynchronizedRocksDBOptionsinstance(){10if(instance==null){11instance=newRocksDBOptions();12instance.registerOptions();13}14returninstance;15}1617publicstaticfinalConfigOption<String>DATA_PATH=18newConfigOption<>(19"rocksdb.data_path",20"The path for storing data of RocksDB.",21disallowEmpty(),22"rocksdb-data"23);2425publicstaticfinalConfigOption<String>WAL_PATH=26newConfigOption<>(27"rocksdb.wal_path",28"The path for storing WAL of RocksDB.",29disallowEmpty(),30"rocksdb-data"31);3233publicstaticfinalConfigListOption<String>DATA_DISKS=34newConfigListOption<>(35"rocksdb.data_disks",36false,37"The optimized disks for storing data of RocksDB. "+38"The format of each element: `STORE/TABLE: /path/to/disk`."+39"Allowed keys are [graph/vertex, graph/edge_out, graph/edge_in, "+40"graph/secondary_index, graph/range_index]",41null,42String.class,43ImmutableList.of()44);45}
2.2 Extend custom tokenizer
The tokenizer needs to implement the interface org.apache.hugegraph.analyzer.Analyzer, take implementing a SpaceAnalyzer space tokenizer as an example.
3. Implement the plug-in interface and register it
The plug-in registration entry is HugeGraphPlugin.register(), the custom plug-in must implement this interface method, and register the extension
items defined above inside it. The interface org.apache.hugegraph.plugin.HugeGraphPlugin is defined as follows:
Make sure the services directory exists: hugegraph-plugin-demo/resources/META-INF/services
Create a text file in the services directory: org.apache.hugegraph.plugin.HugeGraphPlugin
The content of the file is as follows: org.apache.hugegraph.plugin.DemoPlugin
5. Make Jar package
Through maven packaging, execute the command in the project directory mvn package, and a Jar package file will be generated in the
target directory. Copy the Jar package to the plugins directory when using it, and restart the service to take effect.
Search in
Ask AI
Agree to send your questions to the third-party Kapa service for AI answers based on the documentation.
Ask AI has no documentation index for 1.3 yet. Please use local search.