「Flink」RocksDB介紹以及Flink對RocksDB的支持

来源:https://www.cnblogs.com/ilovezihan/archive/2020/02/03/12258133.html
-Advertisement-
Play Games

RocksDB介紹RocksDB簡介RocksDB是基於C++語言編寫的嵌入式KV存儲引擎,它不是一個分散式的DB,而是一個高效、高性能、單點的資料庫引擎。它是由Facebook基於Google開源的kv存儲LevelDB開發開發。RocksDB使用LSM存儲引擎。它針對不同的生產環境進行調優,可以 ...


RocksDB介紹

RocksDB簡介

RocksDB是基於C++語言編寫的嵌入式KV存儲引擎,它不是一個分散式的DB,而是一個高效、高性能、單點的資料庫引擎。它是由Facebook基於Google開源的kv存儲LevelDB開發開發。RocksDB使用LSM存儲引擎。它針對不同的生產環境進行調優,可以直接使用記憶體、也可以使用Flash、或者用硬碟或者HDFS。而且支持不同的壓縮演算法,有一整套的工具用於生產、調試使用。RocksDB是一種嵌入式、KV型、持久化的存儲。

使用嵌入式的數據存儲原因有很多,當數據頻繁訪問記憶體、或者存儲時,網路延遲會增加響應時間。

RocksDB的主要應用場景

  1. 適應於多CPU場景
    • 一般的商業伺服器有很多的CPU核,例如:志強E5系列 - 6核
    • RocksDB可以高效運行在多核伺服器上
    • 它提供的RocksDB語義比傳統DBMS更簡單
  2. 高效利用存儲
    • RocksDB可以在快速存儲上高效運行且不會成為性能瓶頸
    • RocksDB採用LSM引擎,對比B-Tree引擎,它有更好的壓縮和更小的寫放大
  3. 彈性架構,支持擴展
  4. 支持IO-bound、in-memory、write-once

入門案例

為了簡單說明RocksDB,我們這裡使用RocksDB的Java版本來編寫。

導入Maven依賴

<dependencies>
        <!-- https://mvnrepository.com/artifact/org.rocksdb/rocksdbjni -->
        <dependency>
            <groupId>org.rocksdb</groupId>
            <artifactId>rocksdbjni</artifactId>
            <version>5.11.3</version>
        </dependency>
    </dependencies>

基於RocksDB讀寫數據

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文件夾中,生成了一下幾個文件:

image

  • 0000004.sst
    • sst是RocksDB的數據存儲文件,是二進位格式的
  • 0000006.log
    • log是預寫日誌文件,LSM架構引擎都是有預寫日誌的
  • CURRENT
    • CURRENT文件是一個文本文件,記錄最近的MANIFEST
  • IDENTITY
    • 存放當前rocksdb的唯一標識
  • LOCK
    • LOCK 進程的全局鎖,DB一旦被open, 其他進程將無法修改
  • LOG
    • rocksdb的操作日誌文件, 可配置定期的統計信息寫入LOG. 可通過info_log_level調整日誌輸出級別; 通過keep_log_file_num限制文件數量 等等。
  • LOG.old.15807….
  • MANIFECT-000005
    • 記錄rocksdb最近的狀態變化日誌。其中包含manifest日誌 和最新的文件指針
  • OPTIONS-000005
    • rocksdb的配置文件
  • OPTIONS-000008

Flink使用RocksDBBackend

1、導入Maven依賴

<dependency>
<groupId>org.apache.flink</groupId>
<artifactId>flink-statebackend-rocksdb_2.11</artifactId>
<version>1.9.0</version>
</dependency>

2、配置啟用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

https://www.jianshu.com/p/2638e2b379c3

https://www.jianshu.com/p/3302be5542c7


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 說明: 根據筆者平時使用情況,並結合參考一些其他資料,精心整理出以下必須掌握的50條Linux基礎命令。 命令: 1. ssh 登錄到遠程主機 $ ssh -l jsmith remotehost.example.com 調試ssh客戶端 $ ssh -v -l jsmith remotehost. ...
  • 生成認證key 私鑰(鑰匙) 公鑰(鎖) 加密伺服器 存在於 代表加密完成 分發密鑰 ...
  • 新年開始,公司啟動遠程辦公,需要遠程vpn到公司, 使用 AnyConnect, "下載地址" ,macos 使用的時候,有很多的問題,最後使用如下的方案解決 1. 打開Network,創建一個VPN連接 點擊create創建 2. 點擊Authentication Settings 設置組別信息 ...
  • 本文最後編輯於2020 2 3 概述 51單片機是比較適合新手入門的一款單片機,結構簡單,易於學習。本博客為筆者自學完單片機後進行的小總結。 單片機我也是學學放放,中間遇到了很多挫折(當然現在也是),我是自學了C語言之後,在大一下學期開始接觸51的,所以,我的51系列blog比較淺顯,因為用單片機的 ...
  • 安裝 配置 打開系統Settings,Region & Language,Manage Installed Languages,安裝中文語言包,然後選擇Keyboard input method system為fcitx; 重啟系統; 在Region & Language,input Sources ...
  • centos系統搭建PXE網路安裝centos+ubuntu+Windows Centos搭建PXE,安裝部署操作系統 一 . 原理: 1.什麼是PXE: PXE(Pre-boot Execution Environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Se ...
  • SVN倉庫備份和遷移 author: yunqimg(ccxtcxx0) 前言 本文主要是講 SVN 倉庫的全量備份和增量備份,只包括基本操作. 如有疑問請參考 References. 倉庫備份 svnadmin dump 1. 備份方式多樣 2. 如果版本數過多,dump的過程將非常慢 3. 備份 ...
  • 此篇文章為博主在Linux學習過程中的一些記錄,記錄在此方便查閱。 常用命令總結 + ls 顯示目錄內容 (list directory contents) + 不顯示隱藏的文件和子目錄 + 顯示目錄中所有的文件和子目錄(包括隱藏文件) + 顯示目錄中文件和子目錄的詳細信息(包括許可權、大小、創建/修 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...