SlideShare a Scribd company logo
Building Your First Application in Java




                               1
is a…

• High performance
• Highly available
• Easily scalable
• Easy to use
• Feature rich

             Document store
Data Model
• A Mongo system holds a set of databases
• A database holds a set of collections
• A collection holds a set of documents
• A document is a set of fields
• A field is a key-value pair
• A key is a name (string)
• A value is a
        basic type like
string, integer, float, timestamp, binary, etc.,
       a document, or
       an array of values
High Availability: Replica Sets
•   Initialize -> Election
•   Primary + data replication from primary to secondary




       Node 1                                 Node 2
      Secondary               Heartbeat      Secondary



                              Node 3
                              Primary               Replication
                Replication
Replica Set - Failure
•   Primary down/network failure
•   Automatic election of new primary if majority exists



                            Primary Election
       Node 1                                   Node 2
      Secondary              Heartbeat         Secondary



                              Node 3
                              Primary
Replica Set - Failover
•   New primary elected
•   Replication established from new primary




       Node 1                                  Node 2
      Secondary             Heartbeat          Primary



                             Node 3
                             Primary
Durability
• Fire and forget
• Wait for error
• Wait for journal sync
• Wait for flush to disk
• Wait for replication
Read Preferences

  •   PRIMARY
  •   PRIMARY PREFERRED
  •   SECONDARY
  •   SECONDARY PREFERRED
  •   NEAREST
Let’s build a location based surf reporting app!
Let’s build a location based surf reporting app!




• Report current conditions
Let’s build a location based surf reporting app!




• Report current conditions
• Get current local conditions
Let’s build a location based surf reporting app!




• Report current conditions
• Get current local conditions
• Determine best conditions per beach
Document Structure
{
    "_id" : ObjectId("504ceb3d30042d707af96fef"),
    "reporter" : "test",
    "location" : {
               "coordinates" : [
                          -122.477222,
                          37.810556
               ],
               "name" : "Fort Point"
    },
    "conditions" : {
               "height" : 0,
               "period" : 9,
               "rating" : 1
    },
    "date" : ISODate("2011-11-16T20:17:17.277Z")
}
Document Structure
{
    "_id" : ObjectId("504ceb3d30042d707af96fef"),   Primary Key,
    "reporter" : "test",
                                                    Unique,
    "location" : {
               "coordinates" : [                    Auto-indexed
                          -122.477222,
                          37.810556
               ],
               "name" : "Fort Point"
    },
    "conditions" : {
               "height" : 0,
               "period" : 9,
               "rating" : 1
    },
    "date" : ISODate("2011-11-16T20:17:17.277Z")
}
Document Structure
{
    "_id" : ObjectId("504ceb3d30042d707af96fef"),   Primary Key,
    "reporter" : "test",
                                                    Unique,
    "location" : {
               "coordinates" : [                    Autoindexed
                          -122.477222,
                          37.810556
               ],                                   Compound Index,
               "name" : "Fort Point"                Geospacial
    },
    "conditions" : {
               "height" : 0,
               "period" : 9,
               "rating" : 1
    },
    "date" : ISODate("2011-11-16T20:17:17.277Z")
}
Document Structure
{
    "_id" : ObjectId("504ceb3d30042d707af96fef"),   Primary Key,
    "reporter" : "test",
                                                    Unique,
    "location" : {
               "coordinates" : [                    Autoindexed
                          -122.477222,
                          37.810556
               ],                                   Compound Index,
               "name" : "Fort Point"                Geospacial
    },
    "conditions" : {
               "height" : 0,
               "period" : 9,
               "rating" : 1
    },                                               Indexed for
    "date" : ISODate("2011-11-16T20:17:17.277Z")     Time-To-Live
}
Get local surf conditions
 db.reports.find(
           {
           "location.coordinates" : { $near : [-122, 37] ,
           $maxDistance : 0.9},
           date : { $gte : new Date(2012, 8, 9)}
           },
           {"date" : 1, "location.name" :1, _id : 0, "conditions" :1}
 ).sort({"conditions.rating" : -1})
