All Projects → Tencent → Tendis

Tencent / Tendis

Licence: other
Tendis is a high-performance distributed storage system fully compatible with the Redis protocol.

Programming Languages

C++
36643 projects - #6 most used programming language
tcl
693 projects
go
31211 projects - #10 most used programming language
shell
77523 projects
python
139335 projects - #7 most used programming language
CMake
9771 projects
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to Tendis

Pika
Pika is a nosql compatible with redis, it is developed by Qihoo's DBA and infrastructure team
Stars: ✭ 4,439 (+93.42%)
Mutual labels:  redis, nosql, rocksdb
toplingdb
ToplingDB is a cloud native LSM Key-Value Store with searchable compression algo and distributed compaction
Stars: ✭ 631 (-72.51%)
Mutual labels:  rocksdb, nosql, kvstore
Tidis
Distributed transactional NoSQL database, Redis protocol compatible using tikv as backend
Stars: ✭ 1,182 (-48.5%)
Mutual labels:  redis, nosql, rocksdb
Ardb
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.
Stars: ✭ 1,707 (-25.62%)
Mutual labels:  redis, nosql, rocksdb
Titan
A Distributed Redis Protocol Compatible NoSQL Database
Stars: ✭ 1,050 (-54.25%)
Mutual labels:  redis, nosql
Blackwidow
A library implements REDIS commands(Strings, Hashes, Lists, Sorted Sets, Sets, Keys, HyperLogLog) based on rocksdb
Stars: ✭ 43 (-98.13%)
Mutual labels:  redis, rocksdb
Goods Seckill
高性能电商秒杀解决方案,redis预减库存,消息队列异步下单,订单防重,订单防刷,秒杀接口地址隐藏,数学公式验证码
Stars: ✭ 61 (-97.34%)
Mutual labels:  redis, high-performance
1store
NoSQL data store using the SEASTAR framework, compatible with Redis
Stars: ✭ 1,212 (-47.19%)
Mutual labels:  redis, nosql
Smartsql
SmartSql = MyBatis in C# + .NET Core+ Cache(Memory | Redis) + R/W Splitting + PropertyChangedTrack +Dynamic Repository + InvokeSync + Diagnostics
Stars: ✭ 775 (-66.23%)
Mutual labels:  redis, high-performance
Zanredisdb
Yet another distributed kvstore support redis data and index. moved to: https://github.com/youzan/ZanRedisDB
Stars: ✭ 64 (-97.21%)
Mutual labels:  redis, rocksdb
Ignite Book Code Samples
All code samples, scripts and more in-depth examples for the book high performance in-memory computing with Apache Ignite. Please use the repository "the-apache-ignite-book" for Ignite version 2.6 or above.
Stars: ✭ 86 (-96.25%)
Mutual labels:  nosql, high-performance
Fastonosql
FastoNoSQL is a crossplatform Redis, Memcached, SSDB, LevelDB, RocksDB, UnQLite, LMDB, ForestDB, Pika, Dynomite, KeyDB GUI management tool.
Stars: ✭ 1,001 (-56.38%)
Mutual labels:  redis, rocksdb
Redix
a persistent real-time key-value store, with the same redis protocol with powerful features
Stars: ✭ 907 (-60.48%)
Mutual labels:  redis, nosql
Nodbi
Document DBI connector for R
Stars: ✭ 56 (-97.56%)
Mutual labels:  redis, nosql
Redis Marshal
Lightweight Redis data exploration tool
Stars: ✭ 16 (-99.3%)
Mutual labels:  redis, nosql
Haproxy Configs
80+ HAProxy Configs for Hadoop, Big Data, NoSQL, Docker, Elasticsearch, SolrCloud, HBase, MySQL, PostgreSQL, Apache Drill, Hive, Presto, Impala, Hue, ZooKeeper, SSH, RabbitMQ, Redis, Riak, Cloudera, OpenTSDB, InfluxDB, Prometheus, Kibana, Graphite, Rancher etc.
Stars: ✭ 106 (-95.38%)
Mutual labels:  redis, nosql
Bojack
🐴 The unreliable key-value store
Stars: ✭ 101 (-95.6%)
Mutual labels:  redis, nosql
Db Tutorial
💾 db-tutorial 是一个数据库教程。
Stars: ✭ 128 (-94.42%)
Mutual labels:  redis, nosql
Kvrocks
the kvrocks(kv-rocks) is SSD NoSQL which based on rocksdb, and compatible with the Redis protocol, intention to decrease the cost of memory and increase the capability
Stars: ✭ 471 (-79.48%)
Mutual labels:  redis, rocksdb
Sled
the champagne of beta embedded databases
Stars: ✭ 5,423 (+136.3%)
Mutual labels:  high-performance, kv

