YCSB初探:测试redis

编程入门 行业动态 更新时间:2024-10-23 01:46:19

YCSB初探:<a href=https://www.elefans.com/category/jswz/34/1771117.html style=测试redis"/>

YCSB初探:测试redis

YCSB初探:测试redis

  • 1.YCSB简介
  • 2.安装、运行YCSB
  • 3.安装、运行redis
  • 4.测试Redis 2.6.16
    • 4.1 load性能
    • 4.2 run性能

1.YCSB简介

YCSB的全称是Yahoo! Cloud Serving Benchmark,这是一个用于测试cloud serving/NoSQL/Key-Value Store的benchmark。论文发表在SoCC’10,代码开源。有很多出色的工作(包括SILT@SOSP’11,HyperDex@SIGCOMM’12)使用YCSB进行测试。最近接触了Key-Value Store的研究领域,因此学习一些如何使用YCSB。

随着cloud serving的流行,传统数据库不能满足Avalability、Scalabilty等要求,简化了功能(表连接等)、一致性(事务处理)的NoSQL数据库开始流行。这类数据库数量很多,各有tradeoff(read and write,latency and durability,sync and async等),开发人员和用户很难根据应用的特点选择合适的解决方案。YCSB的目的是提供一个公平的舞台。

image

上图是YCSB的结构,可以看成是一个数据库客户端。暗色的模块是可以替换的,Workload Executor是产生应用负载的,DB Interface Layer是将特定数据库的API转为YCSB的API,用户可以自定义负载和数据库。目前YCSB自带了6种负载(workloads/目录下),其中五种如下表。用户可以自定义操作(read、update、insert和scan)的比例,以及选择操作目标记录的分布:Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)。image

YCSB目前支持多种数据库,如:

PNUTS
BigTable
HBase
Hypertable
Azure
Cassandra
CouchDB
Voldemort
MongoDb
Infinispan
Dynomite
Redis
GemFire
GigaSpaces XAP
DynamoDB
用户可以用任意负载测试任意数据库。YCSB有很好的扩展性,只要按要求实现DB抽象类,就可以添加新的数据库支持。

2.安装、运行YCSB

YCSB可以从github上下载,releases/0.1.4似乎存在问题,GemFire模块无法通过。推荐直接用master。使用前需要安装maven,然后用mvn clean package下载依赖包。使用bin/ycsb就可以运行了。直接运行会输出帮助信息,命令的格式是:

bin/ycsb [load|run] dbname –P path/to/workloadfile –p key=value

用户首先需要用load初始化数据库,然后用run运行负载。dbname指定了目标数据库。-P指定负载文件的位置。-p用来设置一些参数,比如数据库的ip和port。当然,在运行YCSB之前,目标数据库必须是开启的。测试完成后,YCSB会打印平均/最小/最大延迟等信息。

3.安装、运行redis

为了入门,选择了比较简单的redis。redis是开源的内存数据库,很容易下载源码,编译也很直接。redis自带了服务器和客户端,使用src/redis-server可以运行服务器,默认端口是6379,redis.conf有很多配置选项。可以用src/redis-cli测试一下服务器是否正常,-h指定服务器ip,redis提供了较多的命令, 比如set、put、append、dbsize等。

注意redis需要设置vm.overcommit_memory=1,如果该值为0,可能会在记录数太多时出错(显示无法分配内存)。

sysctl vm.overcommit_memory=1

记录数过多时(16GB内存 VS 千万级以上),客户端经常会出现timeout。YCSB用的是jedis客户端,默认的超时是2秒,可以修改RedisClient.java:48行为

jedis = new Jedis(host, port, 1000000);

第三个参数是timeout,单位为毫秒。

4.测试Redis 2.6.16

我使用了两台服务器进行测试,一台16GB内存的服务器跑redis,一台跑YCSB,之间是校园网。选择了负载workloada,load会首先插入一些记录,每条记录1KB,然后在此基础上运行负载,read和update各占50%,Zipfian分布。运行

bin/ycsb load redis –P workloads/workloada –p redis.host=192.168.1.64

bin/ycsb run redis –P workloads/workloada –p redis.host=192.168.1.64

开始测试。我测试了10k、100k、1m,千万级的负载必须修改jedis的timeout才可能运行。

4.1 load性能

load阶段全是插入操作,吞吐率大约是500 ops/sec。

记录数 10k 100k 1m
Avg. latency(us) 1858.497 1766.45717 1782.49293
Min latency(us) 1707 1558 1525
Max latency(us) 8957 1558 249603
95th percentile latencey(ms) 1 1 1
95th percentile latency(ms) 2 1 2
run time(ms) 18863.0 177490.0 1788968.0

4.2 run性能

run阶段有50%查询和50%更新操作,吞吐率大约是1000 opes/sec。

总操作数 10k 100k 1m
Avg. read latency(us) 1272.75 1240.58 1232.44
Min read latency(us) 1132 1057 1052
Max read latency(us) 19177 16838 217141
95th percentile read latencey(ms) 1 1 1
95th percentile read latency(ms) 1 1 1
Avg. update latency(us) 696.97 676.19 672.72
Min update latency(us) 570 506 448
Max update latency(us) 1070 6968 50767
95th percentile update latencey(ms) 0 0 0
95th percentile update latencey(ms) 0 0 0
overall run time(ms) 10240.0 97017.0 959973.0
可以发现几个规律:

  1. 三种操作的延迟关系是:INSERT>READ>UPDATE;

  2. 延迟并不会随着记录/操作数增加而增加;

  3. Redis的问题不是性能,而是受限于内存大小。

转自:

更多推荐

YCSB初探:测试redis

本文发布于:2024-03-06 07:32:40,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1714735.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:测试   YCSB   redis

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!