中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

網(wǎng)站建設(shè)費(fèi)攤銷年限seo獨(dú)立站優(yōu)化

網(wǎng)站建設(shè)費(fèi)攤銷年限,seo獨(dú)立站優(yōu)化,怎么做企業(yè)網(wǎng)站原型,做微信網(wǎng)站公司硬件要求 硬件要求如表1所示。 表1 硬件要求 項目 說明 CPU 12 * AMD Ryzen 5 5500U with Radeon Graphics 內(nèi)存 DDR4 磁盤 HDD 軟件要求 軟件要求如表2所示。 表2 軟件要求 項目 版本 說明 下載地址 CentOS 7.6 操作系統(tǒng)。 Download kernel 4.14.0 內(nèi)核?!?article class="baidu_pl">
硬件要求

硬件要求如表1所示。

表1 硬件要求

項目

說明

CPU

?12 * AMD Ryzen 5 5500U with Radeon Graphics

內(nèi)存

DDR4

磁盤

HDD

軟件要求

軟件要求如表2所示。

表2 軟件要求

項目

版本

說明

下載地址

CentOS

7.6

操作系統(tǒng)。

Download

kernel

4.14.0

內(nèi)核。

包含在操作系統(tǒng)鏡像中。

GCC

4.8.5

編譯器。

默認(rèn)系統(tǒng)已安裝。

Python

2.7.5

腳本執(zhí)行工具。

默認(rèn)系統(tǒng)已安裝。

測試軟件包要求:

測試軟件包要求如下表3所示。

表3 測試軟件包要求

項目

版本

軟件包說明

獲取方法

RocksDB

6.10.2

待測試軟件包

https://github.com/facebook/rocksdb/archive/refs/tags/v6.10.2.tar.gz

一、編譯工具:db_bench

在安裝rocksdb的時候有一個make命令,執(zhí)行這個命令后就安裝了db_bench工具

驗證工具。

./db_bench --help

測試基準(zhǔn)場景

fillseq(順序?qū)?#xff09;

  1. 進(jìn)入工具所在目錄。
    cd /home/rocksdb-6.10.2
  2. 執(zhí)行測試命令創(chuàng)建數(shù)據(jù)庫并填充數(shù)據(jù)。
    ./db_bench --benchmarks="fillseq,stats"

    說明:選項--benchmarks的值,也可以由fillrandom替換,fillseq是按順序填充,fillrandom是隨機(jī)填充。

回顯信息中:Entries顯示數(shù)據(jù)量,Compression顯示壓縮類型,Memtablerep顯示內(nèi)存表類型,DB path顯示數(shù)據(jù)庫路徑,fillseq顯示性能數(shù)據(jù),Compaction Stats顯示合并信息。

overwrite(覆蓋寫)

  1. 進(jìn)入工具所在目錄。
    cd /home/rocksdb-6.10.2
  2. 創(chuàng)建數(shù)據(jù)庫并填充數(shù)據(jù)。
    ./db_bench --benchmarks="fillseq,stats"
  3. 在已有數(shù)據(jù)庫的基礎(chǔ)上進(jìn)行覆蓋寫入。
    ./db_bench --benchmarks="overwrite,stats"  --use_existing_db=true

回顯信息中:Entries顯示數(shù)據(jù)量,Compression顯示壓縮類型,Memtablerep顯示內(nèi)存表類型,DB path顯示數(shù)據(jù)庫路徑,overwrite顯示性能數(shù)據(jù),Compaction Stats顯示合并信息。

deleterandom(隨機(jī)刪)

  1. 進(jìn)入工具所在目錄。
    cd /home/rocksdb-6.10.2
  2. 創(chuàng)建數(shù)據(jù)庫并填充數(shù)據(jù)。
    ./db_bench --benchmarks="fillseq,stats"
  3. 在已有數(shù)據(jù)庫的基礎(chǔ)上進(jìn)行隨機(jī)刪除。
    ./db_bench --benchmarks="deleterandom,stats" --use_existing_db=true \ --use_existing_keys=true

回顯信息中:Entries顯示數(shù)據(jù)量,Compression顯示壓縮類型,Memtablerep顯示內(nèi)存表類型,DB path顯示數(shù)據(jù)庫路徑,deleterandom顯示性能數(shù)據(jù),Compaction Stats顯示合并信息。

readrandom(隨機(jī)讀)

  1. 進(jìn)入工具所在目錄。
    cd /home/rocksdb-6.10.2
  2. 創(chuàng)建數(shù)據(jù)庫并填充數(shù)據(jù)。
    ./db_bench --benchmarks="fillseq,stats"
  3. 在已有數(shù)據(jù)庫的基礎(chǔ)上進(jìn)行隨機(jī)讀取數(shù)據(jù)。
    ./db_bench --benchmarks="readrandom,stats" --use_existing_db=true \ --use_existing_keys=true

回顯信息中:Entries顯示數(shù)據(jù)量,Compression顯示壓縮類型,Memtablerep顯示內(nèi)存表類型,DB path顯示數(shù)據(jù)庫路徑,readrandom顯示性能數(shù)據(jù)。

readwhilemerging(合并時讀)

  1. 進(jìn)入工具所在目錄。
    cd /home/rocksdb-6.10.2
  2. 進(jìn)行readwhilemerging基準(zhǔn)場景的性能測試。
    ./db_bench --benchmarks="readwhilemerging,stats" --merge_operator=put

補(bǔ)充

