{"id":13419785,"url":"https://github.com/yinqiwen/ardb","last_synced_at":"2025-05-15T16:08:07.163Z","repository":{"id":7685005,"uuid":"9048279","full_name":"yinqiwen/ardb","owner":"yinqiwen","description":"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.","archived":false,"fork":false,"pushed_at":"2021-11-12T01:20:52.000Z","size":73105,"stargazers_count":1833,"open_issues_count":74,"forks_count":278,"subscribers_count":126,"default_branch":"master","last_synced_at":"2025-04-07T21:14:54.057Z","etag":null,"topics":["c-plus-plus","database","forestdb","key-value","leveldb","lmdb","lua","nosql","nosql-database","percona","persistence","redis","rocksdb","server","wiredtiger"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yinqiwen.png","metadata":{"files":{"readme":"README.md","changelog":"Changelog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2013-03-27T06:49:40.000Z","updated_at":"2025-04-06T13:50:26.000Z","dependencies_parsed_at":"2022-09-01T08:50:51.456Z","dependency_job_id":null,"html_url":"https://github.com/yinqiwen/ardb","commit_stats":null,"previous_names":[],"tags_count":13,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinqiwen%2Fardb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinqiwen%2Fardb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinqiwen%2Fardb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yinqiwen%2Fardb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yinqiwen","download_url":"https://codeload.github.com/yinqiwen/ardb/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254374475,"owners_count":22060611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["c-plus-plus","database","forestdb","key-value","leveldb","lmdb","lua","nosql","nosql-database","percona","persistence","redis","rocksdb","server","wiredtiger"],"created_at":"2024-07-30T22:01:20.833Z","updated_at":"2025-05-15T16:08:02.148Z","avatar_url":"https://github.com/yinqiwen.png","language":"C++","funding_links":[],"categories":["TODO scan for Android support in followings","C++","c-plus-plus","database"],"sub_categories":[],"readme":"# Ardb: A High Performance Persistent NoSql, Full Redis-Protocol Compatibility\n\n[![Join the chat at https://gitter.im/yinqiwen/ardb](https://badges.gitter.im/yinqiwen/ardb.svg)](https://gitter.im/yinqiwen/ardb?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n[![Build Status](https://travis-ci.org/yinqiwen/ardb.svg?branch=master)](https://travis-ci.org/yinqiwen/ardb)  \nArdb is a BSD licensed, redis-protocol compatible persistent nosql, it support multiple storage engines as backend like [Google's LevelDB](https://github.com/google/leveldb), [Facebook's RocksDB](https://github.com/facebook/rocksdb), [OpenLDAP's LMDB](http://symas.com/mdb/), [WiredTiger](http://www.wiredtiger.com/), [PerconaFT](https://github.com/percona/PerconaFT),[Couchbase's ForestDB](https://github.com/couchbase/forestdb) the default backend is [Facebook's RocksDB](https://github.com/facebook/rocksdb).\n\n\n## Compile\nRocksdb is the default storage engine, to compile with rocksdb, just type `make` to compile server \u0026 lib \u0026 tests.\n\nTo use LMDB or LevelDB or WiredTiger as storage engine, you should set env `storage_engine` first.\n\t\n\tstorage_engine=rocksdb make\n    storage_engine=leveldb make\n    storage_engine=lmdb make\n\tstorage_engine=wiredtiger make\n\tstorage_engine=perconaft make\n\tstorage_engine=forestdb make\n\n\nIt should compile to several executables in `src` directory, such as ardb-server, ardb-test etc.\n\t\n\n## Features\n- Full redis-protocol compatibility\n- Most redis commands supported, and a few new commands.\n  * [Ardb commands VS Redis Commands](https://github.com/yinqiwen/ardb/wiki/ARDB-Commands)\n- Multi storage engines supported\n  * [RocksDB](https://github.com/facebook/rocksdb)\n  * [LevelDB](https://github.com/google/leveldb)\n  * [LMDB](http://symas.com/mdb/)\n  * [WiredTiger](http://www.wiredtiger.com/)\n  * [PerconaFT](https://github.com/percona/PerconaFT)\n  * [ForestDB](https://github.com/couchbase/forestdb)\n- Multi data structure types supported\n  * String\n  * List\n  * Set\n  * Sorted Set\n  * Hash\n  * Bitmap(String)\n  * HyperLogLog(String)\n  * [2D Spatial Index](https://github.com/yinqiwen/ardb/wiki/Spatial-Index)(Sorted Set)\n  * Stream\n- Replication compatible with Redis 2.6/2.8\n  * Ardb instance work as slave of Redis 2.6/2.8+ instance\n  * Ardb instance work as master of Redis 2.6/2.8+ instance\n  * Ardb instance work as slave of Ardb instance\n- Auto failover support by redis-sentinel\n- Lua Scripting support \n- Pub/Sub\n  * All redis pubsub commands supported\n- Transactions\n  * All redis transaction commands supported\n- Backup data online\n  * Use 'save/bgsave' to backup data\n  * Use 'import' to import backup data\n\n\n## Clients\nSince 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. \u003chttp://www.redis.io/clients\u003e  \n\n* **Known Issues**:   \n\n  - For Node.js, the recommand client [node_redis](https://github.com/mranney/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](https://redsmin.com) build on [node_redis](https://github.com/mranney/node_redis), users can test ardb's redis protocol conformance by a visual way. \n  \n  \n\n## Benchmark\nBenchmarks were all performed on a four-core Intel(R) Xeon(R) CPU E5520@2.27GHz, with 64 GB of DDR3 RAM, 500 GB of SCSI disk\n\nThe benchmark tool is 'redis-benchmark' from redis,50 parallel clients, 10000000 requests, 1000000 random keys each test case.\n\nGCC Version:4.8.3  \nOS Version: Red Hat Enterprise Linux AS release 4 (Nahant Update 3)   \nKernel Version: 2.6.32_1-10-6-0       \nRedis Version: 2.8.9  \nArdb Version: 0.9.1(RocksDB4.3.1), 1 thread(thread-pool-size configured 1) \u0026 16 threads(thread-pool-size configured 16) \nRocksDB Options: \n\n     write_buffer_size=128M;max_write_buffer_number=16;compression=kSnappyCompression;\n     block_based_table_factory={block_cache=512M;block_size=4;filter_policy=bloomfilter:10:true};\n     create_if_missing=true;max_open_files=-1;rate_limiter_bytes_per_sec=50M   \n\n![Benchmark Img](https://raw.githubusercontent.com/yinqiwen/ardb/0.9/doc/benchmark.png)\n\n\tBecnhmark data(./redis-benchmark -r 10000000 -n 10000000):\n                                    Ardb(1thread)   Ardb(16threads)    Redis\n    PING_INLINE                     66313.01        79394.7            67294.75\n    PING_BULK                       66844.91        79384.61           65703.02\n    SET                             36238.45        67963.41           64574.45\n    GET                             46979.24        74050.48           65112.64\n    INCR                            35522.72        68102.27           65274.15\n    LPUSH                           24789.29        35788.93           66093.85\n    LPOP                            15812.53        15657              65832.78\n    SADD                            13130.08        12998.49           65573.77\n    SPOP                            200             200                63291.14\n    LPUSH(for LRANGE)               27693.16        38611.53           65487.89\n    LRANGE_100 (first 100 elements) 7857.93         33828.36           30797.66\n    LRANGE_300 (first 300 elements) 3176.16         16369.29           15710.92\n    LRANGE_500 (first 450 elements) 2156.1          11706.17           11504.83\n    LRANGE_600 (first 600 elements) 1647.88         9192.53            9094.22\n    MSET (10 keys)                  10217.64        13552.71           37678.97\n\n\n\n##### Note     \n- Ardb uses 1 thread \u0026 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.    \n- 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.\n- SPOP have very poor performance in ardb.\n         \n\n## Misc\n- [Ardb commands VS Redis Commands](https://github.com/yinqiwen/ardb/wiki/ARDB-Commands)\n- [Ardb design draft](https://github.com/yinqiwen/ardb/wiki/Design-Draft)\n- [Spatial Index](https://github.com/yinqiwen/ardb/wiki/Spatial-Index)\n\n## Community\n\n  - Join the [mailing list](https://groups.google.com/forum/#!forum/ardb-nosql)(Subscribe via [email](mailto:ardb-nosql+subscribe@googlegroups.com))\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyinqiwen%2Fardb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyinqiwen%2Fardb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyinqiwen%2Fardb/lists"}