読者です 読者をやめる 読者になる 読者になる

256bitの殺人メニュー

インフラエンジニアだったソリューションアーキテクトなくわののブログ。こちらのBlogは個人の意見となっていて会社とは全く関係ありません。お約束です。[twitter:@kuwa_tw]めんどくさがりが重い腰を上げて何かをアウトプットすることにどれほどの意味があるのかを試してみたいブログでもある。

新しいwiredTigerストレージエンジンの始め方とその他のストレージエンジンについて

どうもどうも乙カレー様です。桑野です。
風邪です:(;゙゚'ω゚'):<寒い


MongoDB Advent Calendar 2014 - Qiitaの19日目です!

MongoDB2.8の目玉機能であるところのプラガブルなストレージエンジン、その中でも先日MongoDB社が買収したwiredTigerについては気になる所なのでとりあえず使い方メモまで書いてみますた。*1

wiredTigerとは

wiredTigerとはWiredTiger社で開発を進めていたデータストアで2.8ではMongoDBのストレージエンジンとして採用される予定だったのですが、そこから一転MongoDB社に買収されるという形になりました。今までのmmapv1(従来)形式のデータストアから置き換えになる方向なのではないかと思われます。ということでちょいとやってみようと。

試してみよう

現在MongoDB2.8のRC3まで出てますが、これであればwiredTigerは使えます。

$ cd /opt
$ wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-2.8.0-rc3.tgz
$ sudo tar zxvf mongodb-linux-x86_64-2.8.0-rc3.tgz
$ mkdir -p /var/lib/mongodb/mmapv1 /var/lib/mongodb/wt
$ chown -R mongodb. /var/lib/mongodb
YAML形式設定ファイル

そしたら次にMongoDBの設定。まずは普通に起動してみましょう。
YAML形式の設定ファイルが使えるようになったので勉強兼ねてそれで。(今までの設定ファイルも使えるよ)

# mongodb_mmapv1.conf
storage:
   dbPath: "/var/lib/mongodb/mmapv1"
   engine: "mmapv1"
   journal:
      enabled: true
systemLog:
   destination: file
   path: "/var/log/mongodb/mongodb_mmapv1.log"
   logAppend: true
processManagement:
    fork: true

起動

/opt/mongodb-linux-x86_64-2.8.0-rc3/bin/mongod -f /etc/mongodb/mongod-mmapv1.yml


普通のもんごっすわw

wiredTiger 起動用の設定ファイル

次はいよいよwiredTigerです。設定ファイルを書きましょう。

# mongodb_wt.conf
storage:
    dbPath: "/var/lib/mongodb/wt"
    engine: "wiredTiger"
    wiredTiger:
        blockCompressor: "none"
systemLog:
   destination: file
   path: "/var/log/mongodb/mongodb_wt.log"
   logAppend: true
storage:
   journal:
      enabled: true
processManagement:
    fork: true

起動

/opt/mongodb-linux-x86_64-2.8.0-rc3/bin/mongod -f /etc/mongodb/mongod-wt.yml


設定項目も諸所用意されているので主要なオプション紹介します。(最新の状態は公式サイトまでm(_ _)m)

# mongodb_wt.conf
storage:
    dbPath: "/var/lib/mongodb/wt"
    engine: "wiredTiger"
    wiredTiger:
        collectionConfig:
            blockCompressor: "snappy"
        engineConfig:
            cacheSizeGB: 2
            checkpointDelaySecs: 60
            statisticsLogDelaySecs: 5
            journalCompressor: "snappy"
            directoryForIndexes: true
systemLog:
   destination: file
   path: "/var/log/mongodb/mongodb_wt.log"
   logAppend: true
storage:
   journal:
      enabled: true
processManagement:
    fork: true
  • blockCompressor: コレクションデータの圧縮 "none|snappy|zlib"
  • cacheSizeGB: WiredTigerのキャッシュ量。デフォルトは1G or フィジカルメモリの半分
  • checkpointDelaySecs:  チェックポイントの間隔ジャーナル有効にしてないと最大この秒数のデータが失われる可能性がある。デフォルトは60Sec。
  • statisticsLogDelaySecs:  統計ログの出力間隔、デフォルトは0(記録しない)
  • journalCompressor:  ジャーナルファイルの圧縮。 "none|snappy|zlib"
  • directoryForIndexes: indexとcollectionをディレクトリで分けるようにする。デフォルトはfalse(無効)

ほかにどんなストレージエンジンがあるの?

見た感じこんなのがあるっぽい。

devnullストレージエンジン

insertとかしても何も記録されなかった。MySQLでいうBlackhole。
使い道、、、あるかなぁ、、、。

inMemory(inMemoryExperiment)ストレージエンジン

Experimentってあるので実験段階なんだろうけどメモリDBとして使うためのストレージエンジンぽい。Cappedで使っている用途はもはやこれでもいいんじゃないかと思わなくもない。

RocksDB(rocksExperiment)ストレージエンジン

RocksDBをバックエンドに持つストレージエンジン。使う時間なかったのでよくわからんw

今日はこんなところで勘弁してやらぁ(ください)

もうちょいやりたかったんですが、今日が終わりそうなのでとりあえずここまで。。。

( `)3')▃▃▃▅▆▇▉ヴェェェェェェエェエエェェェェェェエェエエェェヴェェェェェェエェエエェェェェェヴェェェェェェエェエエ


MongoDBイン・アクション

MongoDBイン・アクション


モンゴ流 スカルプエッセンス Deeper 60ml

モンゴ流 スカルプエッセンス Deeper 60ml

*1:もうちょいやりたかったんですが、、、