Get local surf conditions
 db.reports.find(
           {
           "location.coordinates" : { $near : [-122, 37] ,
           $maxDistance : 0.9},
           date : { $gte : new Date(2012, 8, 9)}
           },
           {"date" : 1, "location.name" :1, _id : 0, "conditions" :1}
 ).sort({"conditions.rating" : -1})

 • Get local reports
Get local surf conditions
 db.reports.find(
           {
           "location.coordinates" : { $near : [-122, 37] ,
           $maxDistance : 0.9},
           date : { $gte : new Date(2012, 8, 9)}
           },
           {"date" : 1, "location.name" :1, _id : 0, "conditions" :1}
 ).sort({"conditions.rating" : -1})

 • Get local reports
 • Get today’s reports
Get local surf conditions
 db.reports.find(
           {
           "location.coordinates" : { $near : [-122, 37] ,
           $maxDistance : 0.9},
           date : { $gte : new Date(2012, 8, 9)}
           },
           {"location.name" :1, _id : 0, "conditions" :1}
 ).sort({"conditions.rating" : -1})

 • Get local reports
 • Get today’s reports
 • Return only the relevant info
Get local surf conditions
 db.reports.find(
           {
           "location.coordinates" : { $near : [-122, 37] ,
           $maxDistance : 0.9},
           date : { $gte : new Date(2012, 8, 9)}
           },
           {"location.name" :1, _id : 0, "conditions" :1}
 ).sort({"conditions.rating" : -1})

 •   Get local reports
 •   Get today’s reports
 •   Return only the relevant info
 •   Show me the best surf first
Get local surf conditions: Connecting
DBObjects




 Output:
            { "name" : "test"}
            parsed
