SlideShare a Scribd company logo
1 of 18
Download to read offline
Introduction to NoSQL db and mongoDB
BIO
Senior SW Engineer
@RAI Radiotelevisione italiana
Rome, Italy

QUIT IT APP
@quititapp

GET IN TOUCH!
roberto.belardo@gmail.com	
  
	
  
@robertobelardo	
  
	
  
robertobelardo.wordpress.com	
  
	
  
Skype:	
  backslash451	
  
Traditional RDBMS
ACID (atomicity, Consistency, Isolation, Durability)
Great for relation data
widely adopted and well understood
TRANSACTIONS
JOINS
but…
• 
• 
• 
• 

joins are slow
do not scale easily
SQL is a pain in the ass -> ORM
SCHema are not flexible
- and -
NOSQL DB
ONLY

• 
• 
• 
• 

ACID-LESS (NOT ALWAYS SWEET)
Elastic scaling
Big data
Flexible data models

KEY/VALUE STORES
memcached db
project voldemort
redis
dynamo

DOCUMENT DB
mongo db
couch base

GRAPH STORES
neo4j
orient db
allegro
virtuoso

wide column stores
big table
hbase
accumulo
cassandra
Introduction to NoSQL db and mongoDB
mongo features
• 
• 
• 
• 
• 

Schema-less
bson document (binary json)
full index support
replication and high availability
Easy to use
Jargon
RDBMS	
  

mongoDB	
  

Table	
  

Collec=on	
  

Row(s)	
  

(JSON)	
  Document	
  

Column	
  

Field	
  

Index	
  

Index	
  

Join	
  

Embedding	
  &	
  Linking	
  

Par==on	
  

Shard	
  

GROUP	
  BY	
  

Aggrega=on	
  
Data SNIPPET
{“_id”: !ObjectId(“4dfa6baa9c65dae09a4bbda5”),!
“title”: “Programming in Scala”,!
“author”: [!
!{!
! !“first_name”:
! !“Martin”,!
! !“last_name”: ! !“Odersky”,!
! !“nationality”: !“DE”,!
! !“year_of_birth”:
!1958!
!},!
!{!
! !“first_name”:
! !“Lex”,!
! !“last_name”: ! !“Spoon”!
!},!
!{!
! !“first_name”:
! !“Bill”,!
! !“last_name”: ! !“Venners”!
!}!
]}!
CRUD querying
INSERT	
  a	
  document	
  in	
  a	
  collec7on	
  
> db.foo.insert({name:”Sauron”, type:”bad-ass”, address:”Mordor”, eyes:1})!

SELECT	
  all	
  documents	
  in	
  a	
  collec7on	
  
> db.foo.find()!

SELECT	
  some	
  documents	
  in	
  a	
  collec7on	
  
> db.foo.find({eyes:1})

> db.foo.find({eyes:1, type:”bad-ass”})!

UPDATE	
  a	
  document	
  in	
  a	
  collec7on	
  
> db.foo.save({_id:10, name:”Sauron”, type:”good boy”})!
> db.foo.update({type:”bad-ass”},{$inc:{eyes:1}},{multi:true})!

DELETE	
  all	
  documents	
  in	
  a	
  collec7on	
  
> db.foo.remove()!

DELETE	
  some	
  documents	
  in	
  a	
  collec7on	
  
> db.foo.remove({eyes:1})!
Advanced
STUFF
WRITE CONCERNS

“Specifies	
  where	
  a	
  write	
  (insert)	
  opera3on	
  has	
  succeeded.”	
  
“In	
  some	
  failure	
  cases,	
  write	
  opera3ons	
  issued	
  with	
  weak	
  write	
  concerns	
  may	
  not	
  persist.”	
  

weak concern fast writes

“With	
  stronger	
  write	
  concerns,	
  clients	
  wait	
  aAer	
  sending	
  a	
  write	
  opera3on	
  for	
  MongoDB	
  to	
  
confirm	
  the	
  write	
  opera3on.”	
  

errors ignored w:-1

It	
  does	
  not	
  acknowledge	
  write	
  op.	
  and	
  the	
  client	
  cannot	
  detect	
  failed	
  write	
  op.	
  

unacknowledged w:0

It	
  does	
  not	
  acknowledge	
  write	
  op.	
  but	
  driver	
  aUempt	
  to	
  handle	
  network	
  errors.	
  

acknowledged w:1

It	
  confirms	
  the	
  receipt	
  of	
  the	
  write	
  op.	
  allowing	
  clients	
  to	
  catch	
  errors.	
  

journaled w:1,j:true

