• Stars
    star
    1,784
  • Rank 26,073 (Top 0.6 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created over 11 years ago
  • Updated about 3 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

A redis protocol compatible nosql, it support multiple storage engines as backend like Google's LevelDB, Facebook's RocksDB, OpenLDAP's LMDB, PerconaFT, WiredTiger, ForestDB.

Ardb: A High Performance Persistent NoSql, Full Redis-Protocol Compatibility

Join the chat at https://gitter.im/yinqiwen/ardb Build Status
Ardb is a BSD licensed, redis-protocol compatible persistent nosql, it support multiple storage engines as backend like Google's LevelDB, Facebook's RocksDB, OpenLDAP's LMDB, WiredTiger, PerconaFT,Couchbase's ForestDB the default backend is Facebook's RocksDB.

Compile

Rocksdb is the default storage engine, to compile with rocksdb, just type make to compile server & lib & tests.

To use LMDB or LevelDB or WiredTiger as storage engine, you should set env storage_engine first.

storage_engine=rocksdb make
storage_engine=leveldb make
storage_engine=lmdb make
storage_engine=wiredtiger make
storage_engine=perconaft make
storage_engine=forestdb make

It should compile to several executables in src directory, such as ardb-server, ardb-test etc.

Features

  • Full redis-protocol compatibility
  • Most redis commands supported, and a few new commands.
  • Multi storage engines supported
  • Multi data structure types supported
    • String
    • List
    • Set
    • Sorted Set
    • Hash
    • Bitmap(String)
    • HyperLogLog(String)
    • 2D Spatial Index(Sorted Set)
    • Stream
  • Replication compatible with Redis 2.6/2.8
    • Ardb instance work as slave of Redis 2.6/2.8+ instance
    • Ardb instance work as master of Redis 2.6/2.8+ instance
    • Ardb instance work as slave of Ardb instance
  • Auto failover support by redis-sentinel
  • Lua Scripting support
  • Pub/Sub
    • All redis pubsub commands supported
  • Transactions
    • All redis transaction commands supported
  • Backup data online
    • Use 'save/bgsave' to backup data
    • Use 'import' to import backup data

Clients

Since ardb is a full redis-protocol compatible server, you can use most existed redis client to connect it without any problem. Here lists all redis clients. http://www.redis.io/clients

  • Known Issues:

    • For Node.js, the recommand client node_redis would try to parse redis_version:x.y.z from info command's output, Ardb users should configure redis-compatible-version in ardb.conf to makesure that redis_version:x.y.z exists in info command's output. There is an online redis GUI admin service redsmin build on node_redis, users can test ardb's redis protocol conformance by a visual way.

Benchmark

Benchmarks were all performed on a four-core Intel(R) Xeon(R) CPU [email protected], with 64 GB of DDR3 RAM, 500 GB of SCSI disk

The benchmark tool is 'redis-benchmark' from redis,50 parallel clients, 10000000 requests, 1000000 random keys each test case.

GCC Version:4.8.3
OS Version: Red Hat Enterprise Linux AS release 4 (Nahant Update 3)
Kernel Version: 2.6.32_1-10-6-0
Redis Version: 2.8.9
Ardb Version: 0.9.1(RocksDB4.3.1), 1 thread(thread-pool-size configured 1) & 16 threads(thread-pool-size configured 16) RocksDB Options:

 write_buffer_size=128M;max_write_buffer_number=16;compression=kSnappyCompression;
 block_based_table_factory={block_cache=512M;block_size=4;filter_policy=bloomfilter:10:true};
 create_if_missing=true;max_open_files=-1;rate_limiter_bytes_per_sec=50M   

Benchmark Img

Becnhmark data(./redis-benchmark -r 10000000 -n 10000000):
                                Ardb(1thread)   Ardb(16threads)    Redis
PING_INLINE                     66313.01        79394.7            67294.75
PING_BULK                       66844.91        79384.61           65703.02
SET                             36238.45        67963.41           64574.45
GET                             46979.24        74050.48           65112.64
INCR                            35522.72        68102.27           65274.15
LPUSH                           24789.29        35788.93           66093.85
LPOP                            15812.53        15657              65832.78
SADD                            13130.08        12998.49           65573.77
SPOP                            200             200                63291.14
LPUSH(for LRANGE)               27693.16        38611.53           65487.89
LRANGE_100 (first 100 elements) 7857.93         33828.36           30797.66
LRANGE_300 (first 300 elements) 3176.16         16369.29           15710.92
LRANGE_500 (first 450 elements) 2156.1          11706.17           11504.83
LRANGE_600 (first 600 elements) 1647.88         9192.53            9094.22
MSET (10 keys)                  10217.64        13552.71           37678.97
Note
  • Ardb uses 1 thread & 16 threads in this benchmark test, while redis is actually single threaded application. Ardb is a multithreaded applcation, you can start the server with more threads by setting 'thread-pool-size' to 16 or higher to increase the read/write performance.
  • There is no any performance improve for SADD/LPUSH/LPOP with 16 threads , because in the test SADD/LPUSH/LPOP always operate on same key, while SADD/LPUSH/LPOP would lock the key until write operation done.
  • SPOP have very poor performance in ardb.

Misc

Community

More Repositories

1

gsnova

Private proxy solution & network troubleshooting tool.
Go
553
star
2

gscan

Go
499
star
3

geohash-int

A fast C99 geohash library which only provide int64 as hash result.
C
204
star
4

pbjson

A fast C++ serialization and de-serialization of Google's protobuf Messages into/from JSON format.
C++
150
star
5

snova-c4

Java/Node.JS implementation for Snova C4 Server.
Java
56
star
6

rsnova

Rust
50
star
7

snova-gae

Snova Java/Go server implementation for Google Appengine.
Python
41
star
8

snova-asio

Lightweight Proxy Tool
C++
33
star
9

myctk

My C/C++ Toolkit
C++
15
star
10

httpdns

A simple DNS query servive over http.
Java
15
star
11

swal

A simple write ahead log C99 library.
C
13
star
12

godns

A simple Go DNS client implementation with some new features.(Cache, Specifiable Server,...)
Go
12
star
13

tafgo

Go
9
star
14

arch

High performance networking C/C++ framework
C
8
star
15

httpclient

An async HTTP client build on netty3, which inspired from Go's http package.
Java
8
star
16

mmkv

Data structures in memory mapping file with redis API.
C++
8
star
17

mmdata

A c++ embeddable write-once data structure store.
C++
7
star
18

kcfg

A simple c++ json class/struct mapping head-only library.
C++
6
star
19

cn2py

C++ lib for chinese word to pinyin
C++
6
star
20

coroxx

C++ coroutine library
C++
5
star
21

gotoolkit

Go
4
star
22

comms

High Performance Persistent Cache on memory mapping file.
C++
3
star
23

procmon

A process monitor & control application.
Go
3
star
24

yinqiwen.github.io

yinqiwen's blogs
HTML
2
star
25

pmux

Go
2
star
26

so_script

C++
1
star
27

httpbench

A small program to benchmark HTTP servers, which is built on 'arch' framework.
C++
1
star
28

protoc-gen-mmdata

Go
1
star
29

didagle

C++
1
star