使用 Dockerfile 进行存储引擎测试 - topling/PureOld-TerarkDB GitHub Wiki
1. 获取 Dockerfile
用于构建基础环境, 放在任意目录中,如 terarkdb-tests/Dockerfile
:
# use ubuntu 16.04
FROM hub.c.163.com/library/ubuntu:16.04
# tsing hua deb source
RUN echo '# Tsinghua deb source \n\
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial main restricted universe multiverse \n\
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse \n\
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse \n\
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ xenial-security main restricted universe multiverse' >> /etc/apt/sources.list
RUN apt-get update
RUN apt-get install vim -y
# install gcc
RUN apt-get install build-essential -y; exit 0
RUN apt-get install gcc-5 -y
RUN apt-get install gcc-4.8 -y
RUN apt-get install libnuma-dev -y
RUN apt-get update
RUN apt-get install wget -y
RUN apt-get install perl -y
RUN apt-get install libaio1 libaio-dev -y
# extra tools
RUN apt-get install libreadline6 libreadline6-dev -y
# RUN apt-get install openjdk-8-jre -y; exit 0
RUN apt-get install git -y; exit 0
RUN apt-get install python -y; exit 0
# get terarkdb-tests
RUN cd /home && wget http://terark-downloads.oss-cn-qingdao.aliyuncs.com/docker_assets/terarkdb-tests-pkg.tar.gz
RUN cd /home && tar -zxvf terarkdb-tests-pkg.tar.gz
2. 构建镜像
cd terarkdb-tests
docker build -t terarkdb/tests . # 镜像名称命名为 `terarkdb/tests`
3. 通过镜像创建容器并进入容器 shell
docker run -it --name test_name \
-v /data/publicdata/wikipedia:/data \
-v /path/to/terarkdb-tests-docker-data:/database \
terarkdb/tests
其中:
/data/publicdata/wikipedia
下存储wikipidea.txt
和wikipidea_key.txt
数据文件/path/to/terarkdb-tests-docker-data
为数据库文件存储路径,一般使用 SSD 盘,需要提前创建一个tempdir
目录- 也可以另挂载一个 SSD 盘目录来单独作为
tempdir
目录
4. 进入镜像后:
引擎的测试分为两个阶段, 分别是数据加载阶段,和数据读写混合阶段:
cd /home/terarkdb-tests-pkg
# 执行数据加载测试,改测试会读取 `wikipidea.txt` 数据文件并插入数据库
bash terarkdb_load_wikipedia.sh
# 数据加载完成后可以执行运行操作
bash terarkdb_run_wikipedia.sh
以上两个脚本中的参数,分别如下所示:
4.1. terarkdb_load_wikipedia.sh
表示数据加载阶段(只写)的启动脚本:
./bench_terarkdb
--action=load
--db=/database/terarkdb
--fields_num=15
--key_fields=0,1,2
--load_data_path=/data/wikipedia.txt
--terocksdb_tmpdir=/tempdir
--logdir=/database/log
--write_rate_limit=0
--auto_slowdown_write=0
--enable_auto_compact=0
--rocksdb_memtable=vector
--flush_threads=2
--disable_wal
--num_levels=9
--index_nest_level=2
--compact_threads=2
--use_universal_compaction=1
--target_file_size_multiplier=2
--mysql_passwd=******
--alt_engine_name=terarkdb_load_wikipedia
重点参数说明:
write_rate_limit
: 设定写速度,使写操作尽量按该速度进行。默认为 30MB/s。当设置为零时auto_slowdown_write
才会生效。auto_slowdown_write
: 仅在--write_rate_limit
设置为零时生效。为 1 时,可能会因为 compact 太慢,导致写降速,为 0 时,对写速度不做限制,总是尽最大速度写入。在进行纯写测试时应设为0。enable_auto_compact
: 是否开启自动 compact,纯写操作时应设为 0rocksdb_memtable
: 设值该值时,必为 vector。设定时使用使用 VectorRepFactory,不设置时 RocksDB 默认使用 memtable。仅在--action=load
时有用,使写性能更佳。flush_threads
: 将 MemTable 刷新到 SST 文件的线程数,在我们的测试中设为2时性能最好,设为3、4时性能都不如设为2时。
4.2. terarkdb_run_wikipedia.sh
表示数据压测阶段(读写混合)启动脚本:
./bench_terarkdb
--action=run
--db=/database/terarkdb
--fields_num=15
--key_fields=0,1,2
--insert_data_path=/data/wikipedia.txt
--keys_data_path=/data/wikipedia_key.txt
--terocksdb_tmpdir=/tempdir
--logdir=/database/log
--write_rate_limit=10M
--flush_threads=2
--disable_wal
--num_levels=9
--index_nest_level=2
--compact_threads=2
--use_universal_compaction=1
--target_file_size_multiplier=2
--plan_config=0:90:10:0
--plan_config=1:100:0:0
--thread_plan_map=0-19:1
--thread_plan_map=20-20:0
--thread_num=21
--mysql_passwd=******
--alt_engine_name=terarkdb_run_wikipedia
重点参数说明:
thread_num
:设定run线程数量。thread_plan_map
:将左闭右闭区间的线程标记为指定标记,如--thread_plan_map=0-19:1将0到19线程标记为1,--thread_plan_map=20-20:0将20线程标记为0。plan_config
:设定2)中标记的线程的读写更新操作比例(读:写:更新),如--plan_config=1:100:0:0
将标记为1的线程的读写更新比例设为 100:0:0,--plan_config=0:90:10:0
将标记为0的线程的读写更新比例设为90:10:0。- 读写混合时,应将写速度适当降低,因为过快的写操作会影响到读操作。这时
--write_rate_limit=10M
将写速度设置为10MB/s,并仅使用一个线程来写,且该线程读写更新比列为90:10:0
。这时enable_auto_compact
需要设置为1(默认值)以开启自动compact,否则会影响读操作。
完整参数说明:选项参数options
5. 使用用户自定义的测试数据集:
数据加载阶段,修改以下参数即可:
...
--fields_num=N
--key_fields=n0,n1,n2
--load_data_path=/path/to/wikipedia.txt
...
说明:
- load_data_path 为需要加载的数据文件
- fields_num 为一行中共有多少(N)项,每项之间使用 \t 分割
- key_fields 使用逗号(,)分割的数字列表,表示使用每行中的第 n0、n1、n2 项的组合作为 key,索引从 0 开始
数据压测阶段:
...
--fields_num=15
--key_fields=0,1,2
--insert_data_path=/path/to/wikipedia.txt
--keys_data_path=/path/to/wikipedia_key.txt
...
说明:
- fields_num 和 key_fields 同上加载数据阶段
- insert_data_path 为插入操作中的插入数据的数据源文件
- keys_data_path 为读操作中使用的所有 key 的文件(不需要 shuffle)