はじめに
mongodbでいろいろ試したいけど結構なデータ件数ないと試せないことってありますよね。
今回はそんな時用にサンプルデータを1億件ほどつっこむスクリプトを書いてみたのでメモっておきます。
想定
つっこむログの内容ですがこんな感じを想定してみました
1.ユーザが数人いる
2.webが分散されてて数台のhostからログが来る
3.ゲームやらなんやらでポイントGET。GETしたタイミングでポイントの総計と内訳ログがinsertされる
4.内訳は、GETしたポイント + ボーナスポイント(GETしたポイント×0.05※消費税みたいな)
構造
想定するログの1レコードの構造です
{
"_id" : ObjectId("533006e0a2f90fb093680dc6"),
"info" : { "uid" : "id01", "ts" : "2014-03-24 00:00:00", "hn" : "sv2" },
"val" : { "total" : 87, "add" : [ 83, 4 ] }
}
※かんたんな説明
id…mongo
info…基本情報(uid:ユーザID、ts:日付、hn:ホスト名)
val…詳細情報(total:ポイントの累計、add:加算されたポイント内訳(付与ポイント、ボーナスポイント))
スクリプト
書いたスクリプトはこんな感じ
mongodb_script_insert_act_log_sample.js
もし件数(人数)を減らしたい場合は
3~12行のどれかを任意にコメントアウトすれば減ります
入れてみる
実行してみると、けっこーーーな時間かかりますw
マシンスペックによるとは思いますが、1億件入れるのに60分くらいかかりました。
======== マシン情報 ======== # uname -a Linux hoge.co.jp 2.6.32-431.el6.x86_64 #1 SMP Mon Dec 16 12:35:39 JST 2013 x86_64 x86_64 x86_64 GNU/Linux # cat /proc/cpuinfo| egrep "name|siblings" | head -n 2 model name : Intel(R) Xeon(R) CPU E5-2440 0 @ 2.40GHz siblings : 12 # cat /proc/meminfo | grep MemTotal MemTotal: 12144800 kB ======== つっこむ ======== # mongo sample insert_act_log_sample.js MongoDB shell version: 2.4.8 connecting to: sample -->id01 -->id02 id02:100000 ・・・省略(この間60分くらい)・・・ ======== かくにん ======== # mongo sample MongoDB shell version: 2.4.8 connecting to: sample ※約1億件はいってる >db.actlog.find().count() 105727766 > db.actlog.find().limit(5) { "_id" : ObjectId("53303e4287945ceb7c87f80e"), "info" : { "uid" : "id01", "ts" : "2014-03-24 00:00:00", "hn" : "sv3" }, "val" : { "total" : 57, "add" : [ 55, 2 ] } } { "_id" : ObjectId("53303e4287945ceb7c87f80f"), "info" : { "uid" : "id01", "ts" : "2014-03-24 00:00:00", "hn" : "sv1" }, "val" : { "total" : 107, "add" : [ 48, 2 ] } } { "_id" : ObjectId("53303e4287945ceb7c87f810"), "info" : { "uid" : "id01", "ts" : "2014-03-24 00:00:01", "hn" : "sv1" }, "val" : { "total" : 120, "add" : [ 13, 0 ] } } { "_id" : ObjectId("53303e4287945ceb7c87f811"), "info" : { "uid" : "id01", "ts" : "2014-03-24 00:00:03", "hn" : "sv1" }, "val" : { "total" : 121, "add" : [ 1, 0 ] } } { "_id" : ObjectId("53303e4287945ceb7c87f812"), "info" : { "uid" : "id01", "ts" : "2014-03-24 00:00:04", "hn" : "sv1" }, "val" : { "total" : 163, "add" : [ 40, 2 ] } }
ついでに
ついでといってはなんですが、入れてみたときの感じもメモ
ディスク容量
- データつっこみ前
# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 537G 89G 421G 18% / tmpfs 5.8G 0 5.8G 0% /dev/shm /dev/sda1 485M 39M 422M 9% /boot
- データつっこみ後
結構ディスク容量は使う感じですね
# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 537G 115G 395G 23% / tmpfs 5.8G 0 5.8G 0% /dev/shm /dev/sda1 485M 39M 422M 9% /boot
mongoのデータディレクトリ
- データつっこみ前
# ls -lh 合計 81M drwxr-sr-x 2 root wheel 4.0K 3月 24 22:29 2014 _tmp drwxr-sr-x 2 root wheel 4.0K 3月 24 23:08 2014 journal -rw------- 1 root wheel 64M 3月 19 17:45 2014 local.0 -rw------- 1 root wheel 16M 3月 19 17:45 2014 local.ns -rwxr-xr-x 1 root wheel 6 3月 19 17:45 2014 mongod.lock drwxr-sr-x 2 root wheel 4.0K 3月 24 15:44 2014 test
- データつっこみ後
2Gごとのファイルがかなりできあがってます。
81Mから27Gになってます
# ls -lh 合計 27G drwxr-sr-x 2 root wheel 4.0K 3月 24 22:29 2014 _tmp drwxr-sr-x 2 root wheel 4.0K 3月 24 20:12 2014 journal -rw------- 1 root wheel 64M 3月 19 17:45 2014 local.0 -rw------- 1 root wheel 16M 3月 19 17:45 2014 local.ns -rwxr-xr-x 1 root wheel 6 3月 19 17:45 2014 mongod.lock -rw------- 1 root wheel 64M 3月 24 22:29 2014 sample.0 -rw------- 1 root wheel 128M 3月 24 19:20 2014 sample.1 -rw------- 1 root wheel 2.0G 3月 24 19:52 2014 sample.10 -rw------- 1 root wheel 2.0G 3月 24 19:59 2014 sample.11 -rw------- 1 root wheel 2.0G 3月 24 22:30 2014 sample.12 -rw------- 1 root wheel 2.0G 3月 24 20:08 2014 sample.13 -rw------- 1 root wheel 2.0G 3月 24 20:15 2014 sample.14 -rw------- 1 root wheel 2.0G 3月 24 20:16 2014 sample.15 -rw------- 1 root wheel 2.0G 3月 24 20:15 2014 sample.16 -rw------- 1 root wheel 256M 3月 24 19:21 2014 sample.2 -rw------- 1 root wheel 512M 3月 24 19:23 2014 sample.3 -rw------- 1 root wheel 1.0G 3月 24 19:24 2014 sample.4 -rw------- 1 root wheel 2.0G 3月 24 19:28 2014 sample.5 -rw------- 1 root wheel 2.0G 3月 24 20:12 2014 sample.6 -rw------- 1 root wheel 2.0G 3月 24 19:54 2014 sample.7 -rw------- 1 root wheel 2.0G 3月 24 19:46 2014 sample.8 -rw------- 1 root wheel 2.0G 3月 24 19:45 2014 sample.9 -rw------- 1 root wheel 16M 3月 24 22:30 2014 sample.ns drwxr-sr-x 2 root wheel 4.0K 3月 24 15:44 2014 test
sar -u
該当の時間(赤文字)らへんで結構がんばってる感じが出てます
# sar -u
18時00分01秒 CPU %user %nice %system %iowait %steal %idle
18時10分01秒 all 0.39 0.00 0.24 0.14 0.00 99.23
18時20分01秒 all 0.64 0.00 0.30 0.09 0.00 98.97
18時30分01秒 all 1.36 0.00 0.52 0.09 0.00 98.04
18時40分01秒 all 0.36 0.00 0.22 0.10 0.00 99.33
18時50分01秒 all 0.75 0.00 0.29 0.26 0.00 98.70
19時00分01秒 all 0.33 0.00 0.21 0.08 0.00 99.37
19時10分01秒 all 1.45 0.00 0.28 0.69 0.00 97.58
19時20分01秒 all 0.33 0.00 0.22 0.10 0.00 99.34
19時30分01秒 all 9.80 0.00 0.61 3.35 0.00 86.24
19時40分01秒 all 9.88 0.00 0.62 2.76 0.00 86.75
19時50分01秒 all 10.44 0.00 0.50 1.92 0.00 87.13
20時00分05秒 all 10.13 0.00 0.60 2.29 0.00 86.97
20時10分01秒 all 9.83 0.00 0.44 2.12 0.00 87.60
20時20分02秒 all 7.12 0.00 0.42 1.34 0.00 91.11
20時30分01秒 all 0.34 0.00 0.22 0.09 0.00 99.35
20時40分01秒 all 0.34 0.00 0.22 0.09 0.00 99.35
20時50分01秒 all 0.32 0.00 0.21 0.09 0.00 99.38
21時00分01秒 all 0.32 0.00 0.21 0.08 0.00 99.39
つっこみ中のuptimeとvmstat
ロードが結構あがって、当たり前な感じですが、sarとvmstat見るとio系が。。って感じですね。
# uptime 19:41:27 up 94 days, 6:20, 29 users, load average: 3.16, 1.45, 1.01 # vmstat -n 1 10 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 1 0 256556 213108 82904 9193408 0 0 2 4 0 0 0 0 99 0 0 1 0 256556 222472 82904 9193304 0 0 0 0 2241 1332 8 0 91 0 0 1 0 256556 187140 82904 9193304 0 0 0 0 2684 3102 8 0 91 0 0 2 0 256556 135740 82912 9198740 0 0 5376 1964 2912 2633 11 1 88 1 0 1 0 256556 148636 82908 9146200 0 0 13572 5824 20045 3357 13 1 86 1 0 1 0 256556 157192 82908 9122432 0 0 0 0 2652 2884 8 0 91 0 0 2 0 256556 276324 82912 9134684 0 0 12660 4152 3791 2927 13 1 83 3 0 1 0 256556 269908 82912 9142032 0 0 7104 3424 1919 839 11 0 89 1 0 1 0 256556 251108 82912 9142000 0 0 0 0 2552 2928 8 0 92 0 0 2 0 256556 207404 82916 9143352 0 0 1088 148 2698 2981 9 0 90 0 0
ってことで、今後はサンプルデータでいろいろ試してみたのも気が向いたら載せてみようと思います。