Building the query
Results
{ "location" : { "name" : "Montara" }, "conditions" : { "height" : 6, "period" : 20, "rating" : 5 } }
{ "location" : { "name" : "Maverick's" }, "conditions" : { "height" : 5, "period" : 13, "rating" : 3 } }
{ "location" : { "name" : "Maverick's" }, "conditions" : { "height" : 3, "period" : 15, "rating" : 3 } }
{ "location" : { "name" : "Maverick's" }, "conditions" : { "height" : 3, "period" : 16, "rating" : 2 } }
{ "location" : { "name" : "Montara" }, "conditions" : { "height" : 0, "period" : 8, "rating" : 1 } }
{ "location" : { "name" : "Linda Mar" }, "conditions" : { "height" : 3, "period" : 10, "rating" : 1 } }
{ "location" : { "name" : "Sharp Park" }, "conditions" : { "height" : 1, "period" : 15, "rating" : 1 } }
{ "location" : { "name" : "Sharp Park" }, "conditions" : { "height" : 5, "period" : 6, "rating" : 1 } }
{ "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 1, "period" : 6, "rating" : 1 } }
{ "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 0, "period" : 10, "rating" : 1 } }
{ "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 4, "period" : 6, "rating" : 1 } }
{ "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 0, "period" : 14, "rating" : 1 } }
Analysis Features:
  Aggregation Framework




  What are the best conditions for my local beach?
Pipelining Operations
  $match    Match “Linda Mar”


 $project   Only interested in conditions

            Group by rating, averaging
  $group
            wave height and wave period

   $sort    Order by best conditions
Aggregation Framework
{ "aggregate" : "reports" ,
   "pipeline" : [
     { "$match" : { "location.name" : "Linda Mar"}} ,
     { "$project" : { "conditions" : 1}} ,
     { "$group" : {
        "_id" : "$conditions.rating" ,
        "average height" : { "$avg" : "$conditions.height"} ,
        "average period" : { "$avg" : "$conditions.period"}}} ,
     { "$sort" : { "_id" : -1}}
   ]
}
Aggregation Framework
{ "aggregate" : "reports" ,
   "pipeline" : [
     { "$match" : { "location.name" : "Linda Mar"}} ,
     { "$project" : { "conditions" : 1}} ,
     { "$group" : {
        "_id" : "$conditions.rating" ,
        "average height" : { "$avg" : "$conditions.height"} ,
        "average period" : { "$avg" : "$conditions.period"}}} ,
     { "$sort" : { "_id" : -1}}
   ]
}


                     Match “Linda Mar”
Aggregation Framework
{ "aggregate" : "reports" ,
   "pipeline" : [
     { "$match" : { "location.name" : "Linda Mar"}} ,
     { "$project" : { "conditions" : 1}} ,
     { "$group" : {
        "_id" : "$conditions.rating" ,
        "average height" : { "$avg" : "$conditions.height"} ,
        "average period" : { "$avg" : "$conditions.period"}}} ,
     { "$sort" : { "_id" : -1}}
   ]
}


                 Only interested in conditions
Aggregation Framework
{ "aggregate" : "reports" ,
   "pipeline" : [
     { "$match" : { "location.name" : "Linda Mar"}} ,
     { "$project" : { "conditions" : 1}} ,
     { "$group" : {
        "_id" : "$conditions.rating" ,
        "average height" : { "$avg" : "$conditions.height"} ,
        "average period" : { "$avg" : "$conditions.period"}}} ,
     { "$sort" : { "_id" : -1}}
   ]
}


       Group by rating & average conditions
Aggregation Framework
{ "aggregate" : "reports" ,
   "pipeline" : [
     { "$match" : { "location.name" : "Linda Mar"}} ,
     { "$project" : { "conditions" : 1}} ,
     { "$group" : {
        "_id" : "$conditions.rating" ,
        "average height" : { "$avg" : "$conditions.height"} ,
        "average period" : { "$avg" : "$conditions.period"}}} ,
     { "$sort" : { "_id" : -1}}
   ]
}


            Show me best conditions first
The Aggregation Helper
Scaling
• Sharding is the partitioning of data among
  multiple machines
• Balancing occurs when the load on any one
  node grows out of proportion
Scaling MongoDB

  Sharded cluster


                MongoDB

              Single Instance
                    Or
                Replica Set
                                  Client
                                Application
The Mechanism of Sharding
                         Complete Data Set

Define Shard Key on Location Name




    Fort Point         Linda Mar    Maverick’s   Ocean Beach   Rockaway
The Mechanism of Sharding
                 Chunk                                  Chunk

Define Shard Key on Location Name




    Fort Point           Linda Mar   Maverick’s   Ocean Beach   Rockaway
The Mechanism of Sharding
 Chunk        Chunk               Chunk               Chunk




 Fort Point   Linda Mar   Maverick’s   Ocean Beach   Rockaway
The Mechanism of Sharding
 Chunk        Chunk             Chunk               Chunk




 Fort Point   Linda Mar   Maverick’s   Ocean Beach Rockaway


  Shard 1     Shard 2             Shard 3            Shard 4
The Mechanism of Sharding




 Chu      Chu
 nkc      nkc

 Chu      Chu    Chu   Chu        Chu    Chu   Chu   Chu
 nkc      nkc    nkc   nkc        nkc    nkc   nkc   nkc




       Shard 1   Shard 2            Shard 3    Shard 4




                             40
The Mechanism of Sharding
                                    Client
       Query: Linda Mar           Application



 Chu                                                          Chu
 nkc                                                          nkc

 Chu      Chu             Chu   Chu        Chu    Chu   Chu   Chu
 nkc      nkc             nkc   nkc        nkc    nkc   nkc   nkc




       Shard 1            Shard 2            Shard 3    Shard 4




                                      41
The Mechanism of Sharding
                                     Client
       Query: Maverick’s           Application



 Chu                                                           Chu
 nkc                                                           nkc

 Chu      Chu              Chu   Chu        Chu    Chu   Chu   Chu
 nkc      nkc              nkc   nkc        nkc    nkc   nkc   nkc




       Shard 1             Shard 2            Shard 3    Shard 4




                                       42
Thanks!
 Office Hours
 Thursdays 4-6 pm
 555 University Ave.
 Palo Alto

     We’re Hiring !
Bryan.reinero@10gen.com

More Related Content

What's hot (20)

PDF
Erlang for data ops
mnacos
 
PDF
Indexing
Mike Dirolf
 
PDF
Elastic search 검색
HyeonSeok Choi
 
PPTX
MongoDB San Francisco 2013: Hash-based Sharding in MongoDB 2.4 presented by B...
MongoDB
 
PDF
Inside MongoDB: the Internals of an Open-Source Database
Mike Dirolf
 
PDF
Mongodb debugging-performance-problems
MongoDB
 
PDF
dotSwift - From Problem to Solution
soroushkhanlou
 
PPTX
MongoDB Online Conference: Introducing MongoDB 2.2
MongoDB
 
PDF
Mobile Web 5.0
Michael Galpin
 
PDF
Scylla core dump debugging tools
Tomasz Grabiec
 
PDF
php plus mysql
Jayson de Leon
 
PPTX
MongoDB + Java - Everything you need to know
Norberto Leite
 
PDF
MongoDBで作るソーシャルデータ新解析基盤
Takahiro Inoue
 
PDF
MongoDB全機能解説2
Takahiro Inoue
 
PDF
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
Christian Baranowski
 
PDF
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB
 
KEY
Web programming in Haskell
chriseidhof
 
PPTX
Open Source Search: An Analysis
Justin Finkelstein
 
PDF
MySQL flexible schema and JSON for Internet of Things
Alexander Rubin
 
PDF
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
MongoDB
 
Erlang for data ops
mnacos
 
Indexing
Mike Dirolf
 
Elastic search 검색
HyeonSeok Choi
 
MongoDB San Francisco 2013: Hash-based Sharding in MongoDB 2.4 presented by B...
MongoDB
 
Inside MongoDB: the Internals of an Open-Source Database
Mike Dirolf
 
Mongodb debugging-performance-problems
MongoDB
 
dotSwift - From Problem to Solution
soroushkhanlou
 
MongoDB Online Conference: Introducing MongoDB 2.2
MongoDB
 
Mobile Web 5.0
Michael Galpin
 
Scylla core dump debugging tools
Tomasz Grabiec
 
php plus mysql
Jayson de Leon
 
MongoDB + Java - Everything you need to know
Norberto Leite
 
MongoDBで作るソーシャルデータ新解析基盤
Takahiro Inoue
 
MongoDB全機能解説2
Takahiro Inoue
 
BDD - Behavior Driven Development Webapps mit Groovy Spock und Geb
Christian Baranowski
 
MongoDB .local Paris 2020: La puissance du Pipeline d'Agrégation de MongoDB
MongoDB
 
Web programming in Haskell
chriseidhof
 
Open Source Search: An Analysis
Justin Finkelstein
 
MySQL flexible schema and JSON for Internet of Things
Alexander Rubin
 
MongoDB Europe 2016 - ETL for Pros – Getting Data Into MongoDB The Right Way
MongoDB
 

Similar to Building your first Java Application with MongoDB (20)

PDF
A Century Of Weather Data - Midwest.io
Randall Hunt
 
PPTX
Operational Intelligence with MongoDB Webinar
MongoDB
 
PDF
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
confluent
 
PDF
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
MongoDB
 
PDF
MongoDB: Optimising for Performance, Scale & Analytics
Server Density
 
KEY
Mongo db presentation
Julie Sommerville
 
PPTX
N1QL: What's new in Couchbase 5.0
Keshav Murthy
 
PDF
Latinoware
kchodorow
 
KEY
Building Your First MongoDB Application
Rick Copeland
 
PDF
MongoDB Performance Tuning
MongoDB
 
ODP
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
DataStax Academy
 
ODP
Intravert Server side processing for Cassandra
Edward Capriolo
 
PDF
d3sparql.js demo at SWAT4LS 2014 in Berlin
Toshiaki Katayama
 
PPTX
Webinar: General Technical Overview of MongoDB for Dev Teams
MongoDB
 
PPTX
Agg framework selectgroup feb2015 v2
MongoDB
 
PPTX
Webinar: Index Tuning and Evaluation
MongoDB
 
PPTX
Couchbase Tutorial: Big data Open Source Systems: VLDB2018
Keshav Murthy
 
PPTX
MongoDB for Time Series Data Part 2: Analyzing Time Series Data Using the Agg...
MongoDB
 
PPTX
Introduction to MongoDB for C# developers
Taras Romanyk
 
PPTX
MongoDB 3.2 - Analytics
Massimo Brignoli
 
A Century Of Weather Data - Midwest.io
Randall Hunt
 
Operational Intelligence with MongoDB Webinar
MongoDB
 
Closing the Loop in Extended Reality with Kafka Streams and Machine Learning ...
confluent
 
Ensuring High Availability for Real-time Analytics featuring Boxed Ice / Serv...
MongoDB
 
MongoDB: Optimising for Performance, Scale & Analytics
Server Density
 
Mongo db presentation
Julie Sommerville
 
N1QL: What's new in Couchbase 5.0
Keshav Murthy
 
Latinoware
kchodorow
 
Building Your First MongoDB Application
Rick Copeland
 
MongoDB Performance Tuning
MongoDB
 
NYC* 2013 - "Advanced Data Processing: Beyond Queries and Slices"
DataStax Academy
 
Intravert Server side processing for Cassandra
Edward Capriolo
 
d3sparql.js demo at SWAT4LS 2014 in Berlin
Toshiaki Katayama
 
Webinar: General Technical Overview of MongoDB for Dev Teams
MongoDB
 
Agg framework selectgroup feb2015 v2
MongoDB
 
Webinar: Index Tuning and Evaluation
MongoDB
 
Couchbase Tutorial: Big data Open Source Systems: VLDB2018
Keshav Murthy
 
MongoDB for Time Series Data Part 2: Analyzing Time Series Data Using the Agg...
MongoDB
 
Introduction to MongoDB for C# developers
Taras Romanyk
 
MongoDB 3.2 - Analytics
Massimo Brignoli
 
Ad

More from MongoDB (20)

PDF
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
PDF
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
PDF
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
PDF
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
PDF
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
PDF
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
PDF
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
PDF
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
PDF
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
PDF
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
PDF
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
PDF
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
PDF
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB
 
Ad

Recently uploaded (20)

PDF
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
PDF
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
PDF
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
PPTX
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
PPTX
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
PPTX
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
PDF
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
PDF
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
PPTX
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
PDF
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
DOCX
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
DOCX
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
PPTX
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
PDF
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
PPTX
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
PDF
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
PDF
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
PPTX
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
PDF
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
PDF
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 
CIFDAQ Token Spotlight for 9th July 2025
CIFDAQ
 
"AI Transformation: Directions and Challenges", Pavlo Shaternik
Fwdays
 
“NPU IP Hardware Shaped Through Software and Use-case Analysis,” a Presentati...
Edge AI and Vision Alliance
 
Designing_the_Future_AI_Driven_Product_Experiences_Across_Devices.pptx
presentifyai
 
Webinar: Introduction to LF Energy EVerest
DanBrown980551
 
"Autonomy of LLM Agents: Current State and Future Prospects", Oles` Petriv
Fwdays
 
Bitcoin for Millennials podcast with Bram, Power Laws of Bitcoin
Stephen Perrenod
 
Newgen 2022-Forrester Newgen TEI_13 05 2022-The-Total-Economic-Impact-Newgen-...
darshakparmar
 
Mastering ODC + Okta Configuration - Chennai OSUG
HathiMaryA
 
Transcript: Book industry state of the nation 2025 - Tech Forum 2025
BookNet Canada
 
Python coding for beginners !! Start now!#
Rajni Bhardwaj Grover
 
Cryptography Quiz: test your knowledge of this important security concept.
Rajni Bhardwaj Grover
 
AI Penetration Testing Essentials: A Cybersecurity Guide for 2025
defencerabbit Team
 
Transcript: New from BookNet Canada for 2025: BNC BiblioShare - Tech Forum 2025
BookNet Canada
 
The Project Compass - GDG on Campus MSIT
dscmsitkol
 
CIFDAQ Market Insights for July 7th 2025
CIFDAQ
 
[Newgen] NewgenONE Marvin Brochure 1.pdf
darshakparmar
 
AUTOMATION AND ROBOTICS IN PHARMA INDUSTRY.pptx
sameeraaabegumm
 
What’s my job again? Slides from Mark Simos talk at 2025 Tampa BSides
Mark Simos
 
POV_ Why Enterprises Need to Find Value in ZERO.pdf
darshakparmar
 

Building your first Java Application with MongoDB

  • 1. Building Your First Application in Java 1
  • 2. is a… • High performance • Highly available • Easily scalable • Easy to use • Feature rich Document store
  • 3. Data Model • A Mongo system holds a set of databases • A database holds a set of collections • A collection holds a set of documents • A document is a set of fields • A field is a key-value pair • A key is a name (string) • A value is a basic type like string, integer, float, timestamp, binary, etc., a document, or an array of values
  • 4. High Availability: Replica Sets • Initialize -> Election • Primary + data replication from primary to secondary Node 1 Node 2 Secondary Heartbeat Secondary Node 3 Primary Replication Replication
  • 5. Replica Set - Failure • Primary down/network failure • Automatic election of new primary if majority exists Primary Election Node 1 Node 2 Secondary Heartbeat Secondary Node 3 Primary
  • 6. Replica Set - Failover • New primary elected • Replication established from new primary Node 1 Node 2 Secondary Heartbeat Primary Node 3 Primary
  • 7. Durability • Fire and forget • Wait for error • Wait for journal sync • Wait for flush to disk • Wait for replication
  • 8. Read Preferences • PRIMARY • PRIMARY PREFERRED • SECONDARY • SECONDARY PREFERRED • NEAREST
  • 9. Let’s build a location based surf reporting app!
  • 10. Let’s build a location based surf reporting app! • Report current conditions
  • 11. Let’s build a location based surf reporting app! • Report current conditions • Get current local conditions
  • 12. Let’s build a location based surf reporting app! • Report current conditions • Get current local conditions • Determine best conditions per beach
  • 13. Document Structure { "_id" : ObjectId("504ceb3d30042d707af96fef"), "reporter" : "test", "location" : { "coordinates" : [ -122.477222, 37.810556 ], "name" : "Fort Point" }, "conditions" : { "height" : 0, "period" : 9, "rating" : 1 }, "date" : ISODate("2011-11-16T20:17:17.277Z") }
  • 14. Document Structure { "_id" : ObjectId("504ceb3d30042d707af96fef"), Primary Key, "reporter" : "test", Unique, "location" : { "coordinates" : [ Auto-indexed -122.477222, 37.810556 ], "name" : "Fort Point" }, "conditions" : { "height" : 0, "period" : 9, "rating" : 1 }, "date" : ISODate("2011-11-16T20:17:17.277Z") }
  • 15. Document Structure { "_id" : ObjectId("504ceb3d30042d707af96fef"), Primary Key, "reporter" : "test", Unique, "location" : { "coordinates" : [ Autoindexed -122.477222, 37.810556 ], Compound Index, "name" : "Fort Point" Geospacial }, "conditions" : { "height" : 0, "period" : 9, "rating" : 1 }, "date" : ISODate("2011-11-16T20:17:17.277Z") }
  • 16. Document Structure { "_id" : ObjectId("504ceb3d30042d707af96fef"), Primary Key, "reporter" : "test", Unique, "location" : { "coordinates" : [ Autoindexed -122.477222, 37.810556 ], Compound Index, "name" : "Fort Point" Geospacial }, "conditions" : { "height" : 0, "period" : 9, "rating" : 1 }, Indexed for "date" : ISODate("2011-11-16T20:17:17.277Z") Time-To-Live }
  • 17. Get local surf conditions db.reports.find( { "location.coordinates" : { $near : [-122, 37] , $maxDistance : 0.9}, date : { $gte : new Date(2012, 8, 9)} }, {"date" : 1, "location.name" :1, _id : 0, "conditions" :1} ).sort({"conditions.rating" : -1})
  • 18. Get local surf conditions db.reports.find( { "location.coordinates" : { $near : [-122, 37] , $maxDistance : 0.9}, date : { $gte : new Date(2012, 8, 9)} }, {"date" : 1, "location.name" :1, _id : 0, "conditions" :1} ).sort({"conditions.rating" : -1}) • Get local reports
  • 19. Get local surf conditions db.reports.find( { "location.coordinates" : { $near : [-122, 37] , $maxDistance : 0.9}, date : { $gte : new Date(2012, 8, 9)} }, {"date" : 1, "location.name" :1, _id : 0, "conditions" :1} ).sort({"conditions.rating" : -1}) • Get local reports • Get today’s reports
  • 20. Get local surf conditions db.reports.find( { "location.coordinates" : { $near : [-122, 37] , $maxDistance : 0.9}, date : { $gte : new Date(2012, 8, 9)} }, {"location.name" :1, _id : 0, "conditions" :1} ).sort({"conditions.rating" : -1}) • Get local reports • Get today’s reports • Return only the relevant info
  • 21. Get local surf conditions db.reports.find( { "location.coordinates" : { $near : [-122, 37] , $maxDistance : 0.9}, date : { $gte : new Date(2012, 8, 9)} }, {"location.name" :1, _id : 0, "conditions" :1} ).sort({"conditions.rating" : -1}) • Get local reports • Get today’s reports • Return only the relevant info • Show me the best surf first
  • 22. Get local surf conditions: Connecting
  • 23. DBObjects Output: { "name" : "test"} parsed
  • 25. Results { "location" : { "name" : "Montara" }, "conditions" : { "height" : 6, "period" : 20, "rating" : 5 } } { "location" : { "name" : "Maverick's" }, "conditions" : { "height" : 5, "period" : 13, "rating" : 3 } } { "location" : { "name" : "Maverick's" }, "conditions" : { "height" : 3, "period" : 15, "rating" : 3 } } { "location" : { "name" : "Maverick's" }, "conditions" : { "height" : 3, "period" : 16, "rating" : 2 } } { "location" : { "name" : "Montara" }, "conditions" : { "height" : 0, "period" : 8, "rating" : 1 } } { "location" : { "name" : "Linda Mar" }, "conditions" : { "height" : 3, "period" : 10, "rating" : 1 } } { "location" : { "name" : "Sharp Park" }, "conditions" : { "height" : 1, "period" : 15, "rating" : 1 } } { "location" : { "name" : "Sharp Park" }, "conditions" : { "height" : 5, "period" : 6, "rating" : 1 } } { "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 1, "period" : 6, "rating" : 1 } } { "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 0, "period" : 10, "rating" : 1 } } { "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 4, "period" : 6, "rating" : 1 } } { "location" : { "name" : "South Ocean Beach" }, "conditions" : { "height" : 0, "period" : 14, "rating" : 1 } }
  • 26. Analysis Features: Aggregation Framework What are the best conditions for my local beach?
  • 27. Pipelining Operations $match Match “Linda Mar” $project Only interested in conditions Group by rating, averaging $group wave height and wave period $sort Order by best conditions
  • 28. Aggregation Framework { "aggregate" : "reports" , "pipeline" : [ { "$match" : { "location.name" : "Linda Mar"}} , { "$project" : { "conditions" : 1}} , { "$group" : { "_id" : "$conditions.rating" , "average height" : { "$avg" : "$conditions.height"} , "average period" : { "$avg" : "$conditions.period"}}} , { "$sort" : { "_id" : -1}} ] }
  • 29. Aggregation Framework { "aggregate" : "reports" , "pipeline" : [ { "$match" : { "location.name" : "Linda Mar"}} , { "$project" : { "conditions" : 1}} , { "$group" : { "_id" : "$conditions.rating" , "average height" : { "$avg" : "$conditions.height"} , "average period" : { "$avg" : "$conditions.period"}}} , { "$sort" : { "_id" : -1}} ] } Match “Linda Mar”
  • 30. Aggregation Framework { "aggregate" : "reports" , "pipeline" : [ { "$match" : { "location.name" : "Linda Mar"}} , { "$project" : { "conditions" : 1}} , { "$group" : { "_id" : "$conditions.rating" , "average height" : { "$avg" : "$conditions.height"} , "average period" : { "$avg" : "$conditions.period"}}} , { "$sort" : { "_id" : -1}} ] } Only interested in conditions
  • 31. Aggregation Framework { "aggregate" : "reports" , "pipeline" : [ { "$match" : { "location.name" : "Linda Mar"}} , { "$project" : { "conditions" : 1}} , { "$group" : { "_id" : "$conditions.rating" , "average height" : { "$avg" : "$conditions.height"} , "average period" : { "$avg" : "$conditions.period"}}} , { "$sort" : { "_id" : -1}} ] } Group by rating & average conditions
  • 32. Aggregation Framework { "aggregate" : "reports" , "pipeline" : [ { "$match" : { "location.name" : "Linda Mar"}} , { "$project" : { "conditions" : 1}} , { "$group" : { "_id" : "$conditions.rating" , "average height" : { "$avg" : "$conditions.height"} , "average period" : { "$avg" : "$conditions.period"}}} , { "$sort" : { "_id" : -1}} ] } Show me best conditions first
  • 34. Scaling • Sharding is the partitioning of data among multiple machines • Balancing occurs when the load on any one node grows out of proportion
  • 35. Scaling MongoDB Sharded cluster MongoDB Single Instance Or Replica Set Client Application
  • 36. The Mechanism of Sharding Complete Data Set Define Shard Key on Location Name Fort Point Linda Mar Maverick’s Ocean Beach Rockaway
  • 37. The Mechanism of Sharding Chunk Chunk Define Shard Key on Location Name Fort Point Linda Mar Maverick’s Ocean Beach Rockaway
  • 38. The Mechanism of Sharding Chunk Chunk Chunk Chunk Fort Point Linda Mar Maverick’s Ocean Beach Rockaway
  • 39. The Mechanism of Sharding Chunk Chunk Chunk Chunk Fort Point Linda Mar Maverick’s Ocean Beach Rockaway Shard 1 Shard 2 Shard 3 Shard 4
  • 40. The Mechanism of Sharding Chu Chu nkc nkc Chu Chu Chu Chu Chu Chu Chu Chu nkc nkc nkc nkc nkc nkc nkc nkc Shard 1 Shard 2 Shard 3 Shard 4 40
  • 41. The Mechanism of Sharding Client Query: Linda Mar Application Chu Chu nkc nkc Chu Chu Chu Chu Chu Chu Chu Chu nkc nkc nkc nkc nkc nkc nkc nkc Shard 1 Shard 2 Shard 3 Shard 4 41
  • 42. The Mechanism of Sharding Client Query: Maverick’s Application Chu Chu nkc nkc Chu Chu Chu Chu Chu Chu Chu Chu nkc nkc nkc nkc nkc nkc nkc nkc Shard 1 Shard 2 Shard 3 Shard 4 42
  • 43. Thanks! Office Hours Thursdays 4-6 pm 555 University Ave. Palo Alto We’re Hiring ! [email protected]

Editor's Notes

  • #9: Read from any of the fastest responding nodes.