Home

Awesome

keyspace

Get keys and values based on a probability distribution and seed.
For deterministic input to benchmarks.

npm status node Travis build status JavaScript Style Guide

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

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:

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