It	
  confirms	
  the	
  receipt	
  of	
  the	
  write	
  op.	
  only	
  aWer	
  commiXng	
  the	
  data	
  to	
  journal.	
  

replica acknowledged w:n (n>1)

It	
  confirms	
  the	
  receipt	
  of	
  the	
  write	
  op.	
  	
  aWer	
  acknowledging	
  primary	
  and	
  n-­‐1	
  secondaries.	
  

DEFAULT	
  
INDEXES

Without	
  indexes,	
  mongoDB	
  must	
  scan	
  every	
  document	
  in	
  a	
  collec3on!	
  
index types

Default _ID
single field
compound index
multikey index
geospatial index
text indexes
hashed indexes
properties

unique indexes
sparse indexes

creating indexes
> db.foo.ensureIndex({phone-number:1}) !
!
> db.foo.ensureIndex({name:1, phone-number:1})!
!
> db.foo.ensureIndex({name:1}, {unique:true})!

> db.foo.ensureIndex({nickname:1}, {sparse:true})!
!
> db.foo.ensureIndex({a:1},{unique:true,sparse:true})!
REPLICAtion

Replica3on	
  provides	
  redundancy	
  and	
  increases	
  data	
  availability.	
  

Automatic failover: ELECTIONS
SHARDING
horizontal scaling the mongoway

SHARDimmutable
KEYs
shard key is

