YCSB测试memcached数据库

发布时间 2023-10-26 20:24:48作者: summitsoul

YCSB测试memcached数据库

前言

做研究的时候需要测试memcached的数据库的性能参数,学长给推荐了YCSB测试框架,已经有很多文章详细的介绍了YCSB框架的各个方面了,我就不再赘述了。上网找了一圈没有找到一个中文版的YCSB测试memcached的教程,在配置完成后打算写一篇教程来讲解一下步骤。重要说明:我的测试平台是wsl。

前置准备

python版本

首先一个需要注意到的问题就是YCSB是基于python2的,我们现在的环境已经很多都是python3了,所以这是第一个需要注意的。如果知晓如何管理python版本的可以跳过此章节。我使用了Anaconda来管理python版本。anaconda的安装教程已经有许多了,我在这里就不再赘述。
https://zhuanlan.zhihu.com/p/166102942

这篇教程已经较为说明了如何安装anaconda,可以进行一下借鉴。
接下来我们可以创建一个名为YCSB的python版本,我在这里建议是2.7比较好。创建新环境的代码如下:

conda create --name YCSB python=2.7

这样的话我们就成功的创建了一个适用于YCSB的python环境,我们换为这个环境下。

conda activate YCSB

这样的话就可以启动适合YCSB的python环境了。
这时候在命令行中输入python,会出现以下的提示。

恭喜,第一步成功了。

maven & java

java这个我就不说了,感觉应该都已经有了。主要说一下maven。
其实也就是一行指令的事。

sudo apt install maven

安装完成后,可以输入下列指令来看看有没有安装成功。

mvn -v


有如图的显示说明已经ok了。

memcached

这个就是把数据库给安装上去了,没什么太多要说的,已经熟悉的话可以跳过。也简单说一下如何启动以及相关操作。

sudo apt install memcached

还是sudo一下,memcached就可以下载到你的系统当中。这时候我们输入如下命令就可以查看我们可以对memcached进行什么操作。

sudo /etc/init.d/memcached


我们可以看到我们可以进行开启、停止、查询状态等操作。只要在这后面加上相应的字符即可。

如图所示,我们可以看到已经成功的将memcached数据库启动,默认的话,其端口为11211。
前置工作已经全部完成了,接下来就是正式的进行YCSB配置环节。

YCSB配置

首先第一步要做的就是从github上将YCSB给pull下来,并进入到目录当中,你需要找到一个合适的目录中去放置YCSB文件夹,只需要如下操作即可。

git clone http://github.com/brianfrankcooper/YCSB.git
cd YCSB

你会进入到目录当中。
然后执行下面的命令来进行maven的编译。

mvn -pl site.ycsb:memcached-binding -am clean package


成功后会得到这样的一个编译成功的build success。
接下来就可以对memcached进行性能测试了。YSCB本身给我们提供了一些测试集,存储在workloads这个文件夹之中。

里面的数据格式是如下图所示的。

如果想要做自己的数据,也可以直接在这个文件夹中创建新的文件数据文件,那么他的一个模板配置参数如下。

你可以根据自己的需求来进行相应文件的编写。
接下来我们首先需要使用load指令,将测试所需的data装入到数据库中。

./bin/ycsb load memcached -s -P workloads/workloadc -p "memcached.hosts=127.0.0.1"

如果想要将输出结果保存的话,可以在末尾加上 > outputLoad.txt。如果你的memcached的hosts不是127.0.0.1:11211,可以换成你所设置的端口。
这样的话,我们可以得到一个这样的输出。

接着我们使用run指令,将载入的数据进行测试。

我们可以看到我们想要测试的性能会在这里面有所展示。

Bonus

实际上,我看官方文档中并不需要有-p "memcached.hosts=127.0.0.1"这一段代码,但是我如果不加的话就会报错。我认为这可能会跟/memcached/conf/memcached.properties这个文件的内容有关,这个文件的内容是与我们在执行测试的时候相关的配置,但是我在里面添加了hosts的设置并进行重新的编译后,也是无法进行正常的运行的。我也已经在github仓库中发起了issue,但是目前还没有回复我,希望有大佬可以解决一下一个问题。