ycsb jsonb 対応版 を作ってmongodb と 比較してみた
Post on 22-Jul-2015
303 Views
Preview:
TRANSCRIPT
JPUG 合宿 in 熱海(2015-03-22)
YCSB JSONB 対応版を作って MongoDB と
比較してみたぬこ@横浜 (@nuko_yokohama)
公開用修正版
目次
YCSB とはYCSB JSONB 対応版
MongoDB 比較
YCSB とは
Yahoo! Cloud Service Benchmark の略
いろんな NoSQL 系に対応したベンチマーク
https://github.com/brianfrankcooper/YCSB
YCSB とは対応している DB
PNUTS 、 BigTable 、 HBase 、Hypertable 、 Azure 、 Cassandra 、
CouchDB 、 Voldemort 、 MongoDb 、OrientDB 、 Infinispan 、 Dynomite 、
Redis 、 GemFire 、 GigaSpaces XAP 、 DynamoDB 、 JDBC
YCSB とは
Java で実装されている。(ビルドは Maven を使用)
前ページ以外の DB に対応するドライバを自分で作成も可能
YCSB とは
6 種類のコア・ワークロード今回は、以下の 3 つを使う
load ( 挿入のみ )workload-a ( 更新 / 参照 )workload-c ( 参照のみ )
YCSB JSONB 対応版
PostgreSQL JSONB 対応のドライバはないので自作する
ベースは JDBC 版
YCSB JSONB 対応版
改造方針JDBC 版の SQL を JSONB を使うモデルに合わせて修正
YCSB JSONB 対応版JDBC 版テーブル定義CREATE TABLE usertable (ycsb_key text, field1 text, field2 text, field3 text, field4 text, field5 text, field6 text, field7 text, field8 text, field9 text, field10 text);CREATE INDEX ycsb_key_idx ON usertable (ycsb_key);
JSONB 版テーブル定義CREATE TABLE usertable(data jsonb);CREATE INDEX ycsb_pk_idx ON usertable USING btree ((data->'YCSB_KEY'));
YCSB JSONB 対応版JDBC 版挿入 SQLINSERT INTO usertable VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
JSONB 版挿入 SQLINSERT INTO usertable VALUES(json_build_object('YCSB_KEY', ?, 'FIELD1', ?, 'FIELD2', ?, 'FIELD3', ?, 'FIELD4', ?, 'FIELD5', ?, 'FIELD6', ?, 'FIELD7', ?, 'FIELD8', ?, 'FIELD9', ?, 'FIILD10', ?)::jsonb)
9.5-develだとjsonb_build_object()があるので、 JSONBへのキャストは不要
YCSB JSONB 対応版JDBC 版更新 SQLUPDATE usertable SET FIELD1 = ? WHERE YCSB_KEY = ?
JSONB 版更新 SQLUPDATE usertable SET data = json_build_object('YCSB_KEY', data->>'YCSB_KEY', 'FIELD1', ?, 'FIELD2', data->>'FIELD2', 'FIELD3', data->>'FIELD03', 'FIELD4', data->>'FIELD4', 'FIELD5', data->>'FIELD5', 'FIELD6', data->>'FIELD6', 'FIELD7', data->>'FIELD7', 'FIELD8', data->>'FIELD8', 'FIELD9', data->>'FIELD9', 'FIELD10', data->>'FIELD10')::jsonbWHERE data->>'YCSB_KEY' = ?
9.5-devel だとjsonb_build_object() があるので、 JSONB への
キャストは不要
見ただけでうんざりしますよね。
YCSB JSONB 対応版JDBC 版参照 SQLSELECT * FROM usertableWHERE YCSB_KEY = ?
JSONB 版参照 SQLSELECT * FROM usertableWHERE data->>'YCSB_KEY' = ?
MongoDB 比較測定内容
ロード (load)⇒10 万件更新と参照 (workload-a )参照のみ( workload-c )⇒ それぞれ 10 万回実行
MongoDB 比較
測定対象
PostgreSQL 9.4.1MongoDB 3.0.0
MongoDB 比較測定環境
Let's note SX4/Windows8.1VMWare 6/CentOS 7
VM メモリ 4GB
MongoDB 比較測定環境
PostgreSQL の環境設定はcheckpoint_segments=30
に変更したくらい。MongoDB は特に設定なし。
MongoDB 比較ロード処理
MongoDB 比較更新と参照
MongoDB 比較更新と参照
MongoDB 比較まとめ
今回は、一言でいうと測定環境がPostgreSQL + JSONB に
かなり不利かも( CPU 数が少ないので並列性の優位がでない)
でも、更新はやっぱり遅いね・・・参照はほぼ互角かな。
MongoDB 比較
課題・ YCSB 対応版の修正方法がやっつけすぎ。
まだ公開できるレベルじゃない。・今回は直接 JDBC 版直したので、
きちんと JSONB 版として作成しなおしたい。・プロパティファイル読み込みがうまくいかない・・・
⇒ 母体から?・ INSERT の SQL と UPDATE の SQL は
本当にこれでいいのだろうか・・・
MongoDB 比較課題
・ CPU リソース等きちんと確認せねば。⇒JSONB が CPU 結構使う疑惑
・コア数が多いマシンで試したい。⇒PostgreSQL が有利になるはず?
⇒AWS EC2 使うか・・・・シャード環境での確認
⇒MongoDB シャードとの比較⇒PostgreSQL は? pgpool? pg_shard?
top related