際際滷

際際滷Share a Scribd company logo
MongoDB GridFS についてもろもろ @camelmasa
?徭失B初 ?書指採絞 GridFS を{べたのか ? GridFS って採なのか - ドライバ`蛤 ?h廠Bについて - 編^h廠 ? ReplicaSet,Sharding での ? mongofiles コマンド ?Wいた何蛍 ?もっと GridFS  ?畠悶宥したまとめ アジェンダ
? @camelmasa( 祇b徨の 86 弊旗 ) ? 假寒互 ? Livlis (kamado, inc.) ?圷バリスタ (paul bassett etc.) 徭失B初
? Livlis へのフィ`ドバック ? Lithium + MongoDB の仟サ`ビス ( 鮫颪g表ストレ`ジする狼サ`ビス ) 採絞 GridFS を{べたのか
MongoDB に賞寄なファイルを鯉{するための碧です。 MongoDB は、バイナリデ`タの鯉{を  BSON  でサポ`トしています。 しかし、  MongoDB で、 BSON オブジェクトは 4MB のサイズに崙泙気譴討い襪´ GridFS って採なのか
この GridFS の碧は、寄きいファイルを}方のドキュメントに邑^議に蛍護する圭隈を戻工します。 http://www.mongodb.org/display/DOCSJP/GridFS GridFS って採なのか
ドライバ`蛤 PHP, Java, Python, Ruby, Perl,earlang(github) GridFS って採なのか
編^h廠 ? Amazon EC2 micro Instance Basic 64-bit Amazon Linux AMI 2011.02.1 Beta (1 core CPU, 613MB) 編^だけなら Large とかにすれば措かった´。 h廠Bについて
編^h廠 ReplicaSet ReplicaSet Sharding1 Sharding2 h廠Bについて
Config のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongo-config.conf] configsvr=true dbpath=/mongo/db/config logpath=/mongo/log/config/mongo.log logappend=true fork=true [ 軟 ]mongod -f /mongo/mongo-config.conf h廠Bについて
Mongos のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongos.conf] logpath=/mongo/log/mongos/mongos.log configdb=localhost:27019 port=27021 fork=true [ 軟 ]mongos -f /mongo/mongos.conf h廠Bについて
ReplicaSet のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongo-s1r1.conf] dbpath=/mongo/db/s1_r1 port=28201 logpath=/mongo/log/s1_r1.log logappend=true rest=true replSet=s1 journal=true fork=true [ 軟 ]mongo -f /mongo/mongo-s1r1.conf h廠Bについて
ReplicaSet のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [ コマンド ] config = {_id: 's1', members: [{_id: 0, host: 'localhost:28201'},{_id: 1, host: 'localhost:28202'},{_id: 2, host: 'localhost:28203'}]} rs.initiate(config);  h廠Bについて
Sharding のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongo-s1r1.conf] dbpath=/mongo/db/s1_r1 port=28201 logpath=/mongo/log/s1_r1.log logappend=true rest=true replSet=s1 journal=true fork=true [ 軟 ]mongo -f /mongo/mongo-s1r1.conf h廠Bについて
Sharding のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [ コマンド ] db.runCommand( { enablesharding : "test" }); db.fs.chunks.ensureIndex({'files_id':1}); db.runCommand( { shardcollection : "test.fs.chunks", key : { files_id : 1 } } )  h廠Bについて
ReplicaSet の [mongos]mongofiles --host localhost:27021 put replica.set  connected to: localhost:27021 added file: { _id: ObjectId('4e3368d3c629125977fed2b7'), filename: "replica.set", chunkSize: 262144, uploadDate: new Date(1311992019116), md5: "d41d8cd98f00b204e9800998ecf8427e", length: 0 } Done! ReplicaSet,Sharding での
ReplicaSet の [mongos] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } [sharding1 の master] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } [sharding1 の slave1] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } [sharding1 の slave2] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } ReplicaSet,Sharding での
ReplicaSet の [sharding2 の master] > db.fs.files.find({'filename':'replica.set'}) [sharding2 の slave1] > db.fs.files.find({'filename':'replica.set'}) [sharding2 の slave2] > db.fs.files.find({'filename':'replica.set'}) ReplicaSet,Sharding での
Sharding の > db.printShardingStatus()  --- Sharding Status ---  sharding version: { "_id" : 1, "version" : 3 } shards: { "_id" : "s1", "host" : "s1/localhost:28201,localhost:28202,localhost:28203" } { "_id" : "s2", "host" : "s2/localhost:28204,localhost:28205,localhost:28206" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : true, "primary" : "s2" } test.fs.chunks chunks: s1  10 s2  10 too many chunksn to print, use verbose if you want to force print { "_id" : "fs", "partitioned" : false, "primary" : "s2" } ReplicaSet,Sharding での
Sharding の > db.printShardingStatus()  --- Sharding Status ---  sharding version: { "_id" : 1, "version" : 3 } shards: { "_id" : "s1", "host" : "s1/localhost:28201,localhost:28202,localhost:28203" } { "_id" : "s2", "host" : "s2/localhost:28204,localhost:28205,localhost:28206" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : true, "primary" : "s2" } test.fs.chunks chunks: s1  10 s2  10 too many chunksn to print, use verbose if you want to force print { "_id" : "fs", "partitioned" : false, "primary" : "s2" } ReplicaSet,Sharding での
[PUT]´ ファイルの仟オ賠h mongofiles --host localhost:27021 put a.txt  connected to: localhost:27021 added file: { _id: ObjectId('4e3349480eed7346d277d523'), filename: "a.txt", chunkSize: 262144, uploadDate: new Date(1311983944316), md5: "d41d8cd98f00b204e9800998ecf8427e", length: 0 } Done! ☆ 揖じファイル兆で鞠hすると茅rに匯wに茅される mongofiles コマンド
[PUT]´ ファイルの貧き鞠h mongofiles --host localhost:27021  -r  put a.txt  connected to: localhost:27021 added file: { _id: ObjectId('4e3349480eed7346d277d523'), filename: "a.txt", chunkSize: 262144, uploadDate: new Date(1311983944316), md5: "d41d8cd98f00b204e9800998ecf8427e", length: 0 } done! mongofiles コマンド
[GET]´ ファイルの函誼 mongofiles --host localhost:27021 get a.txt  connected to: localhost:27021 done write to: a.txt mongofiles コマンド
[LIST]´ ファイルをリスト燕幣 mongofiles --host localhost:27021 list a.txt  1000 ´ ( ファイル兆 ,byte 方 ) mongofiles コマンド
[SEARCH]´ ファイル碧 mongofiles --host localhost:27021 search a.txt connected to: localhost:27021 a.txt  0 mongofiles --host localhost:27021 search txt connected to: localhost:27021 a.txt  0 -> 頼畠匯崑じゃなくて措い。 mongofiles コマンド
[DELETE]´ ファイルの茅 mongofiles --host localhost:27021 delete a.txt connected to: localhost:27021 Done! ☆ 揖じファイル兆は畠て茅されます mongofiles コマンド
? ReplicaSet がO協竃栖ない EC2 の root device の否楚が宥械 8GB しかない。 ReplicaSet のO協をすると、 8GB が岷ぐ托まります。 ファイルを vim で_く業に .swp ファイル恬れないという、エラ`が竃て櫃鼎ました。 100GB の Volumes を弖紗して mount し盾Q。 ->100G 嶄 48G 殻托まる。 書指のWいた侭
? Sharding されない 頼畠にWの娠`いでした。 sharding1,sharding2 を聞って編^していたのですが、ファイルを弖紗しても sharding2 に陶って隠贋されてしまっていました。 しかし、これでもかと冱う殻ファイルを弖紗したら、 sharding された。 書指のWいた侭
ReplicaSet の咾隆_JのH、 mongofies の咾裏虫。 ? mongofiles Chost [master server] search test.txt -> ファイルが燕幣される。 ? mongofiles Chost [slave server] search test.txt -> ファイルが燕幣されない、エラ`も竃ない。 しかし、 db.test.fs.files.find({'filename':'test.txt'}) のコマンドは master,slave にもあるのは_J竃栖る。 (db.getMongo().setSlaveOk() g佩gみ ) 書指のWいた侭
? nginx-gridfs nginx のモジュ`ル。 スクリプトを初さず、 web サ`バ`から gridfs のファイルのレスポンスを卦す。 [github] https://github.com/mdirolf/nginx-gridfs [ 歌深 ] http://mybikejp.blogspot.com/2011/01/nginxgridfs.html もっと GridFS!
? rack-gridfs 枠殻の nginx-gridfs の rack 井 。 [github] https://github.com/skinandbones/rack-gridfs もっと GridFS!
GridFS を喘いるのに蒙eなO協?聞喘圭隈吉は駅勣oし。 宥械の ReplicaSet,Sharding O協?聞喘圭隈と笋錣蕕覆ぃ (GridFS はあくまで碧である蕁輝たり念と冱われれば輝たり念。 ) 毫Xに蛍柊ファイルシステムが竃栖ると深えると耙しいですね。 ( \喘rに捻むFは茅く ) スクリプトからのg佩ではoく、 web サ`バ`とのB亊の並箭が竃てくるのは中易いと房います。 畠悶を宥したまとめ
ご賠嗤り佃うございました。

