[
https://issues.apache.org/jira/browse/IGNITE-16611?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Sergey Chugunov updated IGNITE-16611:
-------------------------------------
Description:
To support Concurrency Control and implement effective transactions capability
to store multiple values of the same key is needed in existing storage.
h3. Version chain
Key component here is a special data structure called version chain: it is a
list of all versions of a particular key, with the most recent version at the
beginning (HEAD).
Each entry in the chain contains value, reference to the next entry in the
list, begin and end timestamps and id of active transaction that created this
version.
There are at least two approaches to implement this structure on top of RocksDB:
* Combine original key and version into a new key which is put into a RocksDB
tree. In that case to restore version chain we need to iterate over the tree
using original key as a prefix.
* Use original key as-is but make it pointing not to the value directly but to
an array containing version and other metainformation (ts, id etc) and keys in
some secondary tree.
h3. New API to manage versions
The following new API should be implemented to provide access to version chain:
* Methods to manipulate versions: add new version to the chain, commit
uncommited version, abort uncommited version.
* Method to cleanup old versions from the chain.
* Method to scan over keys up to provided timestamp.
was:
To support Concurrency Control and implement effective transactions new storage
capable of storing multiple versions of the same key is needed.
Key component of such storage is a special data structure called version chain:
it is a list of all versions of a particular key, with the most recent version
at the beginning (HEAD).
Each entry in the chain contains value, reference to the next entry in the
list, begin and end timestamps and id of active transaction that created this
version.
We need to implement this structure on top of bare RocksDB instance.
We also need to implement Primary index with the following requirements and API:
* PK always points to the HEAD of version chain.
* Methods to manipulate versions: add new version to the chain, commit
uncommited version, abort uncommited version.
* Method to cleanup old versions from the chain.
* Method to scan over keys up to provided timestamp.
> [Versioned Storage] POC - Version chain data structure for RocksDB-based
> storage
> ---------------------------------------------------------------------------------
>
> Key: IGNITE-16611
> URL: https://issues.apache.org/jira/browse/IGNITE-16611
> Project: Ignite
> Issue Type: Task
> Components: persistence
> Reporter: Sergey Chugunov
> Priority: Major
> Labels: ignite-3
>
> To support Concurrency Control and implement effective transactions
> capability to store multiple values of the same key is needed in existing
> storage.
> h3. Version chain
> Key component here is a special data structure called version chain: it is a
> list of all versions of a particular key, with the most recent version at the
> beginning (HEAD).
> Each entry in the chain contains value, reference to the next entry in the
> list, begin and end timestamps and id of active transaction that created this
> version.
> There are at least two approaches to implement this structure on top of
> RocksDB:
> * Combine original key and version into a new key which is put into a RocksDB
> tree. In that case to restore version chain we need to iterate over the tree
> using original key as a prefix.
> * Use original key as-is but make it pointing not to the value directly but
> to an array containing version and other metainformation (ts, id etc) and
> keys in some secondary tree.
> h3. New API to manage versions
> The following new API should be implemented to provide access to version
> chain:
> * Methods to manipulate versions: add new version to the chain, commit
> uncommited version, abort uncommited version.
> * Method to cleanup old versions from the chain.
> * Method to scan over keys up to provided timestamp.
--
This message was sent by Atlassian Jira
(v8.20.1#820001)