ザ・ノンフィクション ~うまくいかない NoSQL ~ 株式会社サイバーエージェント アメーバ事業本部プラットフォームディビジョン システムディベロップメントグループ CA Developers Connect                       桑野 章弘
桑野章弘 インフラエンジニア アメーバピグの運用/構築を担当 ピグライフの運用/構築を担当 Twitter http:// twitter.com/kuwa_tw   Blog http:// d.hatena.ne.jp/akuwano / 著書/活動 「 MySQL によるタフなサイトの作り方」 勉強会( hbstudy, qpstudy ほか)などでの発表など 自己紹介
おらが村
に NoSQL がやってきた ピグライフのアーキテクチャ アプリケーション Node.js websocket データストア mongoDB めちゃめちゃとんがっている、、、
に NoSQL がやってきた ピグライフのアーキテクチャ アプリケーション Node.js websocket データストア mongoDB でも、、、
みんな(心)の声 NoSQL なら なんでもできる。
みんな(心)の声 NoSQL のすごさをみてみたい。
みんな(心)の声 こんなの MySQL みたいなもんでしょ。
、、、とおもってませんけど 用途からはシャーディングの手間のない DB くらいで思ってました。 これから 2 つの代表的なお話をさせていただきます、、、。
その1 ・・・ useしたらできるDB MySQL みたいに Create すればいいんでしょー、、、あれないわ。 [kuwano_akihiro@mongo01 ~]$ /usr/local/mongodb/bin/mongo --port 27018 MongoDB shell version: 1.8.1 connecting to: 127.0.0.1:27018/test >show dbs            ← database の確認 admin  (empty) local  (empty) testdatabase  0.453125GB
その1・・・useしたらできるDB あれ、、、 create ないぞ、、、ないけど入れたぞ、、、。 [kuwano_akihiro@mongo01 ~]$ /usr/local/mongodb/bin/mongo --port 27018 MongoDB shell version: 1.8.1 connecting to: 127.0.0.1:27018/test > use newdatabase switched to db newdatabase  ← なんか入れた > db.test.insert( { test:1 })  ← データのインサートしちゃった
その1 ・・・ useしたらできるDB まさか、、、。 [kuwano_akihiro@mongo01 ~]$ /usr/local/mongodb/bin/mongo --port 27018 MongoDB shell version: 1.8.1 connecting to: 127.0.0.1:27018/test >> db.test.insert( { test:1 })  ← データのインサート show dbs admin  (empty) local  (empty) newdatabase  0.203125GB            ←なんかできてる testdatabase  0.453125GB
その1 ・・・ useしたらできるDB もちろんデータベース名間違えてインサートしてもエラーなんか出ません! そんなもんは NoSQL には必要ない!、、、んでしょうか、、、。
その2 ・・・ 勝手に同期するDB 冗長化のためにレプリカセットを組みましょう # /usr/local/mongodb/bin/mongo --host mongo01 replSetTest001:PRIMARY> rs.status() { "set" : "replSetTest001", ( snip) { "_id" : 2, "name" : "mongo03:27017", "health" : 1, "state" : 1, "stateStr" : "PRIMARY", "optime" : { "t" : 1305112310000, "i" : 7 }, "optimeDate" : ISODate("2011-05-11T11:11:50Z"), "self" : true } ( snip)
その2 ・・・ 勝手に同期するDB あ、1台落ちちゃった! 壊れちゃったからまっさらに作り直し # /usr/local/mongodb/bin/mongo --host mongo01 replSetTest001:PRIMARY> rs.status() { "set" : "replSetTest001", ( snip) { "_id" : 2, "name" : "mongo03:27017", "health" : 0, "state" : 1, "stateStr" : "PRIMARY", "optime" : { "t" : 1305112310000, "i" : 7 }, "optimeDate" : ISODate("2011-05-11T11:11:50Z"), "self" : true } ( snip)
その2 ・・・ 勝手に同期するDB 作り直したから、 mongodb 立ち上げるよ # /etc/init.d/mongod start # /usr/local/mongodb/bin/mongo --host mongo01 >show dbs admin  (empty) local  (empty) newdatabase  0.203125GB            ←なんかできてる testdatabase  0.453125GB > use newdatabase switched to db newdatabase > db.test.find() { “_id” : ObjectId(“4dca6862374b6d50c727b8e7”), “test” : 1 }  ← まだなんもしてない
その2 ・・・ useしたらできるDB もちろん大量のデータがあっても手加減なんてしてくれませんw そんなもんは NoSQL には必要ない!、、、んでしょうか、、、。
でも、、、 ほかにも チャンクが移動しまくりだったり デフォルトチャンクサイズが大きかったり メモリの状態がわかりづらかったり 勝手が違う、、、 Mongodb 勝手が違う、、、 y 倍
でも、、、 いろんな事を自動でやってくれる レプリカ復旧 シャーディング 生死判別と冗長化 負荷分散 アプライアンス機器を使うイメージに近い でもオープンソースだから中みれるよね Mongodb 萌えかもしれない、、、
というわけで mongodb としばらく付き合ってみたいと思います。続報はいろんなところでw
というわけで ご清聴ありがとうございました! むにゃむにゃ、、、 またシャードが偏った、、、直さないと、、、

ザ・ドキュメント~うまくいかないNoSQL~

Editor's Notes

  • #9 運用をしていった中での考え方、実施したことをデータストア / 画像ストレージにフォーカスしてお話します
  • #13 運用をしていった中での考え方、実施したことをデータストア / 画像ストレージにフォーカスしてお話します