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分佈式