Dbms Unit5 Notes
Dbms Unit5 Notes
org
Content
-blog.mongodb.org/post/475279604/on-distributed-consistency-part-1
-mongodb.org/manual
Other NoSQL Types
Key/value (Dynamo)
Columnar/tabular (HBase)
Document (mongoDB)
http://www.aaronstannard.com/post/2011/06/30/MongoDB-vs-SQL-Server.aspx
Motivations
Problems with SQL
Rigid schema
Not easily scalable (designed for 90’s technology or
worse)
Requires unintuitive joins
Perks of mongoDB
Easy interface with common languages (Java,
Javascript, PHP, etc.)
DB tech should run anywhere (VM’s, cloud, etc.)
Keeps essential features of RDBMS’s while learning
from key-value noSQL systems
http://www.slideshare.net/spf13/mongodb-9794741?v=qf1&b=&from_search=13
Company Using mongoDB
http://www.mongodb.org/about/production-deployments/
-Steve Francia, http://www.slideshare.net/spf13/mongodb-9794741?v=qf1&b=&from_search=13
Data Model
Document-Based (max 16 MB)
Documents are in BSON format, consisting of
field-value pairs
Each document stored in a collection
Collections
Have index set in common
Like tables of relational db’s.
Documents do not have to have uniform structure
-docs.mongodb.org/manual/
JSON
http://json.org/
BSON
• “Binary JSON”
• Binary-encoded serialization of JSON-like docs
• Also allows “referencing”
• Embedded structure reduces need for joins
• Goals
– Lightweight
– Traversable
– Efficient (decoding and encoding)
http://bsonspec.org/
BSON Example
{
"_id" : "37010"
"city" : "ADAMS",
"pop" : 2660,
"state" : "TN",
“councilman” : {
name: “John Smith”
address: “13 Scenic Way”
}
}
BSON Types
Type Number
Double 1
String 2
Object 3
Array 4
Binary data 5 The number can
Object id 7
Boolean 8 be used with the
Date 9 $type operator to
Null 10
Regular Expression 11 query by type!
JavaScript 13
Symbol 14
JavaScript (with scope) 15
32-bit integer 16
Timestamp 17
64-bit integer 18
Min key 255
Max key 127
http://docs.mongodb.org/manual/reference/bson-types/
The _id Field
http://docs.mongodb.org/manual/reference/bson-types/
mongoDB vs. SQL
mongoDB SQL
Document Tuple
Collection Table/View
PK: _id Field PK: Any Attribute(s)
Uniformity not Required Uniform Relation Schema
Index Index
Embedded Structure Joins
Shard Partition
CRUD
Create, Read, Update, Delete
Getting Started with mongoDB
http://docs.mongodb.org/manual/tutorial/install-mongodb-on-windows/
Getting Started with mongoDB
http://docs.mongodb.org/manual/tutorial/getting-started/
CRUD: Using the Shell
Note: db’s are not actually created until you insert data!
CRUD: Using the Shell (cont.)
db.<collection>.insert(<document>)
<=>
db.<collection>.insert({<field>:<value>})
Done on collections.
Get all docs: db.<collection>.find()
Returns a cursor, which is iterated over shell to
display first 20 results.
Add .limit(<number>) to limit results
SELECT * FROM <table>;
OR
db.<collection>.find({ $or: [
<field>:<value1>
<field>:<value2> ]
})
SELECT *
FROM <table>
WHERE <field> = <value1> OR <field> = <value2>;
SELECT field1
FROM <table>;
db.<collection>.update(
{<field1>:<value1>}, //all docs in which field = value
{$set: {<field2>:<value2>}}, //set field to value
{multi:true} ) //update multiple docs
upsert: if true, creates a new doc when none matches search criteria.
UPDATE <table>
SET <field2> = <value2>
WHERE <field1> = <value1>;
CRUD: Updating
To remove a field
db.<collection>.update({<field>:<value>},
{ $unset: { <field>: 1}})
db.<collection>.update({<field>:<value>},
{ <field>:<value>,
<field>:<value>})
*NOTE: This overwrites ALL the contents of a document,
even removing fields.
CRUD: Removal
db.<collection>.remove({<field>:<value>})
db.<collection>.remove({<field>:<value>}, true)
CRUD: Isolation
Embedding
Linking
Embedding & Linking
One to One relationship
zip = {
_id: 35004,
zip = {
city: “ACMAR”,
loc: [-86, 33], _id: 35004 ,
pop: 6065,
city: “ACMAR”
State: “AL” loc: [-86, 33],
} pop: 6065,
State: “AL”,
Council_person = {
zip_id = 35004, council_person: {
name: “John Doe",
name: “John Doe",
address: “123 Fake St.”,
address: “123 Fake St.”,
Phone: 123456
Phone: 123456
}
}
}
Example 2
author = {
_id: "kchodorow",
name: "Kristina Chodorow",
hometown: "New York"
}
student = {
_id: "joe"
name: "Joe Bookreader",
join_date: ISODate("2011-10-15"),
address: { ... }
}
book = {
_id: "123456789"
title: "MongoDB: The Definitive Guide",
authors: [ "Kristina Chodorow", "Mike Dirolf" ],
...
}
Modeling Checkouts
student = {
_id: "joe"
name: "Joe Bookreader",
join_date: ISODate("2011-10-15"),
address: { ... },
checked_out: [
{ _id: "123456789", checked_out: "2012-10-15" },
{ _id: "987654321", checked_out: "2012-09-12" },
...
]
}
What is good about mongoDB?
Index
Import Data
Create Index
Single Field Index
Compound Field
Indexes
Multikey Indexes
Show Existing Index
Hint
Single Field Index
Compound Field
Indexes
Multikey Indexes
Explain
Compare with data without
indexes
Demo of indexes in MongoDB
Import Data
Create Index
Single Field Index
Compound Field
Indexes
Multikey Indexes
Show Existing Index
Hint
Single Field Index
Compound Field
Indexes
Multikey Indexes
Explain
Compare with data without
indexes
Demo of indexes in MongoDB
Import Data
Create Index
Single Field Index
Compound Field Indexes
Multikey Indexes
Show Existing Index
Hint
Single Field Index
Compound Field Indexes
Multikey Indexes
Explain
Compare with data
without indexes
Demo of indexes in MongoDB
Import Data
Create Index
Single Field Index
Compound Field
Indexes
Multikey Indexes
Show Existing Index
Hint
Single Field Index
Compound Field
Indexes
Multikey Indexes
Explain
Compare with data without
indexes
Demo of indexes in MongoDB
Import Data
Create Index
Single Field Index
Compound Field Indexes
Multikey Indexes
Explain
Compare with data without
indexes
Demo of indexes in MongoDB
Import Data
Create Index
Single Field Index
Compound Field Indexes
Multikey Indexes
Explain
Compare with data without
indexes
Demo of indexes in MongoDB
Import Data
Create Index
Single Field Index
Compound Field Indexes
Multikey Indexes
Explain
Compare with data without
indexes
Demo of indexes in MongoDB
Import Data
Create Index Without
Single Field Index
Index
Compound Field Indexes
Multikey Indexes
Show Existing Index
Hint
Single Field Index
Compound Field Indexes
Multikey Indexes
Explain
Compare with data
without indexes With Index
Aggregation
$limit
$skip
$sort
Map-Reduce
Has two phases:
A map stage that processes each document and emits one or more
objects for each input document
A reduce phase that combines the output of the map operation.
An optional finalize stage for final modifications to the result
Uses Custom JavaScript functions
Provides greater flexibility but is less efficient and more
complex than the aggregation pipeline
Can have output sets that exceed the 16 megabyte output
limitation of the aggregation pipeline.
Single Purpose Aggregation
Operations
Special purpose database commands:
returning a count of matching documents
returning the distinct values for a field
grouping data based on the values of a field.
Aggregate documents from a single collection.
Lack the flexibility and capabilities of the
aggregation pipeline and map-reduce.
Replication & Sharding
What is replication?
Purpose of replication/redundancy
Fault tolerance
Availability
Increase read capacity
Replication in MongoDB
Automatic Failover
Heartbeats
Elections
The Standard Replica Set
Deployment
Deploy an Odd Number of
Members
Rollback
Security
SSL/TLS
Demo for Replication
Sharding
What is sharding?
Purpose of sharding
Horizontal scaling out
Query Routers
mongos
Shard keys
Range based sharding
Cardinality
Avoid hotspotting
Demo for Sharding
Thanks