在使用 RocksDB 中的 db_bench 工具之前,需要確保已經(jīng)成功編譯和安裝了 RocksDB。然后按照以下步驟使用 db_bench 工具:

  1. 打開終端或命令提示符,并導(dǎo)航到 RocksDB 的安裝目錄。

  2. 運(yùn)行以下命令啟動 db_bench 工具:

   ./db_bench
  1. 可以根據(jù)需要指定一些參數(shù)來配置測試環(huán)境。例如,你可以使用?-help?參數(shù)查看可用的選項列表:
   ./db_bench -help
  1. 根據(jù)你的需求設(shè)置合適的參數(shù)來運(yùn)行性能測試。這些參數(shù)包括數(shù)據(jù)庫路徑、操作類型、數(shù)據(jù)大小等。例如,下面是一個示例命令,執(zhí)行寫入 1000 條記錄并進(jìn)行讀取測試:
   ./db_bench --benchmarks=fillrandom,readrandom --num=1000
  1. 運(yùn)行命令后,會顯示性能測試的結(jié)果和統(tǒng)計信息,如吞吐量、延遲等。

請注意,在實際使用時可能還需要進(jìn)一步配置和調(diào)整參數(shù)來滿足特定場景的需求。建議查閱 RocksDB 的文檔或官方資源以獲得更詳細(xì)的信息和使用指南。

補(bǔ)充2. 基本性能壓測

由于db_bench工具的選項太多了,這里直接提取社區(qū)的測試方式
核心是benchmark,它代表本次測試使用的壓測方式,benchmark的列表如下

fillseq       -- write N values in sequential key order in async mode
fillseqdeterministic       -- write N values in the specified key order and keep the shape of the LSM tree
fillrandom    -- write N values in random key order in async mode
filluniquerandomdeterministic       -- write N values in a random key order and keep the shape of the LSM tree
overwrite     -- overwrite N values in random key order in async mode
fillsync      -- write N/100 values in random key order in sync mode
fill100K      -- write N/1000 100K values in random order in async mode
deleteseq     -- delete N keys in sequential order
deleterandom  -- delete N keys in random order
readseq       -- read N times sequentially
readtocache   -- 1 thread reading database sequentially
readreverse   -- read N times in reverse order
readrandom    -- read N times in random order
readmissing   -- read N missing keys in random order
readwhilewriting      -- 1 writer, N threads doing random reads
readwhilemerging      -- 1 merger, N threads doing random reads
readrandomwriterandom -- N threads doing random-read, random-write
prefixscanrandom      -- prefix scan N times in random order
updaterandom  -- N threads doing read-modify-write for random keys
appendrandom  -- N threads doing read-modify-write with growing values
mergerandom   -- same as updaterandom/appendrandom using merge operator. Must be used with merge_operator
readrandommergerandom -- perform N random read-or-merge operations. Must be used with merge_operator
newiterator   -- repeated iterator creation
seekrandom    -- N random seeks, call Next seek_nexts times per seek
seekrandomwhilewriting -- seekrandom and 1 thread doing overwrite
seekrandomwhilemerging -- seekrandom and 1 thread doing merge
crc32c        -- repeated crc32c of 4K of data
xxhash        -- repeated xxHash of 4K of data
acquireload   -- load N*1000 times
fillseekseq   -- write N values in sequential key, then read them by seeking to each key
randomtransaction     -- execute N random transactions and verify correctness
randomreplacekeys     -- randomly replaces N keys by deleting the old version and putting the new version
timeseries            -- 1 writer generates time series data and multiple readers doing random reads on id

???????創(chuàng)建一個db,并寫入一些數(shù)據(jù)?./db_bench --benchmarks="fillseq"但是這樣并不會打印更多有效的元信息??????????????

DB path: [/tmp/rocksdbtest-1001/dbbench]
fillseq      :       2.354 micros/op 424867 ops/sec;   47.0 MB/s

創(chuàng)建一個db,并打印一些元信息./db_bench --benchmarks="fillseq,stats"
--benchmarks表示測試的順序,支持持續(xù)疊加。本次就是順序?qū)懼蟠蛴b的狀態(tài)信息。
這樣會打印db相關(guān)的stats信息,包括db的stat信息和compaction的stat信息
?

