Expand description
This create provides an indexed, queryable column-based storage system.
The storage system is, fundamentally, row-based storage, where all rows have the same number of
columns. All columns are the same “type”, but given that they can be enum types, you can
effectively use differently typed values. Data is stored in a BTreeMap<usize, Vec<T>>
,
where the outermost BTreeMap
is dynamically sized (and may be re-allocated as more rows come
in), whereas the innermost Vec
is expected to never change. The map index is an
autoincremented row identifier similar to the one used by SQLite:
https://www.sqlite.org/lang_createtable.html#rowid.
What makes this crate interesting is that it also allows you to place indices on columns for
fast lookups. These indices are automatically updates whenever the dataset changes, so that
queries continue to return correct results. Indices should conform to either the
EqualityIndex
trait or the RangeIndex
trait. As you would expect, the former allows
speeding up exact lookups, whereas the latter can also perform efficient range queries.
Queries are performed over the dataset by calling find
with a set of Condition
s that will
be AND
ed together. OR
is currently not supported — issue multiple quieries instead. Each
Condition
represents a value comparison against the value in a single column. The system
automatically picks what index to use to satisfy the query, using a heuristic based on the
expected number of rows returned for that column for each index.
Known limitations
- The set of match operations is currently fairly limited.
- The system currently provides an add/remove-only abstraction (i.e., no edit).
Re-exports
pub use cmp::Comparison;
pub use cmp::Condition;
pub use cmp::Value;
pub use idx::EqualityIndex;
pub use idx::RangeIndex;
pub use idx::Index;
Modules
cmp
module holds the mechanisms needed to compare values and express conditionals.idx
module described the traits indexers must adhere to, and implements sensible default
indexers.Structs
Store
is the main storage unit in shortcut. It keeps track of all the rows of data, as well
as what indices are available. You will generally be accessing the Store
either through the
find
method (which lets you find rows that match a certain condition), or through the
insert
method, which lets you add another row.Traits
Row
can be used to store the individual rows of a Store
.