YCSB080安装与初步使用.docx
《YCSB080安装与初步使用.docx》由会员分享,可在线阅读,更多相关《YCSB080安装与初步使用.docx(19页珍藏版)》请在冰豆网上搜索。
YCSB080安装与初步使用
YCSB安装与初步使用
1什么是YCSB
1.1简介
YCSB英文全称:
Yahoo!
CloudServingBenchmark。
是Yahoo公司的一个用来对云服务(cloudserving)/NoSQL/Key-ValueStore进行基础测试的工具,代码开源。
目标是促进新一代云数据服务系统的性能比较。
1.2YCSB客户端架构
随着cloudserving的流行,传统数据库不能满足Avalability、Scalabilty等要求,简化了功能(表连接等)、一致性(事务处理)的NoSQL数据库开始流行。
这类数据库数量很多,各有tradeoff(readandwrite,latencyanddurability,syncandasync等),开发人员和用户很难根据应用的特点选择合适的解决方案。
YCSB的目的是提供一个公平的舞台。
上图是YCSB的结构,可以看成是一个数据库客户端。
暗色的模块是可以替换的,WorkloadExecutor是产生应用负载的,DBInterfaceLayer是将特定数据库的API转为YCSB的API,用户可以自定义负载和数据库。
目前YCSB自带了6种负载(workloads/目录下),其中五种如下表。
用户可以自定义操作(read、update、insert和scan)的比例,以及选择操作目标记录的分布:
Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)。
YCSB目前支持多种数据库,如:
HBase、Hypertable、Cassandra、Couchbase、Voldemort、MongoDB、OrientDB、Infinispan、Redis、GemFire、DynamoDB、Tarantool、Memcached等。
用户可以用任意负载测试任意数据库。
YCSB有很好的扩展性,只要按要求实现DB抽象类,就可以添加新的数据库支持。
1.3当前版本
当前版本:
YCSB0.8.0,
发布时间:
Apr13,2021
源代码地址:
当前版本对各种数据库的测试情况(TestedDatabases):
Testedsupport
Thefollowingdatastorebindingshavebeenverifiedasworkingasofthisrelease:
∙ApacheAccumulo1.6.0(viaaccumulobinding).
∙ApacheCassandra2.5.5(viacassandra2-cqlbinding).
∙Couchbase4.1(viacouchbasebinding).
∙DynamoDBusingAWSSDK1.10.48(viadynamodbbinding).
∙Elasticsearch2.0.2,2.1.2,2.2.2,2.3.1(viaelasticsearchbinding).
∙ApacheGeode(incubating)1.0.0-incubating.M1(viageodebinding).
∙ApacheHBase1.0.0(CDH5.5.2)(viahbase10bindings).
∙MongoDB1.8.5(asynconly),2.0.9,2.2.7,2.4.14,2.6.12,3.0.11,3.2.4(viamongodbandmongodb-asyncbindings).
∙AmazonS3(vias3binding).
∙Tarantool1.6.6-249,1.6.8,1.7-alpha(viatarantoolbinding).
Supported
∙Aerospike(viaaerospikebinding).
∙ApacheHBase0.9.8(viahbase098binding).
∙ApacheKudu(incubating)(viakudubinding).
∙ApacheSolr5.4.0(viasolrbinding).
∙GoogleCloudDatastore(viagoogledatastorebinding).
∙JDBConMySQL5.1.73(viajdbcbinding).
∙Memcached1.4.4(viamemcachedbinding).
Untested
∙ApacheCassandraversionspriorto2.0(viacassandra-7,cassandra-8,cassandra-10bindings).
∙ApacheCassandraversions3+(viacassandra2-cqlbindings).
∙ApacheHBase(viahbase094binding).
∙HyperTable(viahypertablebinding).
∙Infinispan(viainfinispanandinfinispan-csbindings)
∙Mapkeeper(viamapkeeperbinding)
∙NoSQLDB(vianosqldbbinding)
∙OrientDB2.1.2(viaorientdbbinding).
2YCSB安装
YCSB的编译和安装依赖Maven、JRE、和Python。
2.1Maven下载与安装
1、Maven官网:
官网:
http:
//maven.apache.org/
最新版本:
2021-11-18,Maven3.3.9
下载地址:
2、下载及安装
1)进入opt目录,创建/opt/modules/目录
#cd/opt
#mkdirmodules
#cdmodules/
2)下载Maven,并解压
#wget
#unzipapache-maven-3.3.9-bin.zip
3)追加路径到/etc/profile环境变量中
#vi/etc/profile
exportMAVEN_HOME=/opt/modules/apache-maven-3.3.9
PATH=${MAVEN_HOME}/bin:
$PATH
exportPATH
使环境变量生效
#source/etc/profile
4)使用mvn-version验证安装
安装成功。
5)JAVA安装
Maven需要调用JRE,如果没有安装JDK,需要单独安装JDK。
2.2YCSB下载与安装
源代码地址:
1)下载源代码并解压缩
进入/usr/local
#cd/usr/local
#wget
#unzipmaster
解压后的YCSB-master目录:
2)编译
YCSB源代码编译有两种方式
方式一:
全部编译命令:
mvncleanpackage
说明:
编译全部数据库,要下载很多依赖包,时间要很久,不建议采用。
方式二:
只编译一个数据库,如编译mongodb的命令为:
mvn-plcom.yahoo.ycsb:
mongodb-binding-amcleanpackage
#cdYCSB-master/
#mvn-plcom.yahoo.ycsb:
mongodb-binding-amcleanpackage
下载无数依赖包之后,出现如下提示,说明YCSB编译成功。
如果编译过程意外中止,可以重新运行编译命令。
我使用mongodb验证,所以只编译了YCSB的mongodb部分,也用了很长时间,中断了几次。
3)其他问题
问题一:
缺少argparse包。
运行YCSB,如果报错如下:
[ERROR]argparsenotfound.Tryinstallingitvia"pip".
说明:
报错提示缺少argparse包,让通过PIP方式下载argparse。
argparse是python用于解析命令行参数和选项的标准模块,用于代替已经过时的optparse模块。
如果服务器已经安装了PIP,可以使用命令pipinstallargparse下载;如果没有安装pip,有easy_install,可以使用命令easy_installargparse下载。
安装后问题解决。
3YCSB初步使用
3.1YCSB运行命令
命令的格式是:
bin/ycsb[load|run]dbname–Ppath/to/workloadfile–pkey=value
具体例子如:
./bin/ycsbloadmongodb-threads100-Pworkloads/workloada
./bin/ycsbrunmongodb-threads100-Pworkloads/workloada
>bin/ycsbloadredis-s-Pworkloads/workloada-p"redis.host=127.0.0.1"-p"redis.port=6379"
>bin/ycsbrunredis-s-Pworkloads/workloada-p"redis.host=127.0.0.1"-p"redis.port=6379"-threads128-p"operationcount=10000"-p"measurementtype=timeseries"-p"timeseries.granularity=5000"
说明:
用户首先需要用load初始化数据库,然后用run运行负载。
dbname指定了目标数据库。
-P指定负载文件的位置。
-p用来设置一些参数,比如数据库的ip和port。
-threads是模拟的线程数。
还有一个常用的参数是-target,指的是每秒最大操作数,当一秒内到达这个阈值,线程就会休眠1毫秒。
当然,在运行YCSB之前,目标数据库必须是开启的。
测试完成后,YCSB会打印平均/最小/最大延迟等信息。
3.2Workload文件
在YCSB-master/workloads目录下有6个workload文件,主要区别如下表:
文件名
模式
各种操作比例
具体参数
workloada
Updateheavyworkload
read/updateratio:
50/50
readproportion=0.5
updateproportion=0.5
workloadb
Readmostlyworkload
read/updateratio:
95/5
readproportion=0.95
updateproportion=0.05
workloadc
Readonly
read/updateratio:
100/0
readproportion=1
updateproportion=0
workloadd
Readlatestworkload
read/update/insert
ratio:
95/0/5
readproportion=0.95
updateproportion=0
scanproportion=0
insertproportion=0.05
workloade
Shortranges
scan/insertratio:
95/5
readproportion=0
updateproportion=0
scanproportion=0.95
insertproportion=0.05
workloadf
Read-modify-write
Read/read-modify-writeratio:
50/50
readproportion=0.5
updateproportion=0
scanproportion=0
insertproportion=0
readmodifywriteproportion=0.5
Workload文件部分参数意思如下面注释:
mongodb.url=mongodb:
//localhost:
27017#待测试mongo实例的数据库地址
mongodb.database=ycsb#测试时使用的数据库名称
mongodb.writeConcern=normal#写入安全性为常规
recordcount=10000#测试数据集的记录条数
operationcount=10000#测试过程中执行的操作总数
workload=com.yahoo.ycsb.workloads.CoreWorkload#workload实现类
readallfields=true#查询时是否读取记录的所有字段
readproportion=0.5#读操作的百分比
updateproportion=0.5#更新操作的百分比
scanproportion=0#扫描操作的百分比
insertproportion=0#插入操作的百分比
requestdistribution=zipfian#请求分布模式,包括:
Uniform(等概率随机选择记录)、Zipfian(随机选择记录,存在热纪录)和Latest(近期写入的记录是热记录)
3.3运行YCSB
1)创建自己的workload文件
#cpworkloadaworkloadyk01
#viworkloadyk01
添加如下mogodb的设置:
mongodb.url=mongodb:
//localhost:
27017
mongodb.database=ycsb
mongodb.writeConcern=normal
保存workloadyk01文件
2)运行YCSBload
#cd/usr/local/YCSB-master/
#./bin/ycsbloadmongodb-threads100-Pworkloads/workloadyk01
运行成功后显示:
说明如下:
[OVERALL],RunTime(ms),720.0//数据加载所用时间:
0.7秒
[OVERALL],Throughput(ops/sec),1388.888888888889//加载操作的吞吐量,
平均并发量每秒1388条
[TOTAL_GCs],Count,2.0
[CLEANUP],Operations,100.0//参数中的100个线程
[CLEANUP],AverageLatency(us),450.58//平均响应时间0.45ms
[CLEANUP],MinLatency(us),0.0//最小响应时间0ms
[CLEANUP],MaxLatency(us),45055.0//最大响应时间45ms
[CLEANUP],95thPercentileLatency(us),1.0
[CLEANUP],99thPercentileLatency(us),8.0
[INSERT],Operations,1000.0//执行insert操作的总数,1000
[INSERT],AverageLatency(us),29928.784//每次insert操作的平均延时
29.9ms
[INSERT],MinLatency(us),827.0//所有insert操作的最小延时,0.8ms
[INSERT],MaxLatency(us),351231.0//所有insert操作的最大延时,351ms
[INSERT],95thPercentileLatency(us),203519.0//95%的insert操作延时
在203.5ms以内
[INSERT],99thPercentileLatency(us),329983.0//99%的insert操作延时
在329.9ms以内
[INSERT],Return=OK,1000//成功返回数1000
3)运行YCSBrun
#cd/usr/local/YCSB-master/
#./bin/ycsbrunmongodb-threads100-Pworkloads/workloadyk01
运行成功后显示:
[OVERALL],RunTime(ms),720.0
[OVERALL],Throughput(ops/sec),1388.888888888889
[TOTAL_GCs],Count,2.0
[READ],Operations,514.0
[READ],AverageLatency(us),27392.836575875488
[READ],MinLatency(us),940.0
[READ],MaxLatency(us),340991.0
[READ],95thPercentileLatency(us),169087.0
[READ],99thPercentileLatency(us),272895.0
[READ],Return=OK,514
[CLEANUP],Operations,100.0
[CLEANUP],AverageLatency(us),456.31
[CLEANUP],MinLatency(us),0.0
[CLEANUP],MaxLatency(us),45631.0
[CLEANUP],95thPercentileLatency(us),1.0
[CLEANUP],99thPercentileLatency(us),9.0
[UPDATE],Operations,486.0
[UPDATE],AverageLatency(us),31491.29012345679
[UPDATE],MinLatency(us),1027.0
[UPDATE],MaxLatency(us),331775.0
[UPDATE],95thPercentileLatency(us),189183.0
[UPDATE],99thPercentileLatency(us),288767.0
[UPDATE],Return=OK,486
3.4查看MongoDB中的数据情况
打开mongoshell
#/usr/local/mongodb/mongodb-3.2.4/bin/mongo
>showdbs
local0.000GB
ycsb0.002GB
>useycsb
switchedtodbycsb
>showcollections
usertable
>db.usertable.count()
1000
>
可以看到在usertable数据集合里面有1000条数据,是YCSB插入的。
如果再次运行YCSBload,需要删除mongodb中的usertable数据集合,否则会报[INSERT-FAILED]错。
删除mongodb中的usertable数据集合语句如下:
>showdbs
local0.000GB
ycsb0.002GB
>useycsb
switchedtodbycsb
>db.dropDatabase()
{"dropped":
"ycsb","ok":
1}
>showdbs
local0.000GB
>
论大学生写作能力
写作能力是对自己所积累的信息进行选择、提取、加工、改造并将之形成为书面文字的能力。
积累是写作的基础,积累越厚实,写作就越有基础,文章就能根深叶茂开奇葩。
没有积累,胸无点墨,怎么也不会写出作文来的。
写作能力是每个大学生必须具备的能力。
从目前高校整体情况上看,大学生的写作能力较为欠缺。
一、大学生应用文写作能力的定义
那么,大学生的写作能力究竟是指什么呢?
叶圣陶先生曾经说过,“大学毕业生不一定能写小说诗歌,但是一定要写工作和生活中实用的文章,而且非写得既通顺又扎实不可。
”对于大学生的写作能力应包含什么,可能有多种理解,但从叶圣陶先生的谈话中,我认为:
大学生写作能力应包括应用写作能力和文学写作能力,而前者是必须的,后者是“不一定”要具备,能具备则更好。
众所周知,对于大学生来说,是要写毕业论文的,我认为写作论文的能力可以包含在应用写作能力之中。
大学生写作能力的体现,也往往是在撰写毕业论文中集中体现出来的。
本科毕业论文无论是对于学生个人还是对于院系和学校来说,都是十分重要的。
如何提高本科毕业论文的质量和水平,就成为教育行政部门和高校都很重视的一个重要课题。
如何提高大学生的写作能力的问题必须得到社会的广泛关注,并且提出对策去实施解决。
二、造成大学生应用文写作困境的原因:
(一)大学写作课开设结构不合理。
就目前中国多数高校的学科设置来看,除了中文专业会系统开设写作的系列课程外,其他专业的学生都只开设了普及性的《大学语文》课。
学生写作能力的提高是一项艰巨复杂的任务,而我们的课程设置仅把这一任务交给了大学语文教师,可大学语文教师既要在有限课时时间内普及相关经典名著知识,又要适度提高学生的鉴赏能力,且要教会学生写作规律并提高写作能力,任务之重实难完成。
(二)对实用写作的普遍性不重视。
“大学语文”教育已经被严重地“边缘化”。
目前对中国语文的态度淡漠,而是呈现出全民学英语的大好势头。
中小学如此,大学更是如此。
对我们的母语中国语文,在大学反而被漠视,没有相关的课程的设置,没有系统的学习实践训练。
这其实是国人的一种偏见。
应用写作有它自身的规律和方法。
一个人学问很大,会写小说、诗歌、戏剧等,但如果不晓得应用文写作的特点和方法,他就写不好应用文。
(三)部分大学生学习态度不端正。
很多非中文专业的大学生对写作的学习和训练都只是集中在《大学语文》这一门课上,大部分学生只愿意被动地接受大学语文老师所讲授的文学经典故事,而对于需要学生动手动脑去写的作文,却是尽可能应付差事,这样势必不能让大学生的写作水平有所提高。
(四)教师的实践性教学不强。
学生