DB path: [/tmp/rocksdbtest-1001/dbbench]
# 測試順序?qū)懙男阅苄畔?fillseq      :       2.311 micros/op 432751 ops/sec;   47.9 MB/s** Compaction Stats [default] **
Level    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------L0      1/0   28.88 MB   0.2      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0     60.6      0.48              0.31         1    0.477       0      0Sum      1/0   28.88 MB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0     60.6      0.48              0.31         1    0.477       0      0Int      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   1.0      0.0     60.6      0.48              0.31         1    0.477       0      0** Compaction Stats [default] **
Priority    Files   Size     Score Read(GB)  Rn(GB) Rnp1(GB) Write(GB) Wnew(GB) Moved(GB) W-Amp Rd(MB/s) Wr(MB/s) Comp(sec) CompMergeCPU(sec) Comp(cnt) Avg(sec) KeyIn KeyDrop
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
High      0/0    0.00 KB   0.0      0.0     0.0      0.0       0.0      0.0       0.0   0.0      0.0     60.6      0.48              0.31         1    0.477       0      0
Uptime(secs): 2.3 total, 2.3 interval
Flush(GB): cumulative 0.028, interval 0.028
AddFile(GB): cumulative 0.000, interval 0.000
AddFile(Total Files): cumulative 0, interval 0
AddFile(L0 Files): cumulative 0, interval 0
AddFile(Keys): cumulative 0, interval 0
Cumulative compaction: 0.03 GB write, 12.34 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.5 seconds
Interval compaction: 0.03 GB write, 12.50 MB/s write, 0.00 GB read, 0.00 MB/s read, 0.5 seconds
Stalls(count): 0 level0_slowdown, 0 level0_slowdown_with_compaction, 0 level0_numfiles, 0 level0_numfiles_with_compaction, 0 stop for pending_compaction_bytes, 0 slowdown for pending_compaction_bytes, 0 memtable_compaction, 0 memtable_slowdown, interval 0 total count** File Read Latency Histogram By Level [default] **** DB Stats **
Uptime(secs): 2.3 total, 2.3 interval
Cumulative writes: 1000K writes, 1000K keys, 1000K commit groups, 1.0 writes per commit group, ingest: 0.12 GB, 53.39 MB/s
Cumulative WAL: 1000K writes, 0 syncs, 1000000.00 writes per sync, written: 0.12 GB, 53.39 MB/s
Cumulative stall: 00:00:0.000 H:M:S, 0.0 percent
Interval writes: 1000K writes, 1000K keys, 1000K commit groups, 1.0 writes per commit group, ingest: 124.93 MB, 54.06 MB/s
Interval WAL: 1000K writes, 0 syncs, 1000000.00 writes per sync, written: 0.12 MB, 54.06 MB/s
Interval stall: 00:00:0.000 H:M:S, 0.0 percent

更多的meta operation操作如下

compact 對整個數(shù)據(jù)庫進(jìn)行合并
stats 打印db的狀態(tài)信息
resetstats 重置db的狀態(tài)信息
levelstats 打印每一層的文件個數(shù)以及每一層的占用的空間大小
sstables 打印sst文件的信息
對應(yīng)的sstables和levelstats顯示信息如下

--- level 0 --- version# 2 ---7:30286882[1 .. 448148]['00000000000000003030303030303030' \seq:1, type:1 .. '000000000006D6933030303030303030' seq:448148, type:1](0)
--- level 1 --- version# 2 ---
--- level 2 --- version# 2 ---
--- level 3 --- version# 2 ---
--- level 4 --- version# 2 ---
--- level 5 --- version# 2 ---
--- level 6 --- version# 2 ---Level Files Size(MB)
--------------------0        1       291        0        02        0        03        0        04        0        05        0        06        0        0

單獨(dú)隨機(jī)寫測試相關(guān)的參數(shù)可以自己配置,這里僅僅列出一部分參數(shù)可以通過?./db_bench --help自己查看想要的配置參數(shù),當(dāng)然配置前需要對各個參數(shù)有一定的了解。

./db_bench  \
--benchmarks="fillrandom,stats,levelstats" \
--enable_write_thread_adaptive_yield=false \
--disable_auto_compactions=false \
--max_background_compactions=32 \
--max_background_flushes=4 \
--write_buffer_size=536870912 \
--min_write_buffer_number_to_merge=2 \
--max_write_buffer_number=6 \
--target_file_size_base=67108864 \
--max_bytes_for_level_base=536870912 \
--compression_type=none \ #關(guān)閉壓縮
--num=500000000 \ #總共寫入的請求個數(shù),如果達(dá)不到則寫30秒就停止
--duration=30 \ #持續(xù)IO的時間是30秒
--threads=1000\ #并發(fā)1000個線程
--value_size=8192\ #value size是8K
--key_size=16 \ #key size 16B
--enable_pipelined_write=true \
--db=./db_bench_test \ #指定創(chuàng)建db的目錄
--wal_dir=./db_bench_test \ #指定創(chuàng)建wal的目錄
--allow_concurrent_memtable_write=true \ #允許并發(fā)寫memtable
--disable_wal=false \
--batch_size=1 \
--sync=false \ #是否開啟sync

在這個workload下,每一次benchmark db_bench都會重新創(chuàng)建db,可能是遺留原因。而有的時候,我們想要在原有db之前追加一定條目的請求,并不希望之前的db被清理掉。可以這樣簡單更改一下db_bench的代碼:我們使用fillrandom workload的時候,搭配use_existing_db=1 默認(rèn)會退出

這個時候我們只需要將,fillrandom workload下的fresh_db 更改為false就可以繼續(xù)測試了,每一次fillrandom都會在之前的基礎(chǔ)上增加條目,而不會destory之前的db。

???????

隨機(jī)讀
使用之前fillrandom創(chuàng)建的db,進(jìn)行隨機(jī)讀取,需要開啟use_existing_keys=1use_existing_db=1,否則都會是not-found,被bloom-filter過濾,不會命中之前寫入的數(shù)據(jù)。