More Related Content

Mongo dbのgridfsについて

  • 2. ?徭失B初 ?書指採絞 GridFS を{べたのか ? GridFS って採なのか - ドライバ`蛤 ?h廠Bについて - 編^h廠 ? ReplicaSet,Sharding での ? mongofiles コマンド ?Wいた何蛍 ?もっと GridFS ?畠悶宥したまとめ アジェンダ
  • 3. ? @camelmasa( 祇b徨の 86 弊旗 ) ? 假寒互 ? Livlis (kamado, inc.) ?圷バリスタ (paul bassett etc.) 徭失B初
  • 4. ? Livlis へのフィ`ドバック ? Lithium + MongoDB の仟サ`ビス ( 鮫颪g表ストレ`ジする狼サ`ビス ) 採絞 GridFS を{べたのか
  • 5. MongoDB に賞寄なファイルを鯉{するための碧です。 MongoDB は、バイナリデ`タの鯉{を BSON でサポ`トしています。 しかし、 MongoDB で、 BSON オブジェクトは 4MB のサイズに崙泙気譴討い襪´ GridFS って採なのか
  • 7. ドライバ`蛤 PHP, Java, Python, Ruby, Perl,earlang(github) GridFS って採なのか
  • 8. 編^h廠 ? Amazon EC2 micro Instance Basic 64-bit Amazon Linux AMI 2011.02.1 Beta (1 core CPU, 613MB) 編^だけなら Large とかにすれば措かった´。 h廠Bについて
  • 9. 編^h廠 ReplicaSet ReplicaSet Sharding1 Sharding2 h廠Bについて
  • 10. Config のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongo-config.conf] configsvr=true dbpath=/mongo/db/config logpath=/mongo/log/config/mongo.log logappend=true fork=true [ 軟 ]mongod -f /mongo/mongo-config.conf h廠Bについて
  • 11. Mongos のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongos.conf] logpath=/mongo/log/mongos/mongos.log configdb=localhost:27019 port=27021 fork=true [ 軟 ]mongos -f /mongo/mongos.conf h廠Bについて
  • 12. ReplicaSet のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongo-s1r1.conf] dbpath=/mongo/db/s1_r1 port=28201 logpath=/mongo/log/s1_r1.log logappend=true rest=true replSet=s1 journal=true fork=true [ 軟 ]mongo -f /mongo/mongo-s1r1.conf h廠Bについて
  • 13. ReplicaSet のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [ コマンド ] config = {_id: 's1', members: [{_id: 0, host: 'localhost:28201'},{_id: 1, host: 'localhost:28202'},{_id: 2, host: 'localhost:28203'}]} rs.initiate(config); h廠Bについて
  • 14. Sharding のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [/mongo/mongo-s1r1.conf] dbpath=/mongo/db/s1_r1 port=28201 logpath=/mongo/log/s1_r1.log logappend=true rest=true replSet=s1 journal=true fork=true [ 軟 ]mongo -f /mongo/mongo-s1r1.conf h廠Bについて
  • 15. Sharding のO協圭隈 宥械のO協圭隈と笋錣蕕覆ぃ [ コマンド ] db.runCommand( { enablesharding : "test" }); db.fs.chunks.ensureIndex({'files_id':1}); db.runCommand( { shardcollection : "test.fs.chunks", key : { files_id : 1 } } ) h廠Bについて
  • 16. ReplicaSet の [mongos]mongofiles --host localhost:27021 put replica.set connected to: localhost:27021 added file: { _id: ObjectId('4e3368d3c629125977fed2b7'), filename: "replica.set", chunkSize: 262144, uploadDate: new Date(1311992019116), md5: "d41d8cd98f00b204e9800998ecf8427e", length: 0 } Done! ReplicaSet,Sharding での
  • 17. ReplicaSet の [mongos] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } [sharding1 の master] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } [sharding1 の slave1] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } [sharding1 の slave2] > db.fs.files.find({'filename':'replica.set'}) { "_id" : ObjectId("4e3368d3c629125977fed2b7"), "filename" : "replica.set", "chunkSize" : 262144, "uploadDate" : ISODate("2011-07-30T02:13:39.116Z"), "md5" : "d41d8cd98f00b204e9800998ecf8427e", "length" : 0 } ReplicaSet,Sharding での
  • 18. ReplicaSet の [sharding2 の master] > db.fs.files.find({'filename':'replica.set'}) [sharding2 の slave1] > db.fs.files.find({'filename':'replica.set'}) [sharding2 の slave2] > db.fs.files.find({'filename':'replica.set'}) ReplicaSet,Sharding での
  • 19. Sharding の > db.printShardingStatus() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 3 } shards: { "_id" : "s1", "host" : "s1/localhost:28201,localhost:28202,localhost:28203" } { "_id" : "s2", "host" : "s2/localhost:28204,localhost:28205,localhost:28206" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : true, "primary" : "s2" } test.fs.chunks chunks: s1 10 s2 10 too many chunksn to print, use verbose if you want to force print { "_id" : "fs", "partitioned" : false, "primary" : "s2" } ReplicaSet,Sharding での
  • 20. Sharding の > db.printShardingStatus() --- Sharding Status --- sharding version: { "_id" : 1, "version" : 3 } shards: { "_id" : "s1", "host" : "s1/localhost:28201,localhost:28202,localhost:28203" } { "_id" : "s2", "host" : "s2/localhost:28204,localhost:28205,localhost:28206" } databases: { "_id" : "admin", "partitioned" : false, "primary" : "config" } { "_id" : "test", "partitioned" : true, "primary" : "s2" } test.fs.chunks chunks: s1 10 s2 10 too many chunksn to print, use verbose if you want to force print { "_id" : "fs", "partitioned" : false, "primary" : "s2" } ReplicaSet,Sharding での
  • 21. [PUT]´ ファイルの仟オ賠h mongofiles --host localhost:27021 put a.txt connected to: localhost:27021 added file: { _id: ObjectId('4e3349480eed7346d277d523'), filename: "a.txt", chunkSize: 262144, uploadDate: new Date(1311983944316), md5: "d41d8cd98f00b204e9800998ecf8427e", length: 0 } Done! ☆ 揖じファイル兆で鞠hすると茅rに匯wに茅される mongofiles コマンド
  • 22. [PUT]´ ファイルの貧き鞠h mongofiles --host localhost:27021 -r put a.txt connected to: localhost:27021 added file: { _id: ObjectId('4e3349480eed7346d277d523'), filename: "a.txt", chunkSize: 262144, uploadDate: new Date(1311983944316), md5: "d41d8cd98f00b204e9800998ecf8427e", length: 0 } done! mongofiles コマンド
  • 23. [GET]´ ファイルの函誼 mongofiles --host localhost:27021 get a.txt connected to: localhost:27021 done write to: a.txt mongofiles コマンド
  • 24. [LIST]´ ファイルをリスト燕幣 mongofiles --host localhost:27021 list a.txt 1000 ´ ( ファイル兆 ,byte 方 ) mongofiles コマンド
  • 25. [SEARCH]´ ファイル碧 mongofiles --host localhost:27021 search a.txt connected to: localhost:27021 a.txt 0 mongofiles --host localhost:27021 search txt connected to: localhost:27021 a.txt 0 -> 頼畠匯崑じゃなくて措い。 mongofiles コマンド
  • 26. [DELETE]´ ファイルの茅 mongofiles --host localhost:27021 delete a.txt connected to: localhost:27021 Done! ☆ 揖じファイル兆は畠て茅されます mongofiles コマンド
  • 27. ? ReplicaSet がO協竃栖ない EC2 の root device の否楚が宥械 8GB しかない。 ReplicaSet のO協をすると、 8GB が岷ぐ托まります。 ファイルを vim で_く業に .swp ファイル恬れないという、エラ`が竃て櫃鼎ました。 100GB の Volumes を弖紗して mount し盾Q。 ->100G 嶄 48G 殻托まる。 書指のWいた侭
  • 28. ? Sharding されない 頼畠にWの娠`いでした。 sharding1,sharding2 を聞って編^していたのですが、ファイルを弖紗しても sharding2 に陶って隠贋されてしまっていました。 しかし、これでもかと冱う殻ファイルを弖紗したら、 sharding された。 書指のWいた侭
  • 29. ReplicaSet の咾隆_JのH、 mongofies の咾裏虫。 ? mongofiles Chost [master server] search test.txt -> ファイルが燕幣される。 ? mongofiles Chost [slave server] search test.txt -> ファイルが燕幣されない、エラ`も竃ない。 しかし、 db.test.fs.files.find({'filename':'test.txt'}) のコマンドは master,slave にもあるのは_J竃栖る。 (db.getMongo().setSlaveOk() g佩gみ ) 書指のWいた侭
  • 30. ? nginx-gridfs nginx のモジュ`ル。 スクリプトを初さず、 web サ`バ`から gridfs のファイルのレスポンスを卦す。 [github] https://github.com/mdirolf/nginx-gridfs [ 歌深 ] http://mybikejp.blogspot.com/2011/01/nginxgridfs.html もっと GridFS!
  • 31. ? rack-gridfs 枠殻の nginx-gridfs の rack 井 。 [github] https://github.com/skinandbones/rack-gridfs もっと GridFS!
  • 32. GridFS を喘いるのに蒙eなO協?聞喘圭隈吉は駅勣oし。 宥械の ReplicaSet,Sharding O協?聞喘圭隈と笋錣蕕覆ぃ (GridFS はあくまで碧である蕁輝たり念と冱われれば輝たり念。 ) 毫Xに蛍柊ファイルシステムが竃栖ると深えると耙しいですね。 ( \喘rに捻むFは茅く ) スクリプトからのg佩ではoく、 web サ`バ`とのB亊の並箭が竃てくるのは中易いと房います。 畠悶を宥したまとめ