Slide 1

Slide 1 text

mongo* Just what do those commands do? By Russell Smith Friday, 20 April 12

Slide 2

Slide 2 text

/usr/bin/whoami • Russell Smith • Consultant for UKD1 Limited • I Specialise in helping companies going through rapid growth; • Code, architecture, infrastructure, devops, sysops, capacity planning, etc • <3 MongoDB, Neo4j, MySQL, Riak, Gearman, Kohana, PHP, Debian, Puppet, etc... Friday, 20 April 12

Slide 3

Slide 3 text

Huh? • MongoDB ships with a variety of CLI tools • Some popular; mongodump, mongorestore, mongostat, mongo • Some less so; mongosniff, mongoexport, mongoimport, bsondump, etc Friday, 20 April 12

Slide 4

Slide 4 text

Core Friday, 20 April 12

Slide 5

Slide 5 text

mongo • Probably the most commonly used • ‘Hidden’ gems; • ~/.mongorc.js - will be executed by default • --eval “some js” - evaluates Javascript and exits Friday, 20 April 12

Slide 6

Slide 6 text

mongo (cont.) ~ mongo test --eval "printjson(db.getCollectionNames())" MongoDB shell version: 2.1.0-pre- connecting to: test [ "fs.chunks", "fs.files", "system.indexes", "system.profile", "test" ] ~ mongo test --quiet --eval "printjson(db.getCollectionNames())" [ "fs.chunks", "fs.files", "system.indexes", "system.profile", "test" ] Friday, 20 April 12

Slide 7

Slide 7 text

~/.mongorc.js x = db.queue.count({state:4}); if (x > 0) { print('WARNING: ' + x + ' hung jobs'); } Friday, 20 April 12

Slide 8

Slide 8 text

~/.mongorc.js ~ mongo MongoDB shell version: 2.1.0-pre- connecting to: test WARNING: 2 hung jobs > Friday, 20 April 12

Slide 9

Slide 9 text

mongod • The server itself • Useful: • --fastsync - allows (much) faster starting of a replset member by using a (recent) snapshot of a peer • --keyFile - replset / sharding authentication file Friday, 20 April 12

Slide 10

Slide 10 text

mongos • Sits in front of your shard servers and directs queries • --keyFile Friday, 20 April 12

Slide 11

Slide 11 text

Common Friday, 20 April 12

Slide 12

Slide 12 text

mongodump • Used to take backups • Common options: • --oplog • -d • -c Friday, 20 April 12

Slide 13

Slide 13 text

mongodump (cont.) ~ mongodump -d test -c queue -q "{state:4}" connected to: 127.0.0.1 DATABASE: test to dump/test test.queue to dump/test/queue.bson 2 objects Friday, 20 April 12

Slide 14

Slide 14 text

mongorestore • Restores backups taken with mongodump • Interesting options; • --filter • --oplogReplay • Possible performance issues with custom (non ObjectId) _id Friday, 20 April 12

Slide 15

Slide 15 text

mongorestore (cont.) mongorestore -d test -c queue --filter "{state:4}" dump/test/queue.bson connected to: 127.0.0.1 Mon Sep 19 07:34:03 dump/test/queue.bson Mon Sep 19 07:34:03 going into namespace [test.queue] 764 objects found 2 objects processed Friday, 20 April 12

Slide 16

Slide 16 text

mongostat • Produces periodically updated stats • Useful in watching server load & spotting general performance issues Friday, 20 April 12

Slide 17

Slide 17 text

Cursor paging Common operations fsync flushes Total data size locked active clients queues Friday, 20 April 12

Slide 18

Slide 18 text

mongostat (cont’d) • Watch for; • faults (page faults) • idx miss (index btree page misses) • locked (percentage of time globally locked) • repl (it should normally be M or SEC) Friday, 20 April 12

Slide 19

Slide 19 text

Others Friday, 20 April 12

Slide 20

Slide 20 text

mongoexport • Useful to export data for use with another database or program • You may specify down to the field level using a filter if needed • Can export as; • JSON (default) • CSV Friday, 20 April 12

Slide 21

Slide 21 text

mongoimport • Imports data in to mongodb • Currently supports importing; • JSON • CSV • TSV Friday, 20 April 12

Slide 22

Slide 22 text

mongoimport (cont’d) • Useful options include; • --upsert - allows updating objects that exist already (see --upsertFields) • --headerline - if your CSV / TSV contains headers • -f / --fields - specify field names Friday, 20 April 12

Slide 23

Slide 23 text

bsondump • Convert bson -> json bsondump test.bson --type json { "_id" : ObjectId( "4e72f51414345f302b0eea2e" ), "test" : 1 } 1 objects found Friday, 20 April 12

Slide 24

Slide 24 text

bsondump (cont.) • Debug info: bsondump test.bson --type debug --- new object --- size : 36 _id type: 7 size: 17 test type: 1 size: 14 etc Friday, 20 April 12

Slide 25

Slide 25 text

mongofiles ~ mongofiles put test.txt connected to: 127.0.0.1 added file: { _id: ObjectId('4e761b07c21062d06b349819'), filename: "test.txt", chunkSize: 262144, uploadDate: new Date(1316363015625), md5: "d41d8cd98f00b204e9800998ecf8427e", length: 12256 } done! Friday, 20 April 12

Slide 26

Slide 26 text

mongofiles (cont.) ~ mongofiles list connected to: 127.0.0.1 test.txt 12256 Friday, 20 April 12

Slide 27

Slide 27 text

mongotop • New in 1.9 • Collection level load stats Friday, 20 April 12

Slide 28

Slide 28 text

mongosniff • Used for sniffing the traffic between client / server • Can forward traffic • Only really useful for debugging... Friday, 20 April 12

Slide 29

Slide 29 text

Friday, 20 April 12

Slide 30

Slide 30 text

mongo-perf • Does not ship with mongodb See : https://github.com/mongodb/mongo-perf • I can’t compile it, but it probably works Friday, 20 April 12

Slide 31

Slide 31 text

Useful third party tools Friday, 20 April 12

Slide 32

Slide 32 text

tungsten replicator • http://code.google.com/p/tungsten-replicator/ • http://code.google.com/p/tungsten-replicator/wiki/ mysql> create table foo(id int primary key, msg varchar(35)); Query OK, 0 rows affected (0.05 sec) mysql> insert into foo values(1, 'hello from MySQL!'); Query OK, 1 row affected (0.00 sec) > db.foo.find() { "_id" : ObjectId("4dc77bacad9092bd1aef046d"), "id" : "1", "data" : "hello from MySQL!" } Friday, 20 April 12

Slide 33

Slide 33 text

automongobackup • A port of the popular AutoMySQLBackup • Rotates & compresses backups • https://github.com/micahwedemeyer/automongobackup Friday, 20 April 12

Slide 34

Slide 34 text

mongolog • Full query logging • Uses mongosniff • Will be on github soon Friday, 20 April 12

Slide 35

Slide 35 text

Other interesting projects • Eliots Munin plugins : https://github.com/erh/mongo-munin • gridfs-fuse : https://github.com/mikejs/gridfs-fuse Friday, 20 April 12

Slide 36

Slide 36 text

Further reading • Tungsten with Mongo details http://scale-out-blog.blogspot.com/2011/05/introducing-mysql-to-mongodb.html • Javascript shell API http://api.mongodb.org/js/current/ • Admin UI’s http://www.mongodb.org/display/DOCS/Admin+UIs • Hacking the shell http://bit.ly/r2vghH Friday, 20 April 12

Slide 37

Slide 37 text

Questions? Friday, 20 April 12