Skip to content
This repository has been archived by the owner on Mar 1, 2023. It is now read-only.

rtsisyk/mininb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Mini NoSQL Benchmark

mininb - is a simple and easy to use benchmark for embedded NoSQL database libraries.

Core Features

  • GET and PUT operations support
  • Using external source of random keys
  • Histogram output
  • Percentilies calculation

Supported databases

Plugin API is pretty simple and new engines can be added very quickly.

Installation

Prerequisites:

  • Linux host (OS X and FreeBSD is not tested but might work)
  • CMake 2.6+
  • GCC 4.7+ or clang 3.1+
roman@work:~$ git clone --recursive git://github.com/rtsisyk/mininb.git
roman@work:~$ cd mininb
roman@work:~/mininb$ cmake . -DCMAKE_BUILD_TYPE=Release .
roman@work:~/mininb$ make

Please use --recursive flag to clone if you want to retrive all bundled databases in third_party directory.

Usage

Generate a file with random keys using your most favorite random number generator:

roman@work:~/mininb$ dd if=/dev/urandom of=keys.bin bs=1M count=100
100+0 records in
100+0 records out
104857600 bytes (105 MB) copied, 8.48439 s, 12.4 MB/s

Create a temporary directory for database files:

roman@work:~/mininb$ mkdir nb

Save keys into database (PUT benchmark):

roman@work:~/mininb$ ./mininb --path ./nb --action=put --driver=leveldb -k 16 -v 100 -c 100000

Drop disk caches (Linux):

roman@work:/# sync
roman@work:/# echo 3 > /proc/sys/vm/drop_caches

Shuffle keys:

roman@work:~/mininb$ ./mininb --path ./nb --action=shuffle -k 16 -c 100000

Read keys from the database (GET benchmark)

roman@work:~/mininb$ ./mininb --path ./nb --action=get --driver=leveldb -k 16 -v 100 -c 100000

See extra/run.sh script for additional examples.

Output

mininb outputs histograms and percentiles.

Histogram is a representation of the distribution of data.

Action: get
Driver: leveldb
Key Len: 16
Val Len: 100
Count: 500000

Histogram:
[  t min,   t max)        ops count           %
--------------------------------------------------
[      1,       2)             2554        0.51 
[      2,       3)           151209       30.24 
[      3,       4)            59414       11.88 
[      4,       5)           153407       30.68 
[      5,       6)            60251       12.05 
[      6,       7)             9442        1.89 
[      7,       8)            15489        3.10 
[      8,       9)            23270        4.65 
[      9,      10)            11691        2.34 
[     10,      12)             7566        1.51 
[     12,      14)             2538        0.51 
[     14,      16)             1592        0.32 
[     16,      18)              363        0.07 
[     18,      20)              348        0.07 
[     20,      25)              253        0.05 
[     25,      30)              112        0.02 
[     30,      35)               48        0.01 
[     35,      40)               38        0.01 
[     40,      45)               21        0.00 
[     45,      50)               14        0.00 
[     50,      60)               25        0.01 
[     60,      70)               17        0.00 
[     70,      80)               13        0.00 
[     80,      90)               22        0.00 
[     90,     100)               12        0.00 
[    100,     120)                8        0.00 
[    120,     140)                2        0.00 
[    140,     160)                4        0.00 
[    160,     180)                9        0.00 
[    180,     200)                1        0.00 

[    200,     250)               33        0.01
# 33 request from 500000 take 200-250 usec to execute 

[    300,     350)                1        0.00 
[    450,     500)                1        0.00 
[    500,     600)                2        0.00 
[    600,     700)                1        0.00 
[    700,     800)                1        0.00 
[    800,     900)                2        0.00 
[   1000,    1200)                2        0.00 
[   1200,    1400)                1        0.00 
[   1400,    1600)                1        0.00 
[   1800,    2000)                1        0.00 
[   2000,    2500)                1        0.00 
[   2500,    3000)                3        0.00 
[   3000,    3500)                1        0.00 
[   3500,    4000)                5        0.00 
[   4000,    4500)                7        0.00 
[   4500,    5000)                2        0.00 
[   5000,    6000)                9        0.00 
[   6000,    7000)                5        0.00 
[   7000,    8000)                8        0.00 
[   8000,    9000)                9        0.00 
[   9000,   10000)                8        0.00 
[  10000,   12000)               15        0.00 
[  12000,   14000)               13        0.00 
[  14000,   16000)               12        0.00 
[  16000,   18000)                9        0.00 
[  18000,   20000)               14        0.00 
[  20000,   25000)               22        0.00 
[  25000,   30000)               15        0.00 
[  30000,   35000)               15        0.00 
[  35000,   40000)               11        0.00 
[  40000,   45000)               12        0.00 
[  45000,   50000)                7        0.00 
[  50000,   60000)                5        0.00 
[  60000,   70000)                5        0.00 
[  70000,   80000)                3        0.00 
[  80000,   90000)                2        0.00 
[  90000,  100000)                1        0.00 
[ 100000,  120000)                1        0.00 
[ 120000,  140000)                1        0.00 
--------------------------------------------------
Total:     7561191           500000        100%
Min latency       : 1.586974 * 1e-6 sec/op
Avg latency       : 15.122383 * 1e-6 sec/op
Max latency       : 124253.062066 * 1e-6 sec/op
5.0000%  latency  : 2.148444 * 1e-6 sec/op
50.0000%  latency  : 4.240035 * 1e-6 sec/op
95.0000%  latency  : 8.998453 * 1e-6 sec/op
96.0000%  latency  : 9.424600 * 1e-6 sec/op
97.0000%  latency  : 9.852280 * 1e-6 sec/op
98.0000%  latency  : 10.865186 * 1e-6 sec/op
99.0000%  latency  : 12.557132 * 1e-6 sec/op
99.5000%  latency  : 14.840452 * 1e-6 sec/op
99.9000%  latency  : 30.104167 * 1e-6 sec/op
99.9500%  latency  : 225.757576 * 1e-6 sec/op
99.9900%  latency  : 34333.333333 * 1e-6 sec/op <!- DISK SEEKS here
Avg throughput    :   66127 ops/sec

About

Mini NoSQL Benchmark

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published