New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di...

35
opensource, highperformance, documentoriented database

Transcript of New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di...

Page 1: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

open-­‐source,  high-­‐performance,  document-­‐oriented  database

Page 2: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

RDBMS(Oracle,  MySQL)

New Gen. OLAP(vertica,  aster,  greenplum)

Non-relationalOperational Stores

(“NoSQL”)

Page 3: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

non-­‐relational,  next-­‐generation  operational  datastores  and  databases

NoSQL Really Means:

Page 4: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Horizontally ScalableArchitectures

no  joinsno  complex  transactions+

Page 5: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

New Data Models

no  joinsno  complex  transactions+

Page 6: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

New Data Modelsimproved  ways  to  develop  applications?

Page 7: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Data ModelsKey  /  Value

memcached,  Dynamo

TabularBigTable

Document  OrientedMongoDB,  CouchDB,  JSON  stores

Page 8: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Focus on performance

depth  of  functionality

scalab

ility  &  perform

ance •memcached

• key/value

• RDBMS

Page 9: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

JSON-style Documents

{“hello”:  “world”}

\x16\x00\x00\x00\x02hello\x00\x06\x00\x00\x00world\x00\x00

http://bsonspec.org

represented  as  BSON

Page 10: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Flexible “Schemas”

{“author”:  “mike”,  “text”:  “...”}

{“author”:  “eliot”,  “text”:  “...”,  “tags”:  [“mongodb”]}

Page 11: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Dynamic Queries

Page 12: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Atomic Update Modifiers

Page 13: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Focus on Performance

Page 14: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Replication

master

slave slaveslave

master slave

master slave

master master

slave master

Page 15: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Auto-sharding

client

mongos ...mongos

mongodmongod

mongod mongod

mongod

mongod...

Shards

mongod

mongod

mongod

ConfigServers

Page 16: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Many Supported Platforms / Languages

Page 17: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Best Use Cases

The  WebCaching

The  Web

Scaling  Out

High  Volume

Page 18: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Less Good At

highly  transactional

ad-­‐hoc  business  intelligence

problems  that  require  SQL

Page 19: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

A Quick Aside

special  key

present  in  all  documents

unique  across  a  Collection

any  type  you  want

_id

Page 20: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Post

{author:  “mike”,  date:  new  Date(),  text:  “my  blog  post...”,  tags:  [“mongodb”,  “intro”]}

Page 21: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Comment

{author:  “eliot”,  date:  new  Date(),  text:  “great  post!”}

Page 22: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

New Post

post  =  {author:  “mike”,    date:  new  Date(),    text:  “my  blog  post...”,    tags:  [“mongodb”,  “intro”]}

db.posts.save(post)

Page 23: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Embedding a Comment

c  =  {author:  “eliot”,    date:  new  Date(),    text:  “great  post!”}

db.posts.update({_id:  post._id},                                  {$push:  {comments:  c}})

Page 24: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Posts by Author

db.posts.find({author:  “mike”})

Page 25: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Last 10 Posts

db.posts.find()                .sort({date:  -­‐1})                .limit(10)

Page 26: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Posts Since April 1

april_1  =  new  Date(2010,  3,  1)

db.posts.find({date:  {$gt:  april_1}})

Page 27: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Posts Ending With ‘Tech’

db.posts.find({text:  /Tech$/})

Page 28: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Posts With a Tagdb.posts.find({tags:  “mongodb”})

...and Fastdb.posts.ensureIndex({tags:  1})

(multi-­‐key  indexes)

Page 29: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Indexing / Querying on Embedded Docs

db.posts.ensureIndex({“comments.author”:  1})

db.posts.find({“comments.author”:  “eliot”})

(dot  notation)

Page 30: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Counting Posts

db.posts.count()

db.posts.find({author:  “mike”}).count()

Page 31: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Basic Paging

page  =  2page_size  =  15

db.posts.find().limit(page_size)                              .skip(page  *  page_size)

Page 32: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Migration: Adding Titles

post  =  {author:  “mike”,                date:  new  Date(),                text:  “another  blog  post...”,                tags:  [“mongodb”],              title:  “MongoDB  for  Fun  and  Profit”}

post_id  =  db.posts.save(post)

(just  start  adding  them)

Page 33: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

$gt,  $lt,  $gte,  $lte,  $ne,  $all,  $in,  $nin

db.posts.find({$where:  “this.author  ==  ‘mike’  ||                                                this.title  ==  ‘foo’”})

Advanced Queries

Page 34: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Other Cool Stuffaggregation  and  map/reduce

capped  collections

unique  indexes

mongo  shell

GridFS

geo

Page 35: New opensource,high%performance,+ document%oriented+databasepages.di.unipi.it/turini/Basi di Dati/Slides/12.mongodb... · 2018. 2. 21. · opensource,high%performance,+ document%oriented+database.

Download MongoDBhttp://www.mongodb.org

and  let  us  know  what  you  think@mdirolf        @mongodb

slides  will  be  up  on  http://dirolf.com