昔、MongoDBのベンチマークをYCSBを使って取った時のメモです
YCSBとは
YCSB(Yahcoo Cloud Serving Benchmark)とは、ざっくり言うとYahoo!が作っている
NoSQL向けのベンチマークツールです。
YCSBプロジェクトGitレポ
YCSB Wiki
YCSBの導入手順
導入環境
- CentOS6.5
必要なパッケージ
Java
# 今回はjava-1.7.0-openjdkを入れました
$ yum search java
$ yum install java-1.7.0-openjdk-devel.x86_64
Maven
# 今回は、apache-maven-3.2.1を入れました
$ cd /usr/local/src/
$ wget http://www.motorlogy.com/apache/maven/maven-3/3.2.1/binaries/apache-maven-3.2.1-bin.zip
$ unzip apache-maven-3.2.1-bin.zip
$ mv apache-maven-3.2.1/ /opt/maven
$ ln -s /opt/maven/bin/mvn /usr/bin/mvn
# mvnのパス設定する(PATH=$MAVEN_HOME/bin:$PATH)
$ vim /etc/profile.d/maven.sh
#!/bin/bash
MAVEN_HOME=/opt/maven
PATH=$MAVEN_HOME/bin:$PATH
export PATH MAVEN_HOME
export CLASSPATH=.
chmod +x /etc/profile.d/maven.sh
source /etc/profile.d/maven.sh
mvnのバージョン確認(パスが通ってるのも)
$ mvn -version
YCSB
# YCSBのインストールにgitコマンドを使うので、もしなければインストールします
$ yum install git
# YCSBをgitレポからcloneしてくる
$ git clone git://github.com/brianfrankcooper/YCSB.git
# YCSBディレクトリへ移動
$ cd YCSB
# このままだとmapkeeperのビルドにコケるので、pom.xmlを編集する
# 編集する前にバックアップとっておく
$ cp pom.xml pom.xml.bk
# 下記の2行をコメントアウトしておく
vim pom.xml
<!--<mapkeeper.version>1.0</mapkeeper.version>-->
<!--<module>mapkeeper</module>-->
$ mvn clean package
簡単な使い方
YCSBコマンドは、ヘルプで確認出来ます
$ cd YCSB
$ ./bin/ycsb -h
ベンチマーク取る前の準備
YCSBの設定ファイルを編集する
$ cd YCSB
$ vim workloads/workloada
簡単な設定項目
項目 | 設定内容 |
---|---|
recordcount | ロードフェーズで挿入するデータのレコード数 |
operationcount | トランザクションフェーズで実行されるクエリの回数 |
workload | workloadを実行するクラス |
fieldcount | 1レコードあたりのフィールド数 |
fieldlength | 各フィールドのサイズ |
readallfileds | レコード内の全フィールドを読むのか(true)、1つだけにするか(false) |
readproportion | 全operationに対する読込の割合 |
updateproportion | 全operationに対する更新の割合 |
insertproportion | 全operationに対する挿入の割合 |
scanproportion | 全operationに対するスキャンの割合 |
readmodifywriteproportion | 全operationに対する読込、修正、更新の割合 |
requestdistribution | リクエスト分布方式、uniform、zipfian、latestから選択 |
maxscanlength | スキャンする際の最大レコード数 |
scanlengthdistribution | スキャンするためのレコード数と各スキャンでのリクエスト分布方式 |
insertorder | データ挿入する順序。キー順(ordered)かハッシュ順(hashed) |
ベンチ実行
今回はmongodbで行った時のコマンドを載せてます。
mongodbとなっている部分はそれぞれredisなどベンチとりたいDBに変えてください
# コレクションの作成
$ ./bin/ycsb load mongodb -s -P workloads/workloada
# ベンチマーク実行
$ ./bin/ycsb run mongodb -s -P workloads/workloada
おまけ
今回は、自分はMongoDBのベンチマーク取るのに使ったので、おまけにその時に使ったコマンドも
メモとして書いておきました。(port番号は、よしなに変更して下さい)
# データベース(ycsb)のusertable内のコレクション中身を確認する
$ echo 'db.usertable.findOne()' | mongo localhost:27017/ycsb
# データベース(ycsb)のusertable内のコレクション数を数える
$ echo 'db.usertable.count()' | mongo localhost:27017/ycsb
# ドキュメントサイズの確認
$ echo 'Object.bsonsize(db.usertable.findOne())' | mongo localhost:27017/ycsb
# コレクションの中身を空にする
$ echo 'db.usertable.remove()' | mongo localhost:27017/ycsb