tendis

Tendis is a high-performance distributed storage system which is fully compatible with the Redis protocol. 中文文档

Table of Contents

Introduction

Tendis is a high-performance distributed storage system which is fully compatible with the Redis protocol. It uses RocksDB as the storage engine, and all data is stored to disks through RocksDB. Users can access Tendis using a Redis client, and the application hardly needs to be changed. In addition, Tendis supports storage capacity far exceeding memory, which can greatly reduce user storage costs.

Similar to Redis clusters, Tendis uses a decentralized distributed solution. The gossip protocol is used for communication between nodes, and all nodes in a cluster can be routed to the correct node when a user accesses. Cluster nodes support automatic discovery of other nodes, detect faulty nodes, and ensure the application is almost not affected when the master node failed.

Features

  • Redis compatibility

    Redis protocol and commands supported in Tendis are compatible with Redis.

  • Persistent storage

    Using RocksDB as storage engine. All data is stored in RocksDB in a specific format, supporting PB-level storage capacity.

  • Decentralized distributed cluster

    Distributed implementation like Redis clusters, using a gossip protocol to intercommunicate between nodes.

  • Horizontal scalability

    Data migration online between nodes. High performance and linear scalability up to 1,000 nodes.

  • Failover

    Auto-detect non-working nodes, and promote replica nodes to master when a failure occurs.

  • Key component for Tendis Hybrid Storage Edition

    Thanks to the design and internal optimization, Redis and Tendis can work together to be Hybrid Storage Edition. It is suitable for KV storage scenarios, as it balances performance and cost, and greatly reduces your business operating costs by 80% in the scenarios where cold data takes up a lot of storage space.

Get Started

Requirements

  • g++ (required by c++17, version >= 5.5)
  • cmake (version >= 3.13.0)

Build

$ git clone https://github.com/Tencent/tendis.git --recursive
$ git submodule update --init --recursive
$ mkdir bulid
$ cd build & cmake ..
$ make -j12

Run and Play

$ ./build/bin/tendisplus tendisplus.conf

Connect to the server via redis-cli

$ redis-cli -p 51002

TEST

You can make some change to the code and make sure the following test script pass.

$ sh ./testall.sh

Performance

Hardware spec

CPU:2.50 GHz,48 core
DISK:NVMe SSD
MEM:192GB

Benchmarks and QPS numbers

tendisplus: workers = 56

./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="set __key__ __data__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="get __key__" --key-prefix="kv_" --key-minimum=1 --key-maximum=500000000 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="incr __key__" --key-prefix="int_" --key-minimum=1 --key-maximum=1000000 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="lpush __key__ __data__" --key-prefix="list_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="sadd __key__ __data__" --key-prefix="set_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="zadd __key__ __key__ __data__" --key-prefix="" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="hset __key__ __data__ __data__" --key-prefix="hash_" --key-minimum=1 --key-maximum=1000000 --random-data --data-size=128 --test-time=1800

image.png

latency:

SET    1.6ms    99%
SET    2.2ms    99.9%
SET    6.9ms    99.99%
SET    9.4ms    100.00%

QPS on different payload

tendisplus: workers = 56

./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="set __key__ __data__" --key-prefix="kv_" --command-key-pattern=R --random-data --data-size=128 --test-time=1800
./memtier_benchmark -t 20 -c 50 -s 127.0.0.1 -p 51002 --distinct-client-seed --command="get __key__" --key-prefix="kv_" --command-key-pattern=R --test-time=1800

image.png

we test set for half an hour, and then test get key half an hour. because the data is not big enough, most of the data is in memory, so the get qps for different payload is nearly the same.

Contributing

For more information regarding contributing issues or pull requests, checkout CONTRIBUTING

Support

Checkout support for FAQs or join our discussion groups.

License

Tendis is licensed under the GNU General Public License Version 3.0. Copyright and license information can be found in the file LICENSE.txt.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].