[ https://issues.apache.org/jira/browse/IGNITE-15885?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Aleksandr Polovtcev updated IGNITE-15885: ----------------------------------------- Description: h1. API * Add {{SortedIndexStorage}} interface: {code:java} public interface SortedIndexStorage { /** Index ID. */ IgniteUuid id(); /** Index configuration. */ TableIndexView configuration(); /** Schema of the index keys. */ SchemaDescriptor schema(); /** Retrieves the key of a partition storage for the given index key. */ SearchRow get(IndexKey row); /** Adds the given row to the index */ void put(IndexKey row); /** Removes the given row from the index. */ void remove(IndexKey row); /** Replaces the {@code oldRow} with the {@code newRow}. */ void replace(IndexKey oldRow, IndexKey newRow); /** Returns a range of index rows as specified in IEP-74. */ Cursor<SearchRow> range(SearchKey lowerBound, SearchKey upperBound, byte options); } {code} * {{SearchKey}} can contain a smaller number of columns, than the {{IndexKey}}, needed for the prefix search. {code:java} public interface IndexKey { byte[] asBytes(); } public interface SearchKey { byte[] asBytes(); } {code} * {{SearchRow}} is a class from the {{storage-api}} that represents a key from the partition storage. h1. Implementation details For the initial implementation it is suggested to use {{BinaryRow}} serialization mechanism (it is proposed to implement the {{IndexKey}} on top of it, simply ignoring the value bytes) to store it in RocksDB. First implementation will also use a naive comparator, that will convert each {{BinaryRow}} into a {{Row}} and compare individual deserialized columns. was: # Add {{SortedIndexStorage}} interface: {code:java} public interface SortedIndexStorage { /** Index ID. */ IgniteUuid id(); /** Index configuration. */ TableIndexView configuration(); /** Schema of the index keys. */ SchemaDescriptor schema(); /** Retrieves the key of a partition storage for the given index key. */ SearchRow get(IndexKey row); /** Adds the given row to the index */ void put(IndexKey row); /** Removes the given row from the index. */ void remove(IndexKey row); /** Replaces the {@code oldRow} with the {@code newRow}. */ void replace(IndexKey oldRow, IndexKey newRow); /** Returns a range of index rows as specified in IEP-74. */ Cursor<SearchRow> range(SearchKey lowerBound, SearchKey upperBound, byte options); } {code} > Create and implement SortedIndexStorage based on RocksDB > -------------------------------------------------------- > > Key: IGNITE-15885 > URL: https://issues.apache.org/jira/browse/IGNITE-15885 > Project: Ignite > Issue Type: Task > Reporter: Aleksandr Polovtcev > Assignee: Aleksandr Polovtcev > Priority: Major > Labels: ignite-3 > > h1. API > * Add {{SortedIndexStorage}} interface: > {code:java} > public interface SortedIndexStorage { > /** Index ID. */ > IgniteUuid id(); > > /** Index configuration. */ > TableIndexView configuration(); > > /** Schema of the index keys. */ > SchemaDescriptor schema(); > > /** Retrieves the key of a partition storage for the given index key. */ > SearchRow get(IndexKey row); > > /** Adds the given row to the index */ > void put(IndexKey row); > > /** Removes the given row from the index. */ > void remove(IndexKey row); > > /** Replaces the {@code oldRow} with the {@code newRow}. */ > void replace(IndexKey oldRow, IndexKey newRow); > > /** Returns a range of index rows as specified in IEP-74. */ > Cursor<SearchRow> range(SearchKey lowerBound, SearchKey upperBound, byte > options); > } > {code} > * {{SearchKey}} can contain a smaller number of columns, than the > {{IndexKey}}, needed for the prefix search. > {code:java} > public interface IndexKey { > byte[] asBytes(); > } > public interface SearchKey { > byte[] asBytes(); > } > {code} > * {{SearchRow}} is a class from the {{storage-api}} that represents a key > from the partition storage. > h1. Implementation details > For the initial implementation it is suggested to use {{BinaryRow}} > serialization mechanism (it is proposed to implement the {{IndexKey}} on top > of it, simply ignoring the value bytes) to store it in RocksDB. First > implementation will also use a naive comparator, that will convert each > {{BinaryRow}} into a {{Row}} and compare individual deserialized columns. -- This message was sent by Atlassian Jira (v8.20.1#820001)