Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Dev Jumpstart: Build Your First App with MongoDB

New to MongoDB? This talk will introduce the philosophy and features of MongoDB. We’ll discuss the benefits of the document-based data model that MongoDB offers by walking through how one can build a simple app. We’ll cover inserting, updating, and querying the database of books. This session will jumpstart your knowledge of MongoDB development, providing you with context for the rest of the day's content.

Dev Jumpstart: Build Your First App with MongoDB

  1. 1. #mongodb Building your first app; an introduction to MongoDB Sandeep Parikh Senior Solutions Architect, MongoDB
  2. 2. What is MongoDB?
  3. 3. MongoDB is a ___________ database • Document • Open source • High performance • Horizontally scalable • Full featured
  4. 4. Document Database • Not for .PDF & .DOC files • A document is essentially an associative array • Document = JSON object • Document = PHP Array • Document = Python Dict • Document = Ruby Hash • etc
  5. 5. Open Source • MongoDB is an open source project • On GitHub • Licensed under the AGPL • Started & sponsored by MongoDB Inc (formerly 10gen) • Commercial licenses available • Contributions welcome
  6. 6. High Performance • Written in C++ • Extensive use of memory-mapped files i.e. read-through write-through memory caching. • Runs nearly everywhere • Data serialized as BSON (fast parsing) • Full support for primary & secondary indexes • Document model = agile development
  7. 7. Database Landscape
  8. 8. Full Featured • Flexible schema • Rich ad-hoc queries • Real time aggregation • Strongly consistent • Geospatial features • Built-in automatic failover • Horizontally scalable reads/writes • Support for most programming languages
  9. 9. mongodb.org/downloads
  10. 10. Running MongoDB $ tar zxf mongodb-osx-x86_64-2.6.4.tgz $ cd mongodb-osx-x86_64-2.6.4/bin $ mkdir –p /data/db $ ./mongod
  11. 11. Mongo Shell $ mongo MongoDB shell version: 2.6.4 connecting to: test > db.test.insert({text: 'Welcome to MongoDB'}) > db.test.find().pretty() { "_id" : ObjectId("51c34130fbd5d7261b4cdb55"), "text" : "Welcome to MongoDB" }
  12. 12. Building an App with MongoDB
  13. 13. Terminology RDBMS MongoDB Table, View ➜ Collection Row ➜ Document Index ➜ Index Join ➜ Embedded Document Foreign Key ➜ Reference Partition ➜ Shard
  14. 14. Let’s Build a Monitoring System
  15. 15. First step in any application is Determine basic requirements
  16. 16. Basic Monitoring Requirements • Data generated at per-second intervals • Metrics to capture (ex. CPU, memory, IO) • Document structure for fast writes and easy reads
  17. 17. In a relational base app We would start by doing schema design
  18. 18. Relational Schema Options CPU Metrics Memory Metrics IO Metrics Events • Timestamp • CPU metrics • Memory metrics • IO metrics Or
  19. 19. In a MongoDB based app We start with a generic model and let the documents evolve
  20. 20. MongoDB Document Modeling Events Timestamp (min) CPU [] • Second • Metric Memory [] • Second • Metric IO [] • Second • Metric
  21. 21. Working With MongoDB
  22. 22. Start with the Mongo Shell $ mongo MongoDB shell version: 2.6.4 connecting to: test > Full Javascript shell
  23. 23. Switch to Your DB > use monitoring switching to db monitoring DB files are created once you save a document
  24. 24. Create an Empty Event > var event = { ts: ISODate(“2014-09-16T09:00:00”), cpu: [ 0, 0, …, 0 ], memory: [ 0, 0, …, 0 ], io: [ 0, 0, …, 0 ], } Insert zeroed-out arrays to fill in later
  25. 25. Insert the Event > db.events.insert(event) No collection creation necessary
  26. 26. Find One Record > db.events.findOne() { "_id" : ObjectId("50804d0bd94ccab2da652599"), ”ts" : ISODate(“2014-09-16T09:00:00”), ”cpu" : [ 0, 0, …, 0 ], ”memory" : [ 0, 0, …, 0 ], “io” : [ 0, 0, …, 0 ] }
  27. 27. How do you capture events? Serve r Serve r Serve r MongoD B memory interaction interaction interaction
  28. 28. Adding a New Event > db.events.update( { ts: ISODate(“2014-09-16T09:00:00”) } { $set: { “cpu.0” : 50, “memory.0”: 1500, “io.0”: 10 } } ) Use atomic in-place updates to add metric values
  29. 29. How do you plot charts?
  30. 30. Finding an Hour of Events > db.events.find({ ts: { $gte: ISODate(“2014-09-16T09:00:00”), $lt: ISODate(“2014-09-16T10:00:00”) } }).sort({ts:1}) Find using a range and sort results ascending
  31. 31. How do you roll up the data? Hour Avg Cpu 0 50 1 65 2 75 3 40 4 45 5 60 6 25 … … 23 30
  32. 32. Aggregate Metrics > db.events.aggregate([ { $match: { ts: { $gte: date0, $lt: date1 } } }, { $project: { _id: 0, ts: 1, cpu: 1 } }, { $unwind: “$cpu” }, { $group: { _id: { $hour: “$ts” }, avg_cpu: { $avg: “$cpu” } } } ]) Use Aggregation Framework to roll up data
  33. 33. How do you scale this workload • Replica Sets – Add data redundancy – Automatic failover – Tunable durability, consistency • Sharding – Scale reads and writes – Support dynamic data growth – Automatically partitions workload – Horizontally scalable
  34. 34. MongoDB Drivers
  35. 35. Real applications are not built in the shell
  36. 36. MongoDB has native bindings for over 12 languages
  37. 37. MongoDB Drivers • Official Support for 12 languages • Community drivers for tons more • Drivers connect to MongoDB servers • Drivers translate BSON into native types • Shell is not a driver, but works like one in some ways • Installed using typical means (npm, pecl, gem, pip)
  38. 38. docs.mongodb.org
  39. 39. Online Training at MongoDB University
  40. 40. Questions?
  41. 41. #mongodb Thank You Sandeep Parikh Senior Solutions Architect, MongoDB

×