YCSB环境搭建与新数据库测试的详细指导

写在文章前。由于首次接触YCSB等测试架构,所以在搭建环境的过程中遇到了大量的问题,也通过解读源码等方法逐个解决。国内外的资料对相关测试也就是点到为止,并没有很好的指导作用。所以希望本文能为后人的搭建提供更好的帮助。

RocksDB搭建总结

从mac虚拟机上迁移到Windows上,RocksDB环境又重装了一遍,我把装机过程总结如下(本次安装使用了ubuntu16.04的server 更轻量级):

这里大量参考了https://www.jianshu.com/p/f233528c8303在此表示感谢

  • 首先安装java环境(这个很简单就不多说了)

  • 然后安装g++:这个默认会安装最新环境,所以ok

apt-get install g++
  • 下面装依赖环境
apt-get install build-essential
apt-get install libsnappy-dev zlib1g-dev libbz2-dev libgflags-dev
  • 后面在本地的某个文件夹下下载rocksdb
git clone https://github.com/facebook/rocksdb.git
image.png
  • 编译静态库,release mode,获得librocksdb.a
make static_lib
  • 编译动态库,获得librocksdb.so,release mode,获得lbrocksdb.so
make shared_lib
  • 此时我们需要将.so文件放到属于它的位置,方便后续编译

于是我在文件夹中找到属于.so文件的路径

image.png
cp -r include/ /usr/include

cp librocksdb.so.6.1.0 /usr/lib/x86_64-linux-gnu
ln -s /usr/lib/x86_64-linux-gnu/librocksdb.so.6.1.0 /usr/lib/x86_64-linux-gnu/librocksdb.so.6
ln -s /usr/lib/x86_64-linux-gnu/librocksdb.so.6.1.0 /usr/lib/x86_64-linux-gnu/librocksdb.so

ld config

这样就ok。

YCSB搭建总结

这里的YCSB搭建总体上来说不是简单的使用其自带库,而是将自己DIY的数据库放入到框架中。然而这个过程非常耗时耗力,所以我将其过程进行一些总结。(全是泪,全是坑)

首先是搭建问题。这个YCSB源码包比较大,所以直接下载会非常耗时,有可能会中断,所以我采用了如下方法:

> git clone https://github.com/brianfrankcooper/YCSB.git
> git checkout 0.15.0

使用git还是可以满足我们的要求的。得到YCSB目录,下图为目录中的具体内容。

image.png

之后我们可以对RocksDb进行测试。

此时我们先不用纠结YCSB的具体是如何实现的,我们先学会如何使用。

  • 首先我们需要对RocksDB进行编译操作:
mvn -pl com.yahoo.ycsb:rocksdb-binding -am clean package

此时我们会得到命令行的反馈:

image.png

说明我们对RocksDB的maven工程编译成功,这个时候我们会发现在rocksdb的目录下多了target目录。这个目录里面放了我们所需的****.jar等后期测试所必须的文件。

image.png
  • 之后我们就可以运行我们的测试指令了。
./bin/ycsb load rocksdb -s -P workloads/workloadc -p rocksdb.dir=/tmp/ycsb-rocksdb-test
image.png

这里我们输入上面的指令,这里稍微进行一些介绍,load指装载指令,即将测试所需的data装入到数据库中(这里特指insert操作),而我们这里使用了workloadb类型的工作(这里有A到F六种操作,具体的代表网上有很多说明),而-p可以显示修改YCSB内置的默认配置。而后面的-p代表rocksdb的工作目录(就是那些log日志等等文件存放的位置); -s代表将结果打印出来,也可以使用s > logs/workloadB/transaction-workloadAA.log这种来将结果保存到特定文件中。

之后我们得到如下:

image.png

根据图我们能够看到对于c工作量来说,我们插入了1000条记录并且得到了测试时间、吞吐量等等。

之后执行

/bin/ycsb run rocksdb -s -P workloads/workloadc -p rocksdb.dir=/tmp/ycsb-rocksdb-test

我们对载入的数据进行运行操作,即进行查询。得到:

image.png

由于C是只读型,100% Reads。所以我们在run的时候只可以看到read的效率。得到了吞吐量等结果。