./db_bench \
--benchmarks="fillseq,stats,readrandom,stats"
--enable_write_thread_adaptive_yield=false \
--disable_auto_compactions=false \
--max_background_compactions=32 \
--max_background_flushes=4 \
--write_buffer_size=536870912 \
--min_write_buffer_number_to_merge=2 \
--max_write_buffer_number=6 \
--target_file_size_base=67108864 \
--max_bytes_for_level_base=536870912 \
--use_existing_keys=1 \ #建議使用已存在key進(jìn)行讀,否則就一直被filter過濾掉,打不到磁盤,測試不精確
--use_existing_db=1 \
--cache_size=2147483648 \ #2G的block-cache,默認(rèn)是8M,實際生產(chǎn)環(huán)境,如果read-heavy應(yīng)該設(shè)置為內(nèi)存大小的三分之一。
--num=500000000 \ #總共寫入的請求個數(shù),如果達(dá)不到則寫30秒就停止
--duration=30 \ #持續(xù)IO的時間是30秒
--threads=1000 \ #并發(fā)1000個線程
--value_size=8192 \ #value size是8K
--key_size=16 \ #key size 16B
--enable_pipelined_write=true \
--db=./db_bench_test \ #指定創(chuàng)建db的目錄
--wal_dir=./db_bench_test \ #指定創(chuàng)建wal的目錄
--allow_concurrent_memtable_write=true \ #允許并發(fā)寫memtable
--disable_wal=false \	
  • 如果要測試熱點讀,可以指定參數(shù)--key_id_range=100000,表示生成的key的范圍是在100000范圍內(nèi),該測試需要在benchmark中增加timeseries

  • 讀寫混合readwhilewriting
    9個線程讀,一個線程寫

./db_bench \
--benchmarks="readwhilewriting,stats"
--enable_write_thread_adaptive_yield=false \
--disable_auto_compactions=false \
--max_background_compactions=32 \
--max_background_flushes=4 \
--write_buffer_size=536870912 \
--min_write_buffer_number_to_merge=2 \
--max_write_buffer_number=6 \
--target_file_size_base=67108864 \
--max_bytes_for_level_base=536870912 \
--use_existing_keys=1 \ #建議使用已存在key進(jìn)行讀,否則就一直被filter過濾掉,打不到磁盤,測試不精確
--use_existing_db=1 \
--cache_size=2147483648 \ #2G的block-cache,默認(rèn)是8M,實際生產(chǎn)環(huán)境,如果read-heavy應(yīng)該設(shè)置為內(nèi)存大小的三分之一。
--num=500000000 \ #總共寫入的請求個數(shù),如果達(dá)不到則寫30秒就停止
--duration=30 \ #持續(xù)IO的時間是30秒
--threads=1000\ #并發(fā)1000個線程
--value_size=8192\ #value size是8K
--key_size=16 \ #key size 16B
--enable_pipelined_write=true \
--db=./db_bench_test \ #指定創(chuàng)建db的目錄
--wal_dir=./db_bench_test \ #指定創(chuàng)建wal的目錄
--allow_concurrent_memtable_write=true \ #允許并發(fā)寫memtable
--disable_wal=false \	

隨機(jī)讀隨機(jī)寫 ReadRandomWriteRandom隨機(jī)讀一個請求,隨機(jī)寫一個請求,可以指定讀寫比,readwritepercent;默認(rèn)是90%的讀,可以降低讀的比例需要注意開啟--use_existing_keys=1?和?--use_existing_db=1

./db_bench \
--benchmarks="readrandomwriterandom,stats"
--enable_write_thread_adaptive_yield=false \
--disable_auto_compactions=false \
--max_background_compactions=32 \
--max_background_flushes=4 \
--write_buffer_size=536870912 \
--min_write_buffer_number_to_merge=2 \
--max_write_buffer_number=6 \
--target_file_size_base=67108864 \
--max_bytes_for_level_base=536870912 \
--use_existing_keys=1 \ #建議使用已存在key進(jìn)行讀,否則就一直被filter過濾掉,打不到磁盤,測試不精確
--use_existing_db=1 \ #建議打開,使用已經(jīng)存在的db
--cache_size=2147483648 \ #2G的block-cache,默認(rèn)是8M,實際生產(chǎn)環(huán)境,如果read-heavy應(yīng)該設(shè)置為內(nèi)存大小的三分之一。
--readwritepercent=50 \ #指定讀寫比 1:1,一次隨機(jī)讀,對應(yīng)一次隨機(jī)寫
--num=500000000 \ #總共寫入的請求個數(shù),如果達(dá)不到則寫30秒就停止
--duration=30 \ #持續(xù)IO的時間是30秒
--threads=1000\ #并發(fā)1000個線程
--value_size=8192\ #value size是8K
--key_size=16 \ #key size 16B
--enable_pipelined_write=true \
--db=./db_bench_test \ #指定創(chuàng)建db的目錄
--wal_dir=./db_bench_test \ #指定創(chuàng)建wal的目錄
--allow_concurrent_memtable_write=true \ #允許并發(fā)寫memtable
--disable_wal=false \	

3. 便捷Benchmark.sh 自動匹配workload
ps: 需要注意的是benchmark.sh 中很多參數(shù)并不是默認(rèn)的,而是官方給的一些適配當(dāng)前benchmark workload 的系列優(yōu)化之后的參數(shù),所以如果大家想要測試自己的option,這個方法并不推薦,還是使用上面的db_bench方式來測試。

因為db_bench選項太多,而測試緯度很難做到統(tǒng)一(可能一個memtable大小的配置都會導(dǎo)致測試出來的寫性能相關(guān)的的數(shù)據(jù)差異很大),所以官方給出了一個benchmark.sh腳本用來對各個workload進(jìn)行測試。
該腳本能夠?qū)b_bench測試結(jié)果中的stats信息進(jìn)行統(tǒng)計匯總打印(qps,),更放方便查看。

這個測試需要將編譯好的db_bench二進(jìn)制文件和./tools/benchmark.sh放到同一個目錄下即可,測試項可以參考官方給出的workload,Performance Benchmarks

