brew install mongodb mkdir -p ~/dev/mongo/data # 起動 mongod --dbpath=~/dev/mongo/data # クライアント起動 mongo
■ クライアントでいくつかのクエリを実行
db.UserReport.insert({
name: 'ruffy',
pt: 1000,
crystal: {
big: 0,
small: 300
},
});
db.UserReport.insert({
name: 'zoro',
pt: 2000,
crystal: {
big: 45,
small: 600
},
});
db.UserReport.insert({
name: 'nami',
pt: 3000,
crystal: {
big: 40,
small: 400
},
});
db.UserReport.insert({
name: 'sanji',
pt: 4000,
crystal: {
big: 20,
small: 100
},
});
db.UserReport.insert({
name: 'usopp',
pt: 5000,
crystal: {
big: 30,
small: 0
},
});
// 全件取得
db.UserReport.find()
// where pt = 1000
db.UserReport.find({pt: 1000})
// 多次元(組み込みobject)の値で検索
db.UserReport.find({"crystal.small": 100})
db.UserReport.find({"crystal.small": {$lt: 300}}).sort({pt: -1})
// 全件削除
db.UserReport.remove()
やっぱ運用の評判は悪くても、mongoがいいねヽ(・∀・)ノ■クエリはこちらを参考に。
クエリー - Docs-Japanese - 10gen Confluence
■Mongoのベンチマークとってみた。
・gem
sudo gem install mongo bson bson_ext
・ソース
#!/usr/bin/env ruby
require 'rubygems'
require 'mongo'
require 'benchmark'
# ---------------------------------------
# Insert / Select 性能
# ---------------------------------------
count = 100000
p 'count:' + count.to_s
# ---------------------------------------
# mongodb
m = Mongo::Connection.new('localhost', 27017)
db = m.db('testdb')
row = {
:user_id => 0,
:name => 'name0',
:created_at => Time.now.to_i
}
Benchmark.bm { |rep|
rep.report("mongodb insert ") {
for num in 1..count
db = m.db('testdb')
name = 'name' + num.to_s
row[:user_id] = num
row[:name] = name
db['user'].insert(row)
end
}
}
Benchmark.bm { |rep|
rep.report("mongodb select") {
for num in 1..count
id = rand(count).to_i + 1
db['user'].find({:user_id => id})
end
}
}
・結果
mongod --version
db version v2.0.4, pdfile version 4.5
# MongoDB
"count:100000"
user system total real
mongodb insert 13.430000 1.030000 14.460000 ( 14.457051)
user system total real
mongodb select 4.680000 0.070000 4.750000 ( 4.768458)
# 過去の結果
# MySQLはInnoDB
"count:100000"
user system total real
mysql(o/r) insert 74.320000 5.670000 79.990000 (110.039184)
user system total real
mysql(o/r) select 50.610000 2.650000 53.260000 ( 65.465168)
user system total real
mysql(sql) insert 4.430000 1.530000 5.960000 ( 29.590552)
user system total real
mysql(sql) select 5.470000 1.780000 7.250000 ( 13.550391)
user system total real
cassandra insert 47.180000 3.140000 50.320000 ( 61.347904)
user system total real
cassandra select 69.150000 3.470000 72.620000 (111.568860)
user system total real
memcache insert 14.930000 2.280000 17.210000 ( 17.935214)
user system total real
memcache select 16.710000 2.080000 18.790000 ( 19.264883)
user system total real
handlersocket insert 1.430000 1.510000 2.940000 ( 26.721995)
user system total real
handlersocket select 1.320000 1.520000 2.840000 ( 7.867557)
# MySQLはSpider
"count:100000"
user system total real
mysql(o/r) insert 101.200000 7.280000 108.480000 (341.227877)
user system total real
mysql(o/r) select 71.910000 3.450000 75.360000 (294.436478)
user system total real
mysql(sql) insert 9.000000 2.600000 11.600000 (235.837247)
user system total real
mysql(sql) select 8.750000 2.700000 11.450000 (245.967628)
# 前提として、1台のmacで行っているため、スケールアウトのメリットを享受できていません。
# そのため、Cassandra やhbaseでは期待する効果が出ていません!!
■ その他のベンチマーク詳細
Macのsandboxを使ってspiderを動かしてみたメモ
MacのMySQLでHandlerSocketのベンチマークをとった
※すべてMac1台で行っているので、適切にスケールの効果が見られないものもあります。Spiderとかね。
0 件のコメント:
コメントを投稿