Crates.io | linera-views |
lib.rs | linera-views |
version | 0.13.0 |
source | src |
created_at | 2023-02-06 08:00:38.18593 |
updated_at | 2024-11-01 15:10:57.830977 |
description | A library mapping complex data structures onto a key-value store, used by the Linera protocol |
homepage | https://linera.dev |
repository | https://github.com/linera-io/linera-protocol |
max_upload_size | |
id | 777778 |
size | 837,886 |
This module is used in the Linera protocol to map complex data structures onto a
key-value store. The central notion is a views::View
which can be loaded from storage, modified in memory, and then committed (i.e. the changes are atomically persisted in storage).
The package provides essentially two functionalities:
See DESIGN.md
for more details.
The databases supported are of the NoSQL variety and they are key-value stores.
We provide support for the following databases:
MemoryStore
is using the memoryRocksDbStore
is a disk-based key-value storeDynamoDbStore
is the AWS-based DynamoDB service.ScyllaDbStore
is a cloud-based Cassandra-compatible database.ServiceStoreClient
is a gRPC-based storage that uses either memory or RocksDB. It is available in linera-storage-service
.The corresponding trait in the code is the crate::store::KeyValueStore
.
The trait decomposes into a store::ReadableKeyValueStore
and a store::WritableKeyValueStore
.
In addition, there is a store::AdminKeyValueStore
which gives some functionalities for working with stores.
A context is the combination of a client and a base key (of type Vec<u8>
).
A view is a container whose data lies in one of the above-mentioned databases.
When the container is modified the modification lies first in the view before
being committed to the database. In technical terms, a view implements the trait View
.
The specific functionalities of the trait View
are the following:
context
for obtaining a reference to the storage context of the view.load
for loading the view from a specific context.rollback
for canceling all modifications that were not committed thus far.clear
for clearing the view, in other words for reverting it to its default state.flush
for persisting the changes to storage.The following views implement the View
trait:
RegisterView
implements the storing of a single data.LogView
implements a log, which is a list of entries that can be expanded.QueueView
implements a queue, which is a list of entries that can be expanded and reduced.MapView
implements a map with keys and values.SetView
implements a set with keys.CollectionView
implements a map whose values are views themselves.ReentrantCollectionView
implements a map for which different keys can be accessed independently.ViewContainer<C>
implements a KeyValueStore
and is used internally.The LogView
can be seen as an analog of VecDeque
while MapView
is an analog of BTreeMap
.
See the CONTRIBUTING file for how to help out.
This project is available under the terms of the Apache 2.0 license.