隨機(jī)插入 bulkload,制造好數(shù)據(jù)集
這里的隨機(jī)插入是指單純的隨機(jī)寫,且禁掉自動compaction,將當(dāng)前請求插入完成之后會再進(jìn)行手動compaction
NUM_KEYS=900000000 NUM_THREADS=32 CACHE_SIZE=6442450944 benchmark.sh bulkload
總體來說這個隨機(jī)插入結(jié)果相比于默認(rèn)配置是偏高的,benchmark.sh中的腳本對memtable相關(guān)的配置如下:

很明顯性能肯定好于默認(rèn)配置,好處是官方有一個在指定硬件之下的workload測試結(jié)果,可以進(jìn)行對比參考。

隨機(jī)寫,覆蓋寫
在上一次已有的數(shù)據(jù)基礎(chǔ)上進(jìn)行測試,會覆蓋寫9億條key
NUM_KEYS=900000000 NUM_THREADS=32 CACHE_SIZE=6442450944 DURATION=5400 benchmark.sh overwrite

讀時寫,9個線程讀,一個線程寫
這里的讀是從已經(jīng)存在的key中進(jìn)行讀
NUM_KEYS=900000000 NUM_THREADS=32 CACHE_SIZE=6442450944 DURATION=5400 benchmark.sh readwhilewriting

隨機(jī)讀
NUM_KEYS=900000000 NUM_THREADS=32 CACHE_SIZE=6442450944 DURATION=5400 benchmark.sh readrandom

4. 上限的benchmark及參數(shù)
歡迎大家補(bǔ)充各自的上限 workload 。

4.1 隨機(jī)寫
單進(jìn)程 32個線程,32個db,各自的寫吞吐會以秒計形態(tài)輸出到一個report.csv。這里線程數(shù) 和 db數(shù)可以根據(jù)自己環(huán)境的cpu核心情況而定,基本不用擔(dān)心write-stall問題。

 ./db_bench \--benchmarks=fillrandom,stats \--readwritepercent=90 \--num=3000000000 \--threads=32 \--db=./db \--wal_dir=./db \--duration=3600 \-report_interval_seconds=1 \--key_size=16 \--value_size=128 \--max_write_buffer_number=16 \-max_background_compactions=32 \-max_background_flushes=16 \-subcompactions=8 \-num_multi_db=32 \-compression_type=none 

如果想要支持 direct_io 寫,可以打開
--use_direct_io_for_flush_and_compaction=true,這個配置是在寫sst時 也就是flush & compaction 生效。
如果想要測試 mmap 寫,則可以打開
--mmap_write=true

4.2 完全隨機(jī)讀
隨機(jī)讀想要命中所有的key,需要打開 use_existing_db=1use_existing_keys=1。
需要注意的是 use_existing_keys 開啟之后不能直接讀多db,只能讀單個db,因為它會在真正執(zhí)行讀workload 之前從這一個db內(nèi)scan 所有的key 到一個數(shù)組中,同時 配置的 --num 選項是失效的,這里會填充掃描上來的key的個數(shù)。
使用這個配置之后 worklaod 不會立即啟動,會卡一會掃描完所有的key之后才真正開始隨機(jī)讀(讀的過程是生成隨機(jī)下標(biāo)來進(jìn)行訪問)

這個測試是使用默認(rèn)大小的block_cache (8MB),以及 開啟bloom filter,因為我們是use_existing_keys,那bloom filter基本沒什么用。

 $DB_BENCH \--benchmarks=readrandom,stats \--num=3000000000 \--threads=40 \--db=./db \--wal_dir=./db \--duration="$DURATION" \--statistics \-report_interval_seconds=1 \--key_size=16 \--value_size=128 \-use_existing_db=1 \-use_existing_keys=1 \-compression_type=none \

想要測試 direct 讀,添加-use_direct_reads=true,那么讀就不會用os pagecache了,這里可以搭配-cache_size=1073741824 以及其他block_cache的配置進(jìn)行測試,來看rocksdb的block_cache 相比于os pagecache的收益。

想要測試 mmap 讀,添加-mmap_read=true 即可。

4.3 熱點讀

這里基本是使用之前的配置,主要是增加一個數(shù)據(jù)傾斜的配置?read_random_exp_range,它會用來產(chǎn)生傾斜的隨機(jī)下標(biāo)。

這個值越大,下標(biāo)的傾斜越嚴(yán)重(可以理解為key-range 越小)。

 $DB_BENCH \--benchmarks=readrandom,stats \--num=3000000000 \--threads=40 \--db=./db \--wal_dir=./db \--duration="$DURATION" \--statistics \-report_interval_seconds=1 \--key_size=16 \--value_size=128 \-use_existing_db=1 \-use_existing_keys=1 \-compression_type=none \-read_random_exp_range=0.8 \

以上所有的workload 最后的結(jié)果
可以通過?tail -f report.csv?查看 吞吐

secs_elapsed,interval_qps
1,3236083
2,2877314
3,2645623
4,2581939
5,2655481
6,2038635
7,2226018
8,2366941
...

后面可以通過python 繪圖腳本系列簡單記錄進(jìn)行曲線繪圖。

二、rocksdb ldb工具使用

語法格式:

ldb --db=<full_path_to_db_directory> <command>

語法說明:

  • 必須指定數(shù)據(jù)庫的路徑--db=<full_path_to_db_directory>
  • 根據(jù)需要,選擇需要執(zhí)行的command

????????????????????????????????????????????????表1 ldb支持的command及其說明

命令

說明

put <key> <value> [--ttl]

