Mais conteúdo relacionado Semelhante a MongoDB quickstart for Java, PHP, and Python developers (20) Mais de Rick Hightower (19) MongoDB quickstart for Java, PHP, and Python developers1. MongoDB Introduction
for Java, Python and PHP Developers
Covers using MongoDB from a Java, PHP
and Python developer’s perspective. Uses
the Official MongoDB driver for Java,
Python and PHP as well as command line
tools for MongoDB to teach core concepts.
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
2. Outline
• Theory and Architecture of MongoDB (49%)
• Setup instructions (9%)
• Code examples in JavaScript, PHP, Python and Java
(39%)
• 3% random
© 2012 10gen. MongoDB®, Mongo®, and the
leaf logo are registered trademarks of 10gen, Inc.
10gen in no way endorses this slide deck or Mammatus
Tehcnology Inc.
2
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
3. MongoDB
• NoSQL landscape full of contenders tackling big data
problems
• MongoDB very capable
• Document-oriented schema-less storage solution
• JSON-style documents to represent, query and
modify data
• Supports many clients/languages Python, PHP, Java,
Ruby, C++, etc.
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
4. Resources
• 10Gen site (http://www.mongodb.org)
– Great documentation and presentations
• InfoQ articles and presentations
• Wikipedia
• http://mongly.com/
4
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
5. About Author
• Rick Hightower, founder of ArcMind (RIP) and Mammatus,
father of five
• Former CTO of LearningPatterns and Trivera Technologies
(global training and consulting firms)
• Director of Development at 3 different places
• Author of five technical books
• Editor at InfoQ
• 20 years hacking code (C, Python, C++, Java, etc.)
• https://twitter.com/#!/RickHigh
5
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
6. About Mammatus, ArcMind
• ArcMind focused on Spring framework, JSF, Java EE,
Spring MVC, Grails, Groovy, Development, Tiles, etc.
– Started in 2003 ended in 2009
– Lot of clients (Boeing, Qualcomm, Bank of America, et.c), lots
of traveling
• Mammatus Tech (bumpy clouds) focuses on Cloud
computing, NoSQL, BigData, Map Reduce, Java, PHP,
Python, EC2, etc.
– Started in 2009
– http://cloud.mammatustech.com/
– http://nosql.mammatustech.com/
– http://www.mammatustech.com/
6
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
7. Feedback welcome
• Send any and all feedback to
richardhightower@gmail.com
• Criticism welcome
– Prefer constructive criticism, but will take any and all
– Needed for continuous improvement of this slide deck and my
knowledge
7
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
8. Creative Commons
• This slide deck and all material therein are covered
under creative commons
• You can use all material in here as long as you don’t
copy it word for word and then use it for commercial
reasons
• Other material in here from other sources are
covered under fair use
• http://creativecommons.org/
8
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
9. Why MongoDB?
• MongoDB great active community
• Supports:
• High availability,
• Journaling
• Replication,
• Sharding, MongoDB commercial
• Indexing, http://www.10gen.com/what-is-mongodb
• Aggregation,
• Map/Reduce
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
10. MongoDB is a top job trend
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
11. Leader in the NoSQL space?
MongoDB seems to be
the clear mind-share leader
Cassandra a close second
11
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
12. Why do Developers pick Mongo?
• NoSQL, in general, can be more agile than full
RDBMS/ SQL
– problems with schema migration
– a lot of upfront design needed for RDBMS
– (or a lot schema migration later)
• MongoDB does not require a lot of ramp up time
– Easy to get started
– Many DevOps things come for free
– Easy on ramp for NoSQL
– Gateway drug?
12
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
13. Why PHP, Python and Java?
Might add Ruby later to the mix or just focus on these
13
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
14. Built for speed | Cache built in
• MongoDB was built with speed in mind
• Speed shaped architecture of MongoDB
• Uses binary protocol instead of HTTP text/
(CouchDB)
• Pads disk space around document
– faster updates
– uses more disk
• Uses memory-mapped files as default storage
engine, letting OS manage swapping
– Linux/Windows/Solaris really good at virtual memory...
MongoDB builds on top of this
14
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
15. Negatives of MongoDB
• Indexes are not as flexible as
Oracle/MySQL/Postgres or other NoSQL solutions
– Order of index matters, uses B-Trees, not very many options
like more mature solutions
• Realtime queries might not be as fast as
Oracle/MySQL and other NoSQL solutions
• Good enough if queries are simple
• Probably hits the sweet spot of 20/80 rule
• Not as mature as RDBMS
• Does not have full text search engine
15
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
16. Very useful still
• Every version seems to add more features
• Added journaling so they can have single server
durability
• Improved Replica’s with Replica Sets
• Replica Sets and Autosharding required very little
admin once running
• What it does, it does well...
– Can be combined with Relational database
– Can be combined with full text search (Solr)
– Can be combined with Hadoop
16
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
17. Who uses MongoDB?
Big names, big data
• MTV • SAP
• Craigslist • Forbes
• Disney • National Archives UK
• Shutterfly • Intuit
• foursqaure • github
• bit.ly • LexisNexis
• The New York Times • many more
• Barclay’s
• The Guardian
17
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
18. MongoDB Concept
• Oracle: Schema, Tables, Rows, Columns
• MySQL: Database, Tables, Rows, Columns
• MongoDB: Database, Collections, Document, Fields
• MySQL/Oracle: Indexes
• MongoDB: Indexes
• MySQL/Oracle: Stored Procedures
• MongoDB: Stored JavaScript
• Oracle/MySQL: Database Schema
• MongoDB: Schema free!
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
20. Additional Mongo Features
• Geo Indexing: How close am I to X?
• File Storage
– Stores large files and file meta-data
• Capped Collection (like Ring Buffer)
– Older documents auto-deleted
• Aggregation
• Auto sharding
• Load sharing for reads
• High availability
• Speed or durability (journaling)
20
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
21. What do you need?
• Read scalability and high availability (HA)?
HA
– Use Replica Sets
• Write scalability?
– Use Autosharding (also just called sharding)
• HA, Read Scalability, and Write Scalability?
– Use Autosharding and Replica Sets
• You can start basic and add as your growth/needs
change
– Capacity planning, monitoring, determine needs
21
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
22. Durability
• Journaling added in 1.8, and is now default for 64 bit
OS for MongoDB 2.0
• Prior to that, you used replication to make sure copy
of operation was on replica
– MongoDB did not have single server durability, now it does
with addition of journaling
• General thought was/is durability is overvalued
• You can also force an fsync
• See links in notes
22
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
23. Replica Sets
• Drivers know the primary
• If primary down, Drivers Replica 1 Replica 2
know how to get new
primary
• Data is replicated after
writing
• Typical to have three in a
replica set Replica 0
• You can do more PRIMARY
• Load sharing for reads Read
Read/Write
Client Driver
23
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
24. Replica Sets Usage
• Business Continuity
• Data Redundancy
• High Availability
• Load sharing (reads)
• “Just works / NoOps (low ops)”
24
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
25. Replica Sets
• Non-blocking master/slave replication
• Auto failover
• Two or more nodes (usually three)
• No primary, master is nominated
• Share nothing architecture
• Brains in the client libraries
• Client libraries (Drivers) are Replica Set aware
• Client can block until data is replicated on all servers
(for important data)
25
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
26. Replica Sets
• You only write to the master, it then replicates to
slaves
• Replication is by default async (non-blocking)
• Slave data and write data can be out of sync
– There are workarounds
– You can force master to sync to master before
continuing (blocking, sync)
• Sync blocking is slower
• Async non-blocking is faster (eventual consistency)
26
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
27. Durability and Replica Sets
• Client libraries can do the following:
• Wait until write has happened on all replicas
• Wait until write is on two servers (primary and one
other)
• Wait until write has occurred on majority of replicas
• Wait until write operation has been written to
journal
27
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
28. Replica Sets
• Replica Sets and Autosharding go hand in hand for
mass scale out
• Replica Sets are good for failover and speeding up
reads, but...
• To speed up writes, you need autosharding
28
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
29. Sharding
• Sharding allows MongoDB to scale horizontally
• Sharding = partitioning
• Auto-shards
– load balances
– changes for data distribution
• Elastic adding of new nodes
• Supports automatic failover (along with replica sets)
• No single point of failure
• 90% of deployments don’t need sharding according
to Roger Bodamer
29
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
30. Non-sharded client connection
• Client Driver talks directly
to mongod process
30
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
31. Autosharded
• Three actors now:
mongod, mongos, and
Client Driver library
• Mongod is the process
• Mongos is a router, it
routes writes to correct
mongod instance
• Shares writing
31
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
32. Autoshard plus Replica Set
• Autosharding increases
writes, helps with scale
out
• Replica Sets are for high
availability
• There is a whole lesson on
sharding.
32
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
33. Sharding Topology
• Config Servers (mongod)
– contain versioned shard topology
– maps which shard has key
– used by mongos
– like DNS server for shards
• Mongos
– Shard router clients drivers talk to Mongos instead of mongod
directly
– Mongos uses Config Servers to find shard where key lives
– MongoD are shards that can be replicated
33
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
34. Large deployment
34
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
35. MapReduce
• Used for batch processing
• Similar to Hadoop,
• Massive aggregation possible through divide and
conquer
• Used instead of Group/By in SQL
– Also added simplified framework to MongoDB (aggregation
framework)
• Map and Reduce functions are written in JavaScript
– Executed on server, code next to data it is operating on
• Can copy results to results collections
35
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
36. MapReduce Theory
Image from http://code.google.com/p/mapreduce-framework/wiki/MapReduce
36
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
37. Incremental MapReduce
• Run MapReduce job over collections
• Run a second job but only over new documents in
collection
• Use reduce output to merge new data into existing
collection
37
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
38. Aggregation Framework
• Added in MongoDB 2.1
• Similar to SQL group by
• Before Aggregation framework, you had to use
MapReduce for things like SQL group by
• Easier to use than MapReduce
Table from 10 Gen
http://www.mongodb.org/display/DOCS/SQL+to+Aggregation+Framework+M
38
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
39. Aggregation Framework
Table from 10 Gen
http://www.mongodb.org/display/DOCS/SQL+to+Aggregation+Framework+M
39
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
40. MongoDB versus SQL
Compare contrast
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons. 40
41. SQL to Mongo
From http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
41
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
42. Mongo versus SQL
From http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
42
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
43. Mongo versus SQL
From http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
43
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
44. Mongo vs. SQL
From http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
44
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
45. Getting Started with Mongo
Installing and using Mongo
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons. 45
46. Install (1 of 2)
• http://www.mongodb.org/downloads
• Extract
– ~/mongodb-platform-version/
• $ sudo mkdir /etc/mongodb/data
• Create file
– /etc/mongodb/mongodb.config
• $ cat mongodb.config
– dbpath=/etc/mongodb/data
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
47. Install (2 of 2)
• Link:
• sudo ln -s ~/mongodb-platform-version/ /usr/local/mongodb
• Add to Path:
• export PATH=$PATH:/usr/local/mongodb/bin
• Run the server:
• mongod --config /etc/mongodb/mongodb.config
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
48. Run the client (type db.version())
• $ mongo
• MongoDB shell version: 2.0.4
• connecting to: test
• …
• > db.version()
• 2.0.4
• >
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
49. Client: mongo db.help()
• > db.help()
• DB methods:
• db.addUser(username, password[, readOnly=false])
• db.auth(username, password)
• db.cloneDatabase(fromhost)
• db.commandHelp(name) returns the help for the command
• db.copyDatabase(fromdb, todb, fromhost)
• db.createCollection(name, { size : ..., capped : ..., max : ... } )
• db.currentOp() displays the current operation in the db
• db.dropDatabase()
• db.eval(func, args) run code server-side
• db.getCollection(cname) same as db['cname'] or db.cname
• db.getCollectionNames()
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
50. db.help()
db.getLastError() - just returns the err msg string db.printCollectionStats()
db.getLastErrorObj() - return full status object db.printReplicationInfo()
db.getMongo() get the server connection object db.printSlaveReplicationInfo()
db.printShardingStatus()
db.getMongo().setSlaveOk() allow this connection
to read from the nonmaster member of a replica db.removeUser(username)
pair db.repairDatabase()
db.resetError()
db.getName() db.runCommand(cmdObj) run a database command. if
cmdObj is a string, turns it into { cmdObj : 1 }
db.getPrevError()
db.getProfilingStatus() - returns if profiling is on db.serverStatus()
and slow threshold db.setProfilingLevel(level,<slowms>) 0=off 1=slow 2=all
db.getReplicationInfo() db.shutdownServer()
db.getSiblingDB(name) get the db at the same db.stats()
server as this one db.version() current version of the server
db.isMaster() check replica primary status db.getMongo().setSlaveOk() allow queries on a replication
db.killOp(opid) kills the current operation in the db slave server
db.listCommands() lists all the db commands db.fsyncLock() flush data to disk and lock server for
backups
db.logout() db.fsyncUnock() unlocks server following a db.fsyncLock()
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
51. Create Employee Collection
• > use tutorial;
• switched to db tutorial
• > db.getCollectionNames();
• []
• > db.employees.insert({name:'Rick Hightower',
gender:'m', gender:'m', phone:'520-555-1212',
age:42});
• Mon Apr 23 23:50:24 [FileAllocator] allocating new
datafile /etc/mongodb/data/tutorial.ns, filling with
zeroes…
• ..
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
52. Query DB (1 of 2)
• > db.getCollectionNames();
• [ "employees", "system.indexes" ]
• > db.employees.find()
• { "_id" : ObjectId("4f964d3000b5874e7a163895"),
"name" : "Rick Hightower", "gender" : "m",
"phone" : "520-555-1212", "age" : 42 }
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
53. Query DB (2 of 2)
• > db.employees.find({name:"Bob"})
• > db.employees.find({name:"Rick Hightower"})
• { "_id" : ObjectId("4f964d3000b5874e7a163895"), "name" : "Rick Hightower", "gender" :
"m", "phone" : "520-555-1212", "age" : 42 }
• > db.employees.find({age:{$lt:100}})
• { "_id" : ObjectId("4f964d3000b5874e7a163895"), "name" : "Rick Hightower", "gender" :
"m", "phone" : "520-555-1212", "age" : 42 }
• > db.employees.find({age:{$lt:100}})[0].name
• Rick Hightower
• > db.system.indexes.find()
• { "v" : 1, "key" : { "_id" : 1 }, "ns" : "tutorial.employees", "name" : "_id_" }
• > db.employees.find({_id : ObjectId("4f964d3000b5874e7a163895")})
• { "_id" : ObjectId("4f964d3000b5874e7a163895"), "name" : "Rick Hightower", "gender" :
"m", "phone" : "520-555-1212", "age" : 42 }
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
54. Java: Setup
• Download latest mongo driver
– https://github.com/mongodb/mongo-java-driver/downloads
• $ mkdir tools/mongodb/lib
• $ cp mongo-2.7.3.jar tools/mongodb/lib
• Create new Eclipse project in new Workspace
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
55. Java: Setup Eclipse (1 of 2)
• Right Click Project, Open Properties, Java Build Path->Libraries->Add Variable-
>Configure Variable
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
56. Java: Setup Eclipse (2 of 2)
• From Properties->Java Build Path->Libraries
• Click Add Variable, Select MONGO, Click Extend…, select jar
file you just downloaded
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
57. Java: Using Java Basics (1 of 2)
Out:
{ "_id" : { "$oid" : "4f964d3000b5874e7a163895"} , "name" : "Rick Hightower" , "gender" : "m" , "phone" : "520-555-1212" , "age" : 42.0}
{ "_id" : { "$oid" : "4f984cce72320612f8f432bb"} , "name" : "Diana Hightower" , "gender" : "f" , "phone" : "520-555-1212" , "age" : 30}
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
58. Using Java Basics (2 of 2)
Output:
Rick?
{ "_id" : { "$oid" : "4f964d3000b5874e7a163895"} , "name" : "Rick Hightower" , "gender" : "m" , "phone" : "520-555-1212" , "age" : 42.0}
Diana?
{ "_id" : { "$oid" : "4f984cae72329d0ecd8716c8"} , "name" : "Diana Hightower" , "gender" : "m" , "phone" : "520-555-1212" , "age" : 30}
Diana by object id?
{ "_id" : { "$oid" : "4f984cce72320612f8f432bb"} , "name" : "Diana Hightower" , "gender" : "f" , "phone" : "520-555-1212" , "age" : 30}
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
59. All of the above but in Python
• Install mongodb lib for Python
• MAC OSX
• $ sudo env ARCHFLAGS='-arch i386 -arch x86_64'
python -m easy_install pymongo
• Linux
• $ easy_install pymongo
• or
• $ pip install pymongo
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
60. Basic Python Operations (1 of 2)
Output:
{u'gender': u'm', u'age': 42.0, u'_id': ObjectId('4f964d3000b5874e7a163895'), u'name': u'Rick Hightower', u'phone':
u'520-555-1212'}
{u'gender': u'm', u'age': 30, u'_id': ObjectId('4f984cae72329d0ecd8716c8'), u'name': u'Diana Hightower', u'phone':
u'520-555-1212'}
{u'gender': u'm', u'age': 8, u'_id': ObjectId('4f9e111980cbd54eea000000'), u'name': u'Lucas Hightower', u'phone':
u'520-555-1212'}
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
62. All of the above but in PHP
• Install on PHP
• $ sudo pecl install mongo
• Add to php.ini:
• extension=mongo.so
• Restart apache
• $ apachectl stop
• $ apachectl start
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
63. Mongo PHP Basics (1 of 2)
Output:
array ( '_id' => MongoId::__set_state(array( '$id' => '4f964d3000b5874e7a163895', )), 'name' => 'Rick Hightower',
'gender' => 'm', 'phone' => '520-555-1212', 'age' => 42, )
array ( '_id' => MongoId::__set_state(array( '$id' => '4f984cae72329d0ecd8716c8', )), 'name' => 'Diana Hightower', 'gender' => ‘f',
'phone' => '520-555-1212', 'age' => 30, )
array ( '_id' => MongoId::__set_state(array( '$id' => '4f9e170580cbd54f27000000', )), 'gender' => 'm', 'age' => 8, 'name' => 'Lucas Hightower',
'phone' => '520-555-1212', )
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
64. Mongo PHP (2 of 2)
Output
Rick?
array ( '_id' => MongoId..., 'name' => 'Rick Hightower', 'gender' => 'm',
'phone' => '520-555-1212', 'age' => 42, )
Diana?
array ( '_id' => MongoId::..., 'name' => 'Diana Hightower', 'gender' => ‘f',
'phone' => '520-555-1212', 'age' => 30, )
Diana by id?
array ( '_id' => MongoId::..., 'name' => 'Diana Hightower', 'gender' => 'f',
'phone' => '520-555-1212', 'age' => 30, )
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
65. Shell commands in action
• > show dbs
• local (empty)
• tutorial 0.203125GB
• > show collections
• employees
• system.indexes
• > show users
• > show profile
• db.system.profile is empty
• Use db.setProfilingLevel(2) will enable profiling
• ..
• > show logs
• global
• > show log global
• Mon Apr 23 23:33:14 [initandlisten] MongoDB starting : pid=11773 port=27017 dbpath=/etc/mongodb/data 64-bit…
• …
• Mon Apr 23 23:33:14 [initandlisten] options: { config: "/etc/mongodb/mongodb.config", dbpath: "/etc/mongodb/data" }
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
66. Collection Methods (1 of 2)
• > db.employees.help()
• DBCollection help
•
• db.employees.find().help() - show DBCursor help
• db.employees.count()
• db.employees.dataSize()
• db.employees.distinct( key ) - eg. db.employees.distinct( 'x' )
• db.employees.drop() drop the collection
• db.employees.dropIndex(name)
• db.employees.dropIndexes()
• db.employees.ensureIndex(keypattern[,options]) - options is an object with these possible fields: name,
unique, dropDups
• db.employees.reIndex()
• db.employees.find([query],[fields]) - query is an optional query filter. fields is optional set of fields to
return. e.g. db.employees.find( {x:77} , {name:1, x:1} )
• db.employees.find(...).count()
• db.employees.find(...).limit(n)
• db.employees.find(...).skip(n)
• db.employees.find(...).sort(...)
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
67. Collection Methods (2 of 2)
db.employees.findOne([query]) db.employees.save(obj)
db.employees.findAndModify( { update : ... , db.employees.stats()
remove : bool [, query: {}, sort: {}, 'new': false] } ) db.employees.storageSize() - includes free
db.employees.getDB() get DB object associated space allocated to this collection
with collection db.employees.totalIndexSize() - size in
db.employees.getIndexes() bytes of all the indexes
db.employees.group( { key : ..., initial: ..., reduce db.employees.totalSize() - storage allocated
: ...[, cond: ...] } ) for all data and indexes
db.employees.mapReduce( mapFunction , db.employees.update(query, object[,
reduceFunction , <optional params> )
upsert_bool, multi_bool])
db.employees.remove(query)
db.employees.validate( <full> ) – SLOW
db.employees.renameCollection( newName ,
<dropT arget> ) renames the collection. db.employees.getShardVersion() - only for
db.employees.runCommand( name , <options> ) use with sharding
runs a db command with the given name where db.employees.getShardDistribution() -
the first param is the collection name prints statistics about data distribution in
the cluster
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
68. Basic shell commands (1 of 2)
• > help
• db.help() help on db methods
• db.mycoll.help() help on collection methods
• rs.help() help on replica set methods
• help admin administrative help
• help connect connecting to a db help
• help keys key shortcuts
• help misc misc things to know
• help mr mapreduce
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
69. Basic shell commands (2 of 2)
• > help
• …
• show dbs show database names
• show collections show collections in current database
• show users show users in current database
• show profile show most recent system.profile entries time>=
1ms
• show logs show the accessible logger names
• show log [name] prints out the last segment of log in memory,
• use <db_name> set current database
• DBQuery.shellBatchSize = x set default number of items to display on
shell
• exit quit the mongo shell
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
70. Tips for scaling mongo
• Roger Bodamer
• http://www.infoq.com/presentations/Scaling-with-Mon
• Good ideas on EC2 shortcoming
• RAID configuration (RAID 10 for speed and scaling)
• Config Servers know where keys are, has key to
shard mapping, mongos refer to config servers
70
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
71. Tips for scaling mongo
• Don’t use sharding unless needed
• 90% of deployments don’t need sharding
according to Roger Bodamer
– Are you Twitter, Linkedin, Facebook, Foursquare? No
– You probably not going to need it
• Replica Sets are more needed
– Why? HA, read scalability
• Mongos can live on primary box
• ConfigServer can live on a primary box
• http://www.infoq.com/presentations/Scaling-with-MongoDB
71
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
72. Tips for scaling mongo
• Replicas should be on separate boxes
72
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
73. Backups
• You can use tools with mongodb
• Or, if your hardware supports shutdowns
• Sync to disk, shutdown cleanly, take a snapshot
• http://www.infoq.com/presentations/Scaling-with-MongoDB
73
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
74. Coming up
• Basic CRUD and queries: Slide deck showing a simple CRUD listing
website in Python, Java and PHP using MySQL and MongoDB
– Justing showing general operations
• Queries: Slide deck improving demo app to do more complex
queries
• Replica Set: Slide deck setting up simple Replica Set in Amazon
EC2 with boto scripts
– Durability modes with examples in Python, PHP and Java
• Sharding: Slide deck setting up Sharding in MongoDB
– Python, PHP and Java
• Map Reduce: Slide deck using sample app to do map reduce in
Java, PHP and Python
74
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
75. More to come
• This is an early version of this.... expect updates
• Looking for some feedback
• Want to grow it out, put it on github, etc.
• Do some compare and contrast between MongoDB,
MySQL, Cassandra, etc.
• Things you won’t get from a vendor
– complaining
– criticism
– shortcomings
75
Copyright © Mammatus Technology Inc. | Licensed under Creative Commons.
Notas do Editor http://openmymind.net/2011/3/28/The-Little-MongoDB-Book/ http://www.10gen.com/what-is-mongodb http://www.infoq.com/articles/mongodb-java-orm-bcd http://en.wikipedia.org/wiki/MongoDB#Use_cases_.26_production_deployments http://www.mongodb.org/display/DOCS/Production+Deployments http://www.thebuzzmedia.com/mongodb-single-server-data-durability-guide/ http://blog.mongodb.org/post/381927266/what-about-durability http://www.mongodb.org/display/DOCS/Replica+Set+Tutorial http://www.mongodb.org/display/DOCS/Replica+Sets http:// www.mongodb.org/display/DOCS/Replication http:// www.mongodb.org/display/DOCS/Verifying+Propagatio n+of+Writes+with+getLastError http://www.mongodb.org/display/DOCS/Verifying+Propagation+of+Writes+with+getLastError http://www.mongodb.org/display/DOCS/Sharding http://www.mongodb.org/display/DOCS/Sharding +Introduction http://code.google.com/p/mapreduce-framework/wiki/MapReduce http://www.mongodb.org/display/DOCS/Aggregation+Framework http://www.mongodb.org/display/DOCS/SQL+to+Aggregation+Fr amework+Mapping+Chart