RocksDB是基于C++语言编写的嵌入式KV存储引擎,它不是一个分布式的DB,而是一个高效、高性能、单点的数据库引擎。它是由Facebook基于Google开源的kv存储LevelDB开发开发。RocksDB使用LSM存储引擎。它针对不一样的生产环境进行调优,能够直接使用内存、也能够使用Flash、或者用硬盘或者HDFS。并且支持不一样的压缩算法,有一整套的工具用于生产、调试使用。RocksDB是一种嵌入式、KV型、持久化的存储。html
使用嵌入式的数据存储缘由有不少,当数据频繁访问内存、或者存储时,网络延迟会增长响应时间。java
为了简单说明RocksDB,咱们这里使用RocksDB的Java版原本编写。算法
<dependencies> <!-- https://mvnrepository.com/artifact/org.rocksdb/rocksdbjni --> <dependency> <groupId>org.rocksdb</groupId> <artifactId>rocksdbjni</artifactId> <version>5.11.3</version> </dependency> </dependencies>
public class GettingStartDemo { // 由于RocksDB是由C++编写的,在Java中使用首先须要加载Native库 static { // Loads the necessary library files. // Calling this method twice will have no effect. // By default the method extracts the shared library for loading at // java.io.tmpdir, however, you can override this temporary location by // setting the environment variable ROCKSDB_SHAREDLIB_DIR. // 默认这个方法会加压一个共享库到java.io.tmpdir RocksDB.loadLibrary(); } public static void main(String[] args) throws RocksDBException { // 1. 打开数据库 // 1.1 建立数据库配置 Options dbOpt = new Options(); // 1.2 配置当数据库不存在时自动建立 dbOpt.setCreateIfMissing(true); // 1.3 打开数据库。由于RocksDB默认是保存在本地磁盘,因此须要指定位置 RocksDB rdb = RocksDB.open(dbOpt, "./data/rocksdb"); // 2. 写入数据 // 2.1 RocksDB都是以字节流的方式写入数据库中,因此咱们须要将字符串转换为字节流再写入。这点相似于HBase byte[] key = "zhangsan".getBytes(); byte[] value = "20".getBytes(); // 2.2 调用put方法写入数据 rdb.put(key, value); System.out.println("写入数据到RocksDB完成!"); // 3. 调用delete方法读取数据 System.out.println("从RocksDB读取key = " + new String(key) + "的value为" + new String(rdb.get(key))); // 4. 移除数据 rdb.delete(key); // 关闭资源 rdb.close(); dbOpt.close(); } }
运行程序后,咱们能够发现,在data/rocksdb文件夹中,生成了一下几个文件:数据库
一、导入Maven依赖apache
<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-statebackend-rocksdb_2.11</artifactId>
<version>1.9.0</version>
</dependency>
二、配置启用RocksDBBackend服务器
// 此处也能够是HDFS路径,这里为了测试方便,因此使用的是本地路径env.setStateBackend(new RocksDBStateBackend("file:///D:/project/java8/data/rocksdb", true));
参考文献:网络
RocksDB中文网:https://rocksdb.org.cn/架构
https://rocksdb.org.cn/doc/RocksJava-Basics.html分布式