寫入數(shù)據(jù)到數(shù)據(jù)庫。

get <key> [--ttl]

從內(nèi)存memtable或磁盤中的sst文件中讀取指定的key對應(yīng)的值。

batchput <key> <value> [<key> <value>] [..] [--ttl]

將數(shù)據(jù)批量寫入數(shù)據(jù)庫。

scan [--from] [--to] [--ttl] [--timestamp] [--max_keys=<N>q] [--start_time=<N>:- is inclusive] [--end_time=<N>:- is exclusive] [--no_value]

掃描數(shù)據(jù)庫中數(shù)據(jù),也可以添加條件,指定掃描數(shù)據(jù)的范圍,如key值范圍、生命周期的時間等。

delete <key>

刪除指定key的數(shù)據(jù)。

deleterange <begin key> <end key>

刪除指定范圍內(nèi)的所有鍵值對。其中,<begin key>和<end key>分別表示要刪除的鍵值對的起始鍵和結(jié)束鍵。

query [--ttl]

執(zhí)行query命令,之后會開始一個EEPL shell,鍵入help,之后會顯示出可用命令的列表,根據(jù)列表顯示執(zhí)行命令。

approxsize [--from] [--to]

該命令用于查詢數(shù)據(jù)在磁盤上所占空間。由key值范圍指定要查詢的數(shù)據(jù)。

checkconsistency

該命令功能為一致性檢測,檢查文件系統(tǒng)中是否包含所有在生命周期內(nèi)的文件,以及它們的文件大小與內(nèi)存記錄匹配。

list_file_range_deletes [--max_keys=<N>]

打印出在sst文件中要刪除范圍的最大值。

管理員命令:

????????????????????????????????????????????????????????表1 管理員命令及其說明

命令

說明

dump_wal --walfile=<write_ahead_log_file_path> [--header] [--print_value] [--write_committed=true|false]

轉(zhuǎn)儲wal文件。

compact [--from] [--to]

compact操作范圍設(shè)定,from參數(shù)和to參數(shù)的取值是數(shù)據(jù)庫中已存在的key值。

reduce_levels --new_levels=<New number of levels> [--print_old_levels]

還原指定level。

change_compaction_style --old_compaction_style=<Old compaction style: 0 for level compaction, 1 for universal compaction> --new_compaction_style=<New compaction style: 0 for level compaction, 1 for universal compaction>

該命令是轉(zhuǎn)換設(shè)定對應(yīng)level層的compation的類型,參數(shù)由0和1兩個數(shù)字代替兩種compaction類型,分別是level compaction和universal compaction。

dump [--from] [--to] [--ttl] [--max_keys=<N>] [--timestamp] [--count_only] [--count_delim=<char>] [--stats] [--bucket=<N>] [--start_time=<N>:- is inclusive] [--end_time=<N>:- is exclusive] [--path=<path_to_a_file>]

該命令用于查詢數(shù)據(jù)庫中已存在的key/value類型的數(shù)據(jù),將存儲文件中的特殊存儲格式的數(shù)據(jù),轉(zhuǎn)換成可以直接讀取識別的數(shù)據(jù)并回顯出來并帶有各類控制參數(shù)。

  • from、to參數(shù)控制查詢的范圍,取值為已存在的key。
  • ttl參數(shù)是用于查詢在生命周期內(nèi)有效的數(shù)據(jù)。
  • count_only限制只回顯數(shù)據(jù)庫中key/value數(shù)據(jù)的個數(shù)。
  • count_delim參數(shù)有指定的值,是一個char類型字符,不查詢key中含有該字符的數(shù)據(jù)。
  • dump不加參情況下,查詢的是默認(rèn)的列族default,如需查詢其他的列族,需要通過參數(shù)“--column_family”指定目標(biāo)列族。

load [--create_if_missing] [--disable_wal] [--bulk_load] [--compact]

該命令用于加載數(shù)據(jù)庫,加載的方式有參數(shù)所示的幾種方式。

manifest_dump [--verbose] [--json] [--path=<path_to_manifest_file>]

該命令用于manifest文件的轉(zhuǎn)儲。

file_checksum_dump [--path=<path_to_manifest_file>]

該命令是對數(shù)據(jù)庫中sst文件進(jìn)行校驗和驗證,并打印出每個sst文件的校驗信息。

list_column_families

列出指定的數(shù)據(jù)庫中存在的所有列族。

create_column_family --db=<db_path> <new_column_family_name>

在指定的數(shù)據(jù)庫中添加新的列族。

drop_column_family --db=<db_path> <column_family_name_to_drop>

在指定的數(shù)據(jù)庫中刪除要求的列族。

dump_live_files

轉(zhuǎn)儲在生命周期內(nèi)的文件。

idump [--from] [--to] [--input_key_hex] [--max_keys=<N>] [--count_only] [--count_delim=<char>] [--stats]

該命令也是查詢數(shù)據(jù)庫中的數(shù)據(jù)與上述的dump命令類似。但是回顯的信息key/value數(shù)據(jù)更加詳細(xì),例如回顯信息中增加了每個數(shù)據(jù)寫入數(shù)據(jù)庫中的實際先后次序信息。

repair

該命令是恢復(fù)最進(jìn)刪除的日志文件,例如MANIFEST文件和log文件。將恢復(fù)的日志文件放入數(shù)據(jù)庫中的新生成的lost目錄中。

backup [--backup_env_uri] [--backup_dir] [--num_threads] [--stderr_log_level=<int (InfoLogLevel)>]

