keyspace
Get keys and values based on a probability distribution and seed.
For deterministic input to benchmarks.
Usage
const keyspace = const db = // To prepare the database, we'll write 1M sequential// keys, with random values of 100 bytesconst writer = for let i = 0; i < 1e6; i++ db // Get a random key based on a Zipfian distributionconst reader = dbdb
Visual Example
API
Stability: experimental. API may change or split up.
generator = keyspace(n, [options])
Create a key and value generator for a keyspace of size N (aka cardinality). Uses xorshift128+ internally to be fast and random enough. Keys are encoded with lexicographic-integer
to preserve order.
Options:
keys
(string): one of:random
(default): generate pseudo-random numeric keys with a certain probabilitydistribution
seq
: non-random, sequential numeric keys (0-N)seqReverse
: same keys but in reverse (N-0)
values
(string): one of:random
(default): generate pseudo-random valuesempty
: zero-length values or zero-filled ifvalueSize
is set
seed
(string or Buffer): if not provided one will be generated.distribution
(string): one ofzipfian
,uniform
(default)skew
(floating-point number): Zipfian skew (default 0)offset
(number): offset keys (for example to simulate timestamps)valueSize
(number): size of values in byteskeyAsBuffer
,valueAsBuffer
,keyAsNumber
(boolean): if not set, keys and values are returned as strings (hex encoded).
key = generator.key([index])
Get a key. The index
argument is required for seq
and seqReverse
.
value = generator.value()
Get a value.
Install
With npm do:
npm install keyspace
License
MIT © 2019-present Vincent Weevers