Awesome
keyspace
Get keys and values based on a probability distribution and seed.
For deterministic input to benchmarks.
Usage
const keyspace = require('keyspace')
const db = mydb()
// To prepare the database, we'll write 1M sequential
// keys, with random values of 100 bytes
const writer = keyspace(1e6, {
keys: 'seq',
values: 'random',
valueSize: 100,
// Always generate the same keys and values
seed: 'a seed'
})
for (let i = 0; i < 1e6; i++) {
db.put(writer.key(i), writer.value())
}
// Get a random key based on a Zipfian distribution
const reader = keyspace(1e6, {
keys: 'random',
distribution: 'zipfian',
seed: 'a seed',
// Favor latest keys
skew: -1
})
db.get(reader.key())
db.get(reader.key())
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