{

range based sharding
hash based sharding

. easily divisible among shards
. high degree of randomness
. targets a single shard
. compound shard key

> db.runCommand({ shardcollection:”test.users”, !
!
!
!
!
!key: { email:1}})!

split--ting
triggered automatically by a mongos if a chunk goes
beyond max size (default 64mb)

Balanc

ing

triggered automatically by a mongos if there is a chunk
imbalance (8+ chunks)
Aggre | gation

MaP
Reduce

framework

operators

. filter
. project
. unwind
. group
. sort
. limit

> db.article.aggregate(!
!{ $project: {author:1, tags: 1}},!
!{ $unwind: “$tags”},!
!{ $group: { !_id: “$tags”, !
!
!
!
!authors: { $addToSet: “$author”}}})!

{ “result”:
!{“_id”:
!{“_id”:
!{“_id”:
!{“_id”:
!],!
!“ok”:1!
}!

[!
“art”, “authors”:[“bill”, “bob”]},!
“sports”, “authors”:[“jane”, “bob”]},!
“food”, “authors”:[“jane”, “bob”]},!
“science”, “authors”:[“jane”, “bob”, “bill”]},!
still a lot to cover!
map reduce
geo spatial
GRID FS
drivers
etc….
resources
hBp://www.mongodb.org/	
  
hBp://www.mongodb.com/learn/nosql	
  
hBp://www.mongodb.org/about/introduc7on/	
  
hBp://try.mongodb.org/	
  
hBp://www.slideshare.net/spacemonkeylabs/data-­‐as-­‐documents-­‐overview-­‐and-­‐intro-­‐
to-­‐mongodb	
  
•  hBps://speakerdeck.com/backslash451	
  
•  hBps://educa7on.mongodb.com/	
  
•  hBp://lmgQy.com/?q=mongoDB	
  
• 
• 
• 
• 
• 

More Related Content

Similar to Introduction to NoSQL db and mongoDB

44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
44spotkaniePLSSUGWRO_CoNowegowKrainieChmur44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
44spotkaniePLSSUGWRO_CoNowegowKrainieChmurTobias Koprowski
 
2011-12-13 NoSQL aus der Praxis
2011-12-13 NoSQL aus der Praxis2011-12-13 NoSQL aus der Praxis
2011-12-13 NoSQL aus der PraxisJohannes Hoppe
 
Experience sql server on l inux and docker
Experience sql server on l inux and dockerExperience sql server on l inux and docker
Experience sql server on l inux and dockerBob Ward
 
Erlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughputErlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughputPaolo Negri
 
Erlang as a Cloud Citizen
Erlang as a Cloud CitizenErlang as a Cloud Citizen
Erlang as a Cloud CitizenWooga
 
Erlang and the Cloud: A Fractal Approach to Throughput
Erlang and the Cloud: A Fractal Approach to ThroughputErlang and the Cloud: A Fractal Approach to Throughput
Erlang and the Cloud: A Fractal Approach to ThroughputWooga
 
SQL Azure Dec 2010 Update
SQL Azure Dec 2010 UpdateSQL Azure Dec 2010 Update
SQL Azure Dec 2010 UpdateEric Nelson
 
SQL Azure Dec Update
SQL Azure Dec UpdateSQL Azure Dec Update
SQL Azure Dec UpdateEric Nelson
 
Couchbase - Yet Another Introduction
Couchbase - Yet Another IntroductionCouchbase - Yet Another Introduction
Couchbase - Yet Another IntroductionKelum Senanayake
 
Brk2051 sql server on linux and docker
Brk2051 sql server on linux and dockerBrk2051 sql server on linux and docker
Brk2051 sql server on linux and dockerBob Ward
 
Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...
Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...
Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...Andre Essing
 
Dropping ACID: Wrapping Your Mind Around NoSQL Databases
Dropping ACID: Wrapping Your Mind Around NoSQL DatabasesDropping ACID: Wrapping Your Mind Around NoSQL Databases
Dropping ACID: Wrapping Your Mind Around NoSQL DatabasesKyle Banerjee
 
Azure doc db (slideshare)
Azure doc db (slideshare)Azure doc db (slideshare)
Azure doc db (slideshare)David Green
 
MongoDB - General Purpose Database
MongoDB - General Purpose DatabaseMongoDB - General Purpose Database
MongoDB - General Purpose DatabaseAshnikbiz
 

Similar to Introduction to NoSQL db and mongoDB (20)

The RDBMS You Should Be Using
The RDBMS You Should Be UsingThe RDBMS You Should Be Using
The RDBMS You Should Be Using
 
How and when to use NoSQL
How and when to use NoSQLHow and when to use NoSQL
How and when to use NoSQL
 
44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
44spotkaniePLSSUGWRO_CoNowegowKrainieChmur44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
44spotkaniePLSSUGWRO_CoNowegowKrainieChmur
 
2011-12-13 NoSQL aus der Praxis
2011-12-13 NoSQL aus der Praxis2011-12-13 NoSQL aus der Praxis
2011-12-13 NoSQL aus der Praxis
 
Experience sql server on l inux and docker
Experience sql server on l inux and dockerExperience sql server on l inux and docker
Experience sql server on l inux and docker
 
Erlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughputErlang as a cloud citizen, a fractal approach to throughput
Erlang as a cloud citizen, a fractal approach to throughput
 
Erlang as a Cloud Citizen
Erlang as a Cloud CitizenErlang as a Cloud Citizen
Erlang as a Cloud Citizen
 
Erlang and the Cloud: A Fractal Approach to Throughput
Erlang and the Cloud: A Fractal Approach to ThroughputErlang and the Cloud: A Fractal Approach to Throughput
Erlang and the Cloud: A Fractal Approach to Throughput
 
SQL Azure Dec 2010 Update
SQL Azure Dec 2010 UpdateSQL Azure Dec 2010 Update
SQL Azure Dec 2010 Update
 
SQL Azure Dec Update
SQL Azure Dec UpdateSQL Azure Dec Update
SQL Azure Dec Update
 
Couchbase - Yet Another Introduction
Couchbase - Yet Another IntroductionCouchbase - Yet Another Introduction
Couchbase - Yet Another Introduction
 
Brk2051 sql server on linux and docker
Brk2051 sql server on linux and dockerBrk2051 sql server on linux and docker
Brk2051 sql server on linux and docker
 
NoSql Databases
NoSql DatabasesNoSql Databases
NoSql Databases
 
Azure CosmosDB - TDC2018 Florianopolis
Azure CosmosDB - TDC2018 FlorianopolisAzure CosmosDB - TDC2018 Florianopolis
Azure CosmosDB - TDC2018 Florianopolis
 
From 0 to syncing
From 0 to syncingFrom 0 to syncing
From 0 to syncing
 
Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...
Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...
Azure Cosmos DB - NoSQL Strikes Back (An introduction to the dark side of you...
 
NoSQL
NoSQLNoSQL
NoSQL
 
Dropping ACID: Wrapping Your Mind Around NoSQL Databases
Dropping ACID: Wrapping Your Mind Around NoSQL DatabasesDropping ACID: Wrapping Your Mind Around NoSQL Databases
Dropping ACID: Wrapping Your Mind Around NoSQL Databases
 
Azure doc db (slideshare)
Azure doc db (slideshare)Azure doc db (slideshare)
Azure doc db (slideshare)
 
MongoDB - General Purpose Database
MongoDB - General Purpose DatabaseMongoDB - General Purpose Database
MongoDB - General Purpose Database
 

Recently uploaded

GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncObject Automation
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaborationbruanjhuli
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopBachir Benyammi
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding TeamAdam Moalla
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1DianaGray10
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxMatsuo Lab
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesThousandEyes
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Commit University
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum ComputingGDSC PJATK
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...DianaGray10
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UbiTrack UK
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024D Cloud Solutions
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfAijun Zhang
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceMartin Humpolec
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7DianaGray10
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...Aggregage
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024SkyPlanner
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAshyamraj55
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdfPedro Manuel
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfDianaGray10
 

Recently uploaded (20)

GenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation IncGenAI and AI GCC State of AI_Object Automation Inc
GenAI and AI GCC State of AI_Object Automation Inc
 
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online CollaborationCOMPUTER 10: Lesson 7 - File Storage and Online Collaboration
COMPUTER 10: Lesson 7 - File Storage and Online Collaboration
 
NIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 WorkshopNIST Cybersecurity Framework (CSF) 2.0 Workshop
NIST Cybersecurity Framework (CSF) 2.0 Workshop
 
9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team9 Steps For Building Winning Founding Team
9 Steps For Building Winning Founding Team
 
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1UiPath Platform: The Backend Engine Powering Your Automation - Session 1
UiPath Platform: The Backend Engine Powering Your Automation - Session 1
 
Introduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptxIntroduction to Matsuo Laboratory (ENG).pptx
Introduction to Matsuo Laboratory (ENG).pptx
 
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyesHow to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
How to Effectively Monitor SD-WAN and SASE Environments with ThousandEyes
 
Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)Crea il tuo assistente AI con lo Stregatto (open source python framework)
Crea il tuo assistente AI con lo Stregatto (open source python framework)
 
Introduction to Quantum Computing
Introduction to Quantum ComputingIntroduction to Quantum Computing
Introduction to Quantum Computing
 
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
Connector Corner: Extending LLM automation use cases with UiPath GenAI connec...
 
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
UWB Technology for Enhanced Indoor and Outdoor Positioning in Physiological M...
 
Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024Artificial Intelligence & SEO Trends for 2024
Artificial Intelligence & SEO Trends for 2024
 
Machine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdfMachine Learning Model Validation (Aijun Zhang 2024).pdf
Machine Learning Model Validation (Aijun Zhang 2024).pdf
 
Things you didn't know you can use in your Salesforce
Things you didn't know you can use in your SalesforceThings you didn't know you can use in your Salesforce
Things you didn't know you can use in your Salesforce
 
UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7UiPath Studio Web workshop series - Day 7
UiPath Studio Web workshop series - Day 7
 
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
The Data Metaverse: Unpacking the Roles, Use Cases, and Tech Trends in Data a...
 
Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024Salesforce Miami User Group Event - 1st Quarter 2024
Salesforce Miami User Group Event - 1st Quarter 2024
 
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPAAnypoint Code Builder , Google Pub sub connector and MuleSoft RPA
Anypoint Code Builder , Google Pub sub connector and MuleSoft RPA
 
Nanopower In Semiconductor Industry.pdf
Nanopower  In Semiconductor Industry.pdfNanopower  In Semiconductor Industry.pdf
Nanopower In Semiconductor Industry.pdf
 
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdfUiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
UiPath Solutions Management Preview - Northern CA Chapter - March 22.pdf
 

Introduction to NoSQL db and mongoDB

  • 2. BIO Senior SW Engineer @RAI Radiotelevisione italiana Rome, Italy QUIT IT APP @quititapp GET IN TOUCH! roberto.belardo@gmail.com     @robertobelardo     robertobelardo.wordpress.com     Skype:  backslash451  
  • 3. Traditional RDBMS ACID (atomicity, Consistency, Isolation, Durability) Great for relation data widely adopted and well understood TRANSACTIONS JOINS
  • 4. but… •  •  •  •  joins are slow do not scale easily SQL is a pain in the ass -> ORM SCHema are not flexible - and -
  • 5. NOSQL DB ONLY •  •  •  •  ACID-LESS (NOT ALWAYS SWEET) Elastic scaling Big data Flexible data models KEY/VALUE STORES memcached db project voldemort redis dynamo DOCUMENT DB mongo db couch base GRAPH STORES neo4j orient db allegro virtuoso wide column stores big table hbase accumulo cassandra
  • 7. mongo features •  •  •  •  •  Schema-less bson document (binary json) full index support replication and high availability Easy to use
  • 8. Jargon RDBMS   mongoDB   Table   Collec=on   Row(s)   (JSON)  Document   Column   Field   Index   Index   Join   Embedding  &  Linking   Par==on   Shard   GROUP  BY   Aggrega=on  
  • 9. Data SNIPPET {“_id”: !ObjectId(“4dfa6baa9c65dae09a4bbda5”),! “title”: “Programming in Scala”,! “author”: [! !{! ! !“first_name”: ! !“Martin”,! ! !“last_name”: ! !“Odersky”,! ! !“nationality”: !“DE”,! ! !“year_of_birth”: !1958! !},! !{! ! !“first_name”: ! !“Lex”,! ! !“last_name”: ! !“Spoon”! !},! !{! ! !“first_name”: ! !“Bill”,! ! !“last_name”: ! !“Venners”! !}! ]}!
  • 10. CRUD querying INSERT  a  document  in  a  collec7on   > db.foo.insert({name:”Sauron”, type:”bad-ass”, address:”Mordor”, eyes:1})! SELECT  all  documents  in  a  collec7on   > db.foo.find()! SELECT  some  documents  in  a  collec7on   > db.foo.find({eyes:1})
 > db.foo.find({eyes:1, type:”bad-ass”})! UPDATE  a  document  in  a  collec7on   > db.foo.save({_id:10, name:”Sauron”, type:”good boy”})! > db.foo.update({type:”bad-ass”},{$inc:{eyes:1}},{multi:true})! DELETE  all  documents  in  a  collec7on   > db.foo.remove()! DELETE  some  documents  in  a  collec7on   > db.foo.remove({eyes:1})!
  • 12. WRITE CONCERNS “Specifies  where  a  write  (insert)  opera3on  has  succeeded.”   “In  some  failure  cases,  write  opera3ons  issued  with  weak  write  concerns  may  not  persist.”   weak concern fast writes “With  stronger  write  concerns,  clients  wait  aAer  sending  a  write  opera3on  for  MongoDB  to   confirm  the  write  opera3on.”   errors ignored w:-1 It  does  not  acknowledge  write  op.  and  the  client  cannot  detect  failed  write  op.   unacknowledged w:0 It  does  not  acknowledge  write  op.  but  driver  aUempt  to  handle  network  errors.   acknowledged w:1 It  confirms  the  receipt  of  the  write  op.  allowing  clients  to  catch  errors.   journaled w:1,j:true It  confirms  the  receipt  of  the  write  op.  only  aWer  commiXng  the  data  to  journal.   replica acknowledged w:n (n>1) It  confirms  the  receipt  of  the  write  op.    aWer  acknowledging  primary  and  n-­‐1  secondaries.   DEFAULT  
  • 13. INDEXES Without  indexes,  mongoDB  must  scan  every  document  in  a  collec3on!   index types Default _ID single field compound index multikey index geospatial index text indexes hashed indexes properties unique indexes sparse indexes creating indexes > db.foo.ensureIndex({phone-number:1}) ! ! > db.foo.ensureIndex({name:1, phone-number:1})! ! > db.foo.ensureIndex({name:1}, {unique:true})! > db.foo.ensureIndex({nickname:1}, {sparse:true})! ! > db.foo.ensureIndex({a:1},{unique:true,sparse:true})!
  • 14. REPLICAtion Replica3on  provides  redundancy  and  increases  data  availability.   Automatic failover: ELECTIONS
  • 15. SHARDING horizontal scaling the mongoway SHARDimmutable KEYs shard key is { range based sharding hash based sharding . easily divisible among shards . high degree of randomness . targets a single shard . compound shard key > db.runCommand({ shardcollection:”test.users”, ! ! ! ! ! !key: { email:1}})! split--ting triggered automatically by a mongos if a chunk goes beyond max size (default 64mb) Balanc ing triggered automatically by a mongos if there is a chunk imbalance (8+ chunks)
  • 16. Aggre | gation MaP Reduce framework operators . filter . project . unwind . group . sort . limit > db.article.aggregate(! !{ $project: {author:1, tags: 1}},! !{ $unwind: “$tags”},! !{ $group: { !_id: “$tags”, ! ! ! ! !authors: { $addToSet: “$author”}}})! { “result”: !{“_id”: !{“_id”: !{“_id”: !{“_id”: !],! !“ok”:1! }! [! “art”, “authors”:[“bill”, “bob”]},! “sports”, “authors”:[“jane”, “bob”]},! “food”, “authors”:[“jane”, “bob”]},! “science”, “authors”:[“jane”, “bob”, “bill”]},!
  • 17. still a lot to cover! map reduce geo spatial GRID FS drivers etc….
  • 18. resources hBp://www.mongodb.org/   hBp://www.mongodb.com/learn/nosql   hBp://www.mongodb.org/about/introduc7on/   hBp://try.mongodb.org/   hBp://www.slideshare.net/spacemonkeylabs/data-­‐as-­‐documents-­‐overview-­‐and-­‐intro-­‐ to-­‐mongodb   •  hBps://speakerdeck.com/backslash451   •  hBps://educa7on.mongodb.com/   •  hBp://lmgQy.com/?q=mongoDB   •  •  •  •  •