您的位置 首页 java

RocksDB实战:概念介绍、安装部署、Java API读写示例

概述

熟悉Flink和 Kafka 的朋友,使用它们时或者阅读源码时,肯定会多多少少见过RocksDB的身影。Flink流处理和Kafka流处理都支持RocksDB用作状态读写操作。本文主要介绍什么是RocksDB?如何安装RocksDB?Java如何使用内嵌式RocksDB?

什么是RocksDB?

RocksDB是由 Facebook 数据库工程团队基于LevelDB开发和维护的,旨在充分实现快存上存储数据的服务能力。RocksDB是一个可嵌入的(内嵌式使用不用专门安装部署RocksDB)、持久型的key-value存储代码库,特别适合在闪存驱动器上存储数据,Key和value是任意大小的字节流,支持原子的读和写。RocksDB采用LSM设计,在写放大因子(WAF)、读放大因子(RAF)和空间放大因子(SAF)之间进行了灵活的权衡。RocksDB支持多线程压缩,特别适合在单个数据库中存储TB级别的数据。

RocksDB支持在不同的生产环境(纯内存、Flash、hard disks or HDFS)中调优,RocksDB针对多核CPU、高效快速存储(SSD)、I/O boundworkload做了优化,支持不同的数据压缩算法、和生产环境debug的完善工具。

如何安装RocksDB?

注意:并非所有使用RocksDB场景都需安装RocksDB。

提前安装可能的依赖

 [root@felixzh1 opt]# yum -y install lrzszgit gcc gcc-c++ lz4-devel snappy snappy-devel zlib zlib-devel bzip2 bzip2-devellz4 lz4-devel zstd  

安装配置 cmake

下载cmake

 [root@felixzh1 opt]# wget   

解压cmake

 [root@felixzh1 opt]# tar -zxvf cmake-3.6.0-Linux-x86_64.tar.gz  

配置cmake环境变量

  [root@felixzh1opt]# cat >>/etc/profile <<EOF
> export PATH=$PATH:/opt/cmake-3.6.0-Linux-x86_64/bin
>  EOF 

[root@felixzh1 opt]# source /etc/profile  

安装配置 gflags

下载gflags

 [root@felixzh1 opt]# wget   

解压 gflags

 [root@felixzh1 opt]# tar -zxvfv2.2.2.tar.gz  

编译安装 gflags

 [root@felixzh1 opt]# cd gflags-2.2.2/&&  mkdir  build && cd build/
[root@felixzh1 build]# cmake-DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON -DINSTALL_HEADERS=ON-DINSTALL_SHARED_LIBS=ON -DINSTALL_STATIC_LIBS=ON .. && make
[root@felixzh1 build]# make install  

配置gflags环境变量

 [root@felixzh1 build]# cat>>/etc/profile <<EOF
> exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
> EOF
[root@felixzh1 build]# source /etc/profile  

安装配置RocksDB

下载RocksDB

 [root@felixzh1 build]# wget && tar -zxvfv6.4.6.tar.gz && cd rocksdb-6.4.6/  

编译安装RocksDB

 [root@felixzh1 rocksdb-6.4.6]# mkdir build&& cd build && cmake -DCMAKE_INSTALL_PREFIX=/usr/local/rocksdb.. && make && make install  

配置RocksDB环境变量

 [root@felixzh1 build]# cat>>/etc/profile <<EOF
> exportCPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/rocksdb/include/
> exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/rocksdb/lib64/
> export LIBRARY_PATH=$LIBRARY_PATH:/usr/local/rocksdb/lib64/
> EOF
[root@felixzh1 build]# source /etc/profile  

内置工具测试

 [root@felixzh1 build]# cd/opt/rocksdb-6.4.6/build/tools/
[root@felixzh1 tools]# ./ldb –h  

创建数据库myRocksDB,并put数据

 [root@felixzh1 tools]# ./ldb--db=/opt/myRocksDB --create_if_missing put felixzh_key felixzh_value  

scan数据库myRocksDB

 [root@felixzh1 tools]# ./ldb--db=/opt/myRocksDB scan  

get数据库myRocksDB中指定key

 [root@felixzh1 tools]# ./ldb--db=/opt/myRocksDB get felixzh_key  

查看数据文件

 [root@felixzh1 tools]# ll /opt/myRocksDB/  

Java如何使用内嵌式RocksDB?

RocksDB是一种C++开发的、嵌入式的Key:Value数据库,其实系统无需安装。支持C++和Java两种语言API。这里只测试Java语言API。C++语言API见官网示例:

maven依赖

 <dependency>
    <groupId>org.rocksdb</groupId>
    <artifactId>rocksdbjni</artifactId>
    <version>6.6.4</version>
</dependency>  

演示代码

 import org.rocksdb.Options;
import org.rocksdb.RocksDB;
import org.rocksdb.RocksIterator;

public class RocksDBDemo {
    static {
        RocksDB.loadLibrary();
    }

    private static RocksDB rocksDB;

    private static String path = "/opt/myRocksDB";

    public static void main(String[] args) throws Exception {
        Options options = new Options();
        options.setCreateIfMissing(true);
        rocksDB = RocksDB.open(options, path);
        System.out.println("put: key is felixzh_key, value is felixzh_value");
        rocksDB.put("felixzh_key".getBytes(), "felixzh_value".getBytes());
        System.out.println("===================================");
        byte[] bytes = rocksDB.get("felixzh_key".getBytes());
        System.out.println("get: key is felixzh_key, value is " + new String(bytes));
        RocksIterator iter = rocksDB.newIterator();
        System.out.println("===================================");
        System.out.println("all key and value:");
        for (iter.seekToFirst(); iter.isValid(); iter.next()) {
            System.out.println("iter key: " + new String(iter.key()) + ",iter value: " +
                    new String(iter.value()));
        }
    }
}  

完整代码工程:

注意:Windows下不可执行,异常如下:

打包在linux运行(该主机无需安装RocksDB)

 [root@felixzh opt]# java -cpRocksDBCase-1.0-jar-with-dependencies.jar RocksDBDemo  

文章来源:智云一二三科技

文章标题:RocksDB实战:概念介绍、安装部署、Java API读写示例

文章地址:https://www.zhihuclub.com/191571.shtml

关于作者: 智云科技

热门文章

网站地图