數(shù)據(jù)庫備份。

restore [--backup_env_uri] [--backup_dir] [--num_threads] [--stderr_log_level=<int (InfoLogLevel)>]

數(shù)據(jù)庫恢復(fù)。

checkpoint [--checkpoint_dir]

設(shè)置檢查點。

write_extern_sst <output_sst_path>

把數(shù)據(jù)寫入指定位置的sst文件。

ingest_extern_sst <input_sst_path> [--move_files] [--snapshot_consistency] [--allow_global_seqno] [--allow_blocking_flush] [--ingest_behind] [--write_global_seqno]

導(dǎo)入外部sst文件。

字符串輸入/輸出格式參數(shù)

如表1所示可選參數(shù)控制keys/values是作為十六進(jìn)制還是普通字符串輸入/輸出。

表1 字符串輸入/輸出格式參數(shù)及其說明

參數(shù)

說明

--key_hex

keys以十六進(jìn)制輸入/輸出。

--value_hex

values以十六進(jìn)制形式輸入/輸出。

--hex

keys和values都以十六進(jìn)制輸入/輸出。

數(shù)據(jù)庫內(nèi)部控制參數(shù)

如表1所示可選參數(shù)控制數(shù)據(jù)庫內(nèi)部。

????????????????????????????????????????????????表1 數(shù)據(jù)庫內(nèi)部控制參數(shù)及其說明

參數(shù)

說明

--column_family=<string>

該參數(shù)是指在列式數(shù)據(jù)庫中,用于指定數(shù)據(jù)表中的列族。

default:默認(rèn)列族(即默認(rèn)表)。

--column_family=default

--ttl with 'put','get','scan','dump','query','batchput'

TTL是一種機(jī)制,用于在一定時間后自動刪除數(shù)據(jù),以避免數(shù)據(jù)過期或占用存儲空間。

--try_load_options

讀取數(shù)據(jù)庫的配置文件并打開數(shù)據(jù)庫。

--disable_consistency_checks

用于禁用一致性校驗。

默認(rèn)值為true。

--ignore_unknown_options

是否啟用加載選項文件時忽略未知選項。

--bloom_bits=<int,e.g.:14>

每個key對應(yīng)的bloom過濾器位數(shù),RocksDB若啟用bloom過濾器請設(shè)置該值(例如14,默認(rèn)值為-1),若不啟用bloom過濾器請設(shè)置為0。

--fix_prefix_len=<int,e.g.:14>

設(shè)置前綴bloom篩選器中的固定長度前綴的值,值為整型。

--compression_type=<no|snappy|zlib|bzip2|lz4|lz4hc|xpress|zstd>

該參數(shù)用于指定壓縮類型。RocksDB默認(rèn)的壓縮方式是snappy。并且其各層之間的壓縮方法無需一致。

--compression_max_dict_bytes=<int,e.g.:16384>

配置啟動壓縮庫的字典上限,即達(dá)到字典上限后會啟動壓縮庫。

--block_size=<block_size_in_bytes>

用于設(shè)置塊大小。

塊大小通常為4KB。由于更小的塊大小會削減解壓縮時的開銷,塊大小越小,隨機(jī)讀速度越快。但過小的塊大小會導(dǎo)致壓縮失效,因此推薦設(shè)置為1KB。

--auto_compaction=<true|false>

用于指定是否啟用RocksDB的auto compaction功能。

--db_write_buffer_size=<int,e.g.:16777216>

設(shè)置所有column family的memtable的大小限制。

--write_buffer_size=<int,e.g.:4194304>

設(shè)置每個column family的memtable的大小。

默認(rèn)值為64MB。

--file_size=<int,e.g.:2097152>

設(shè)置level層的sst文件大小,即設(shè)置配置選項options.target_file_size_base的值。RocksDB使用sst文件分層(level 0層到level N層)管理數(shù)據(jù),level層sst文件的總和大小 = sst文件大小 * sst文件的個數(shù)。

例子:

put和batchput命令

前提條件

執(zhí)行下列的各個命令之前,需要新建一個目標(biāo)數(shù)據(jù)庫或已存在數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫詳情可參考步驟2。

操作步驟
  1. 進(jìn)入目錄“/home”。
    cd /home
  2. 創(chuàng)建數(shù)據(jù)庫存儲目錄。
    mkdir –p /home/rocksdb/rkdb
  3. 使用ldb命令,創(chuàng)建數(shù)據(jù)庫并使用put命令寫入第一個數(shù)據(jù)。
    ldb  --db=/home/rocksdb/rkdb --create_if_missing put k1 v1

    說明

    如果ldb工具的操作的目標(biāo)數(shù)據(jù)庫不存在,出現(xiàn)“does not exist”報錯提示,可以添加“--create_if_missing”參數(shù),創(chuàng)建新的目標(biāo)數(shù)據(jù)庫。

  4. 使用ldb工具執(zhí)行put命令添加數(shù)據(jù)。
    ldb  --db=/home/rocksdb/rkdb put k2 v2

  5. 使用ldb命令執(zhí)行batchput命令,批量寫入數(shù)據(jù)。
    ldb  --db=/home/rocksdb/rkdb batchput k3 v3 k4 v4 k5 555 kstring abcd

  6. 使用scan命令,查看寫入數(shù)據(jù)庫中的數(shù)據(jù)。
    ldb  --db=/home/rocksdb/rkdb scan 

get和scan命令

前提條件

