blob: 1e70a490eef7e6d8d8caea721bf9e310126dd06a [file] [log] [blame] [view]
# Storage API
This module contains the API for working with data storages.
## Adding a new data store
To add a new data storage you need:
* Add a new module;
* Implement interfaces:
* `org.apache.ignite.internal.storage.DataStorageModule`;
* `org.apache.ignite.internal.storage.engine.StorageEngine`;
* `org.apache.ignite.internal.storage.engine.MvTableStorage`;
* `org.apache.ignite.internal.storage.MvPartitionStorage`;
* `org.apache.ignite.internal.storage.index.SortedIndexStorage`;
* Add configuration:
* Add an inheritor of `org.apache.ignite.internal.storage.configurations.StorageProfileConfigurationSchema`,
with `@PolymorphicConfigInstance` value equal to `org.apache.ignite.internal.storage.engine.StorageEngine.name`;
* If necessary, add a specific configuration of the data storage engine:
* Implement `org.apache.ignite.internal.storage.configurations.StorageEngineConfigurationSchema` with the `@ConfigurationExtension`
annotation and the `@ConfigValue` field with the name equal to `org.apache.ignite.internal.storage.engine.StorageEngine.name`;
* Implement `org.apache.ignite.configuration.ConfigurationModule`;
* Add services (which are loaded via `java.util.ServiceLoader.load(java.lang.Class<S>)`):
* Implementation of `org.apache.ignite.internal.storage.DataStorageModule`;
* Implementation of `org.apache.ignite.configuration.ConfigurationModule`.
Take `org.apache.ignite.internal.storage.impl.TestStorageEngine` as an example.
## Usage
Storage configuration in HOCON:
```
ignite:
storage.profiles:
test_profile1
engine: test
test_profile2
engine: test
```
For each table, you may to specify the storage profile.
Table creation example in DDL:
```
create zone z1 with storage_profiles='test_profile1,test_profile2';
create table t1 with storage_profile='test_profile2' using zone='z1';
create table t2 using zone='z1'; // first storage profile from the zone z1 will be used here: 'test_profile1'.
```