NoSQL & MongoDB

Post on 18-Jun-2015

843 views 3 download

Tags:

description

A lecture of No-SQL & MongoDB.

transcript

No-SQL & mongoDB@liushuaikobe

What’s No-SQL?

Strozzi NoSQL(1998)

RDBMS

operator-stream paradigm(PIPE)

a set of shell routines that access normal files of the OS

Carlo Strozzi

No-SQL == Not Have SQL

No-SQL == Not Have

Structured Query Language

SQL

…departs from the relational model altogether; it

should therefore have been called more appropriately 'NoREL'.

A meetup@San Francisco ——"open source, distributed, non relational databases”

Organized by Johan Oskarsson(Last.fm)

Google's Bigtable & Amazon's Dynamo

Eric Evans(then in RackSpace) reintroduced “No-SQL”

No-SQL == non-relational

Eric Evans

My regret however isn't about what the name says, it's about

what it doesn't.

no:sql(east) conference@ Atlanta

> select fun, profit > from real_world > where relational=false;

No-SQL == Not Only SQL

CAP Theorem(Eric Brewer)

Consistency

Partition Tolerance

Availability

BASE

neutralA C I D

PH

SB EA

asically vailable

ventually Consistent

oft-stateS

B

E

A

Why No-SQL?

Traditional RDBMS —— CA

Do We really need Transaction?

Horizontal-Scale

List Of NoSQL DBs

Wide Column Store

Document Store

Key Value / Tuple Store

Graph Databases

mongoDB

10gen

established in 2007, @New York

originally aimed to build a Paas architecture

released MongoDB, maintaining it

MongoDB Inc.(2013.08)

established in 2007, @New York

originally aimed to build a Paas architecture

released MongoDB, maintaining it

MongoDB

document-oriented(BSON) Storage

schema-free

high-performance

build for scale

Document

Data-Model Design

References

Embedded

Reference

Embedded

which way is better?

No Define answer.

A Instance

{          "actor_attributes"  :  {                  "name"  :  "Dan  Tao",                  "company"  :  "Google",                  ...                  "email"  :  "daniel.tao@gmail.com"          },          "repository"  :  {                  "fork"  :  false,                  "watchers"  :  0,                  "description"  :  "Oh,  nothing,  nothing",                  ...                  "id"  :  13155632,                  "name"  :  "breakneck"          },          "url"  :  "https://github.com/dtao/breakneck/compare/dccee09561...38984e5dce",          "created_at"  :  "2013-­‐09-­‐28T18:00:06-­‐07:00",          "actor"  :  "dtao",          "public"  :  true,          "type"  :  "PushEvent",          "payload"  :  {                  "shas"  :  [                            [                                  ...                          ]                  ],                  "head"  :  "38984e5dce1a21b778d4c26bde493270b4625662",                  "ref"  :  "refs/heads/master",                  "size"  :  1          }  }

RDBMS——ERD

Actor Repo

Event

1..n

1..1

1..n

1..1

While in mongo…

{  "_id"  :  ObjectId("5287d3e947e36f2280584179")  "actor_attributes"  :  {                  "name"  :  "Dan  Tao",                  "company"  :  "Google",                  ...                  "email"  :  "daniel@gmail.com"          }  }

{  "_id"  :  ObjectId("5287d3e947e36f22805844b3")  "actor_attributes"  :  {                  "name"  :  "Dan  Tao",                  "company"  :  "Google",                  ...                  "email"  :  "daniel@gmail.com"          }  }

{  "_id"  :  ObjectId("5287d3e947e36f22805844c9")  "actor_attributes"  :  {                  "name"  :  "Dan  Tao",                  "company"  :  "Google",                  ...                  "email"  :  "daniel@gmail.com"          }  }

Actor

{  "_id"  :  ObjectId("5287d41647e36f2280586033"),  “repository"  :  {                  "fork"  :  false,                              ...                    "name"  :  "breakneck"          },          "actor"  :  "Sam",          …          "payload"  :  {                  "shas"  :  [                            [                                  ...                          ]                  ],                  "ref"  :  "refs/heads/master",                  "size"  :  1          }  }

Event

{  "_id"  :  ObjectId("5287d41647e36f2280586035"),  “repository"  :  {                  "fork"  :  false,                              ...                    "name"  :  "breakneck"          },          "actor"  :  "Tom",          …          "payload"  :  {                  "shas"  :  [                            [                                  ...                          ]                  ],                  "ref"  :  "refs/heads/master",                  "size"  :  1          }  }

{  "_id"  :  ObjectId("5287d41647e36f2280586537"),  “repository"  :  {                  "fork"  :  false,                              ...                    "name"  :  "breakneck"          },          "actor"  :  "Mike",          …          "payload"  :  {                  "shas"  :  [                            [                                  ...                          ]                  ],                  "ref"  :  "refs/heads/master",                  "size"  :  1          }  }

Summary

No-SQL => No? No!

Why No-SQL?

CAP & BASE

MongoDB (Inc.)

Schema design

How to Choose?

Depending on your needs…

Thanks@liushuaikobe

Q & A

http://www.girlsgonestrong.com/video-qa/