上述内容就是测试的大致过程。其中我在翻看源码的时候还发现了在workload文件中可以对配置文件进行修改(在core文件中也有一些可调整的配置文件),以定制测试数据内容。

image.png
image.png

配置DIY数据库进行测试

上面介绍了如何使用YCSB来进行测试工作,而我们大多数时候要将自己设计的存储系统放置于此进行测试。此时我们需要修改各种配置文件并将自己的数据库完美的放置于此系统下。

首先,我们要了解YCSB的工程结构。

在我查阅了资料并对结构了解后,我发现YCSB目录下拥有很多数据库的子目录。

image.png

而这些子目录对应的是一个可用数据库,比如我们上面进行测试的rocksdb。

我们就要类比这种已有数据库来搭建自己的数据库。

我们进入rocksdb来分析其结构。


image.png
image.png

典型的maven工程。在根目录下有pom文件,并且在src中有main于test。而test我们不做处理,所以我们要创建如下文件夹与文件:

  • pom文件(根目录)
image.png
  • 关键java程序(里面包含db文件接口的扩充)已经package-info.java(这个可以参考rocksdb中写的,就一句话)
image.png

PS:这里需要注意,这些文件夹也需要我们手动创建(确实层数比较多,但是没办法。。。)。

而这里的其他.java文件是KtOutCrypto.java文件所需要的依赖文件,所以这里可以忽略。

之后我们就需要具体来说一下文件所需要包含的内容了。

  • 首先是KtOutCrypto.java文件。该文件中需要重定义如下接口:
public Status insert(String table, String key, Map<String, ByteIterator> values)

public void init() throws DBException

public Status read(String table, String key, Set<String> fields, Map<String, ByteIterator> result)

public  Status delete(String table, String key)

public void cleanup() throws DBException

public  Status scan(String table, String startkey, int recordcount,  Set<String> fields, Vector<HashMap<String, ByteIterator>> result)

public  Status update(String table, String key, Map<String, ByteIterator> values)

当这些接口定义完成后,我们需要修改根目录的pom文件。

网上许多教程都没有类似的修改方法,所以我将这些小的点都写详细一些:

image.png

由于我的项目并没有依赖太多库,所以简单的写一些就可以。

  • 之后就是对YCSB的配置进行修改,并添加进我们的数据库。

首先是在YCSB的module中修改pom文件,添加我们的ktstore文件。

image.png

然后对YCSB的bin目录下的bindings.properties文件进行修改,添加进入我们的项目名称:

image.png
image.png

而这个路径就是我们的核心java函数所在的位置。

接着对ycsb进行修改:

image.png

在database中添加我们的路径,用于使系统找到我们的关键函数:

image.png

至此,我们的环境配置修改已经完成。

下面我们要对我们的DIY数据库进行maven建立。

mvn -pl com.yahoo.ycsb:xxxxx-binding -am package

(这里xxxxx为DIY数据库的名称,比如rocksdb)

然后我们看到我们的工程成功建立:如果java文件有错误或者其他地方存在问题,此时就会报出大量的错误。

image.png

在这里大家需要注意的是,maven工程拥有一个很严谨的java编译过程,严谨是指你java文件中的空格数量都会给你纠正,所以在写java代码的时候一定要注意,否则在这个阶段你需要对那些格式问题进行大量的修改才能通过编译。

此时我们就得到了target新目录,并在里面看到了.jar文件。

image.png

之后我们就可以类比上面的rocksdb来进行load、run的操作了。

在这个环境搭建的过程中由于国内外的教程不全,所以我进行了大量的尝试与源码分析。所以这个周期花费的时间非常长,我希望这篇指导文章能够帮助读者更快的上手测试过程。希望为计算机事业做出一些小小的贡献!

本文为原创,转载请标记出处:[https://www.jianshu.com/p/675947cdcce4](https://www.jianshu.com/p/675947cdcce4)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,122评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,070评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,491评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,636评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,676评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,541评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,292评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,211评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,655评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,846评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,965评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,684评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,295评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,894评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,012评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,126评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,914评论 2 355