執(zhí)行下列的各個命令之前,需要新建一個目標(biāo)數(shù)據(jù)庫或已存在數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫詳情可參考步驟2。

操作步驟
  1. 進(jìn)入“/home”目錄。
    cd /home
  2. 使用ldb工具執(zhí)行get命令,查看指定key的values。
    ldb  --db=/home/rocksdb/rkdb get k5
    ldb  --db=/home/rocksdb/rkdb get k3

  3. 使用ldb工具執(zhí)行scan命令,掃描數(shù)據(jù)庫中的所有數(shù)據(jù)。

    說明

    下述命令是scan命令的最簡形式,但數(shù)據(jù)庫的數(shù)據(jù)量較大時,掃描所有數(shù)據(jù)并回顯出來不合適,可以控制掃描數(shù)據(jù)的key值范圍,有指向地掃描數(shù)據(jù)??刂茀?shù)參考ldb支持的command的scan命令說明。

    ldb  --db=/home/rocksdb/rkdb scan

delete和deleterange命令

前提條件

執(zhí)行下列的各個命令之前,需要新建一個目標(biāo)數(shù)據(jù)庫或已存在數(shù)據(jù)庫。創(chuàng)建數(shù)據(jù)庫詳情可參考步驟2。

操作步驟
  1. 進(jìn)入“/home”目錄。
    cd /home
  2. 使用scan命令,查看數(shù)據(jù)庫現(xiàn)有數(shù)據(jù)。
    ldb  --db=/home/rocksdb/rkdb scan

    ?

  3. 使用ldb工具執(zhí)行delete命令,刪除指定key的values。
    ldb  --db=/home/rocksdb/rkdb delete k5

    ?

  4. 執(zhí)行get命令,查看k5的values。
    ldb  --db=/home/rocksdb/rkdb get k5

    ?

  5. 使用ldb工具執(zhí)行deleterange命令,刪除指定范圍中key的values。
    ldb  --db=/home/rocksdb/rkdb deleterange k2 k4

    ?

  6. 查看范圍刪除后的結(jié)果。
    ldb  --db=/home/rocksdb/rkdb scan

    ?

三、驗證sst_dump的參數(shù)

前提條件

執(zhí)行下列的各個命令之前,需要新建一個目標(biāo)數(shù)據(jù)庫或已存在數(shù)據(jù)庫。以下操作默認(rèn)數(shù)據(jù)庫已存在。

操作步驟
  1. 進(jìn)入目錄“/home”。

    cd /home
  2. 打印sst文件的屬性。
    sst_dump --file=/home/rocksdb/rkdb/000004.sst --show_properties

http://www.risenshineclean.com/news/11401.html

相關(guān)文章:

  • 湖北做網(wǎng)站系統(tǒng)哪家好百度貼吧網(wǎng)頁版
  • 個人做企業(yè)網(wǎng)站制作要多少錢推廣服務(wù)公司
  • 廣州技術(shù)支持 網(wǎng)站建設(shè)清遠(yuǎn)疫情防控措施
  • wordpress中文tag優(yōu)化設(shè)計答案五年級上冊
  • 廣州做網(wǎng)站建設(shè)哪家專業(yè)百度頁面
  • 中國建設(shè)招標(biāo)網(wǎng)住建部網(wǎng)站seo免費(fèi)推廣軟件
  • 怎樣做p2p網(wǎng)站福建百度推廣
  • 網(wǎng)站正在建設(shè)中 英語翻譯seo體系百科
  • 群暉 nas 做網(wǎng)站自媒體平臺注冊官網(wǎng)
  • 網(wǎng)站建設(shè)初衷宣傳推廣網(wǎng)絡(luò)推廣
  • 西部數(shù)碼網(wǎng)站源碼正規(guī)的代運(yùn)營公司
  • wordpress多站點無css百度推廣競價排名
  • wordpress允許游客支付seo流量是什么
  • 網(wǎng)站建設(shè)(中企動力)頂尖文案
  • 深圳網(wǎng)站設(shè)計公司電商培訓(xùn)機(jī)構(gòu)靠譜嗎
  • 漂亮的博客網(wǎng)站模板汕頭seo代理
  • 杭州 專業(yè)網(wǎng)站建設(shè) 網(wǎng)絡(luò)服務(wù)廣東疫情最新通報
  • 做公司網(wǎng)站的推廣工作怎樣成都私人網(wǎng)站制作
  • 做網(wǎng)站需要哪些軟件電商項目策劃書
  • 集約化網(wǎng)站建設(shè)淘寶推廣費(fèi)用多少錢一天
  • 建網(wǎng)站wordpress百度推廣開戶公司
  • 長春做網(wǎng)站 長春萬網(wǎng)關(guān)鍵詞推廣操作
  • 做動態(tài)網(wǎng)站有什么較好的主題seo外貿(mào)公司推廣
  • 做電子的外單網(wǎng)站有哪些的交換友情鏈接平臺
  • 網(wǎng)站右下角彈出廣告代碼semantic scholar
  • 網(wǎng)站建設(shè)如何就接入支付寶推廣平臺app
  • 如何查看網(wǎng)站訪問日志文件網(wǎng)頁優(yōu)化公司
  • 通過云主機(jī)建設(shè)網(wǎng)站西安企業(yè)seo
  • 電影網(wǎng)站怎么做推廣公司做網(wǎng)絡(luò)推廣哪個網(wǎng)站好
  • 新翼設(shè)計網(wǎng)站建設(shè)公司精準(zhǔn)信息預(yù)測