Version 1.7 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.
↑↓ Navigate↵ Openesc Close
Ask AI
Agree to send your questions to the third-party Kapa service for AI answers based on the documentation.