Giter Site home page Giter Site logo

kukey / incubator-kvrocks Goto Github PK

View Code? Open in Web Editor NEW

This project forked from apache/kvrocks

0.0 0.0 0.0 6.93 MB

Kvrocks is a distributed key value NoSQL database that uses RocksDB as storage engine and is compatible with Redis protocol.

Home Page: https://kvrocks.apache.org/

License: Apache License 2.0

Shell 0.17% C++ 67.16% Python 1.13% Go 29.66% CMake 1.80% Dockerfile 0.08%

incubator-kvrocks's Introduction

kvrocks_logo

kvrocks ci actions GitHub license GitHub stars


Apache Kvrocks(Incubating) is a distributed key value NoSQL database that uses RocksDB as storage engine and is compatible with Redis protocol. Kvrocks intends to decrease the cost of memory and increase the capacity while compared to Redis. The design of replication and storage was inspired by rocksplicator and blackwidow.

Kvrocks has the following key features:

  • Redis protocol, user can use redis client to visit the kvrocks
  • Namespace, similar to redis db but use token per namespace
  • Replication, async replication using binlog like MySQL
  • High Available, supports redis sentinel to failover when master or slave was failed
  • Cluster mode, centralized management but compatible with Redis cluster client access

Thanks to designers Lingyu Tian and Shili Fan for contributing the logo of Kvrocks.

Who uses Kvrocks

Find Kvrocks users at the Users page.

Users are encouraged to add themselves to the Users page. Send a pull request to add company or organization information and logo.

Build and run Kvrocks

Prerequisite

# CentOS / RedHat
sudo yum install -y epel-release
sudo yum install -y git gcc gcc-c++ make cmake autoconf automake libtool libstdc++-static python3 which openssl-devel

# Ubuntu / Debian
sudo apt update
sudo apt install -y git gcc g++ make cmake autoconf automake libtool python3 libssl-dev

# macOS
brew install autoconf automake libtool cmake openssl

# Please force linking the openssl if still can't find after installing openssl
brew link --force openssl

Build

It is as simple as:

$ git clone https://github.com/apache/incubator-kvrocks.git
$ cd incubator-kvrocks
$ ./x.py build # `./x.py build -h` to check more options;
               # especially, `./x.py build --ghproxy` will fetch dependencies via ghproxy.com.

To build with TLS support, you'll need OpenSSL development libraries (e.g. libssl-dev on Debian/Ubuntu) and run:

$ ./x.py build -DENABLE_OPENSSL=ON

To build with luaJIT instead of lua for better performance, run:

$ ./x.py build -DUSE_LUAJIT=ON

Running Kvrocks

$ ./build/kvrocks -c kvrocks.conf

Running Kvrocks using Docker

$ docker run -it -p 6666:6666 apache/kvrocks
# or get the nightly image:
$ docker run -it -p 6666:6666 apache/kvrocks:nightly

Connect Kvrocks service

$ redis-cli -p 6666

127.0.0.1:6666> get a
(nil)

Running test cases

$ ./x.py build --unittest
$ ./x.py test cpp # run C++ unit tests
$ ./x.py test go # run Golang (unit and integration) test cases

Supported platforms

  • Linux distributions
    • CentOS
    • Ubuntu
    • and most other distros
  • macOS

Namespace

Namespace is used to isolate data between users. Unlike all the Redis databases can be visited by requirepass, we use one token per namespace. requirepass is regraded as admin token, and only admin token allows to access the namespace command, as well as some commands like config, slaveof, bgsave, etc..

# add token
127.0.0.1:6666>  namespace add ns1 my_token
OK

# update token
127.0.0.1:6666> namespace set ns1 new_token
OK

# list namespace
127.0.0.1:6666> namespace get *
1) "ns1"
2) "new_token"
3) "__namespace"
4) "foobared"

# delete namespace
127.0.0.1:6666> namespace del ns1
OK

Cluster

Kvrocks implements a proxyless centralized cluster solution but its accessing method is completely compatible with the Redis cluster client. You can use Redis cluster SDKs to access the kvrocks cluster. More details, please see: Kvrocks Cluster Introduction

Documents

Documents are hosted at the official website.

Tools

  • Export the Kvrocks monitor metrics, please use kvrocks_exporter
  • Migrate from redis to kvrocks, use redis-migrate-tool which was developed by @vipshop
  • Migrate from kvrocks to redis. use kvrocks2redis in build dir

Performance

Hardware

  • CPU: 48 cores Intel(R) Xeon(R) CPU E5-2650 v4 @ 2.20GHz
  • Memory: 32 GiB
  • NET: Intel Corporation I350 Gigabit Network Connection
  • DISK: 2TB NVMe Intel SSD DC P4600

Benchmark Client: multi-thread redis-benchmark(unstable branch)

1. Commands QPS

kvrocks: workers = 16, benchmark: 8 threads/ 512 conns / 128 payload

latency: 99.9% < 10ms

image

2. QPS on different payloads

kvrocks: workers = 16, benchmark: 8 threads/ 512 conns

latency: 99.9% < 10ms

image

3. QPS on different workers

kvrocks: workers = 16, benchmark: 8 threads/ 512 conns / 128 payload

latency: 99.9% < 10ms

image

License

Kvrocks is under the Apache License Version 2.0. See the LICENSE file for details.

Social Media

  • Medium
  • Zhihu (in Chinese)
  • WeChat Official Account (in Chinese, scan the QR code to follow)

WeChat official account

incubator-kvrocks's People

Contributors

git-hulk avatar karelrooted avatar pragmatwice avatar shooterit avatar tisonkun avatar tanruixiang avatar caipengbo avatar torwig avatar colinchamber avatar maximsmolskiy avatar jackwener avatar chriszmf avatar maplefu avatar xiaobiaozhao avatar aleksraiden avatar shangxiaoxiong avatar iocing avatar wyattjia avatar calvinxiao avatar maochongxin avatar guoxiangcn avatar gogim1 avatar ranxy avatar popunit avatar patpatbear avatar mathspanda avatar manchurio avatar fishery86 avatar suica avatar zz-jason avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.