nosql: death to relational databases(?)

95
bensco’ield – viget labs rubyconf 20 november 2009 NoSQL Death to Relational Databases(?) Friday, November 20, 2009

Upload: ben-scofield

Post on 27-Jan-2015

136 views

Category:

Technology


1 download

DESCRIPTION

Overview of the NoSQL ecosystem given at RubyConf 2009

TRANSCRIPT

Page 1: NoSQL: Death to Relational Databases(?)

bensco'ield  –  viget  labsrubyconf20  november  2009

NoSQLDeath  to  Relational  Databases(?)

Friday, November 20, 2009

Page 2: NoSQL: Death to Relational Databases(?)

Motivations

Friday, November 20, 2009

Page 3: NoSQL: Death to Relational Databases(?)

Performance

Friday, November 20, 2009

Page 4: NoSQL: Death to Relational Databases(?)

Friday, November 20, 2009

Page 5: NoSQL: Death to Relational Databases(?)

Scalability

Friday, November 20, 2009

Page 6: NoSQL: Death to Relational Databases(?)

Friday, November 20, 2009

Page 7: NoSQL: Death to Relational Databases(?)

Friday, November 20, 2009

Page 8: NoSQL: Death to Relational Databases(?)

Flexibility

Friday, November 20, 2009

Page 9: NoSQL: Death to Relational Databases(?)

Friday, November 20, 2009

Page 10: NoSQL: Death to Relational Databases(?)

Locus  of  Work

Friday, November 20, 2009

Page 11: NoSQL: Death to Relational Databases(?)

Charlie  Chaplin

Jet  Li

Marian  Collier

Hank  Mann

Friday, November 20, 2009

Page 12: NoSQL: Death to Relational Databases(?)

Domain  Complexity

Friday, November 20, 2009

Page 13: NoSQL: Death to Relational Databases(?)

Friday, November 20, 2009

Page 14: NoSQL: Death to Relational Databases(?)

Taxonomy

Friday, November 20, 2009

Page 15: NoSQL: Death to Relational Databases(?)

Key-­‐Value  Stores

Friday, November 20, 2009

Page 16: NoSQL: Death to Relational Databases(?)

distributed  hash  tables

Friday, November 20, 2009

Page 17: NoSQL: Death to Relational Databases(?)

DynamoGT.MPStoreRedis

Friday, November 20, 2009

Page 18: NoSQL: Death to Relational Databases(?)

Column-­‐Oriented  Stores

Friday, November 20, 2009

Page 19: NoSQL: Death to Relational Databases(?)

semi-­‐structured

Friday, November 20, 2009

Page 20: NoSQL: Death to Relational Databases(?)

BigTableCassandraHBase

Friday, November 20, 2009

Page 21: NoSQL: Death to Relational Databases(?)

Document-­‐Oriented  Stores

Friday, November 20, 2009

Page 22: NoSQL: Death to Relational Databases(?)

also  semi-­‐structured

Friday, November 20, 2009

Page 23: NoSQL: Death to Relational Databases(?)

CouchDBMongoDBRDDBRiak

Friday, November 20, 2009

Page 24: NoSQL: Death to Relational Databases(?)

Graph  Databases

Friday, November 20, 2009

Page 25: NoSQL: Death to Relational Databases(?)

graph  theory

Friday, November 20, 2009

Page 26: NoSQL: Death to Relational Databases(?)

ActiveRDF  AllegroGraphNeo4J

Friday, November 20, 2009

Page 27: NoSQL: Death to Relational Databases(?)

Comparisons

Friday, November 20, 2009

Page 28: NoSQL: Death to Relational Databases(?)

Performance

Friday, November 20, 2009

Page 29: NoSQL: Death to Relational Databases(?)

key-­‐value  storescolumn-­‐oriented  storesdocument-­‐oriented  storesrelational  databasesgraph  databases

Friday, November 20, 2009

Page 30: NoSQL: Death to Relational Databases(?)

Scalability

Friday, November 20, 2009

Page 31: NoSQL: Death to Relational Databases(?)

key-­‐value  storescolumn-­‐oriented  storesdocument-­‐oriented  storesrelational  databasesgraph  databases

Friday, November 20, 2009

Page 32: NoSQL: Death to Relational Databases(?)

Flexibility

Friday, November 20, 2009

Page 33: NoSQL: Death to Relational Databases(?)

key-­‐value  storesdocument-­‐oriented  storesgraph  databases  column-­‐oriented  storesrelational  databases

Friday, November 20, 2009

Page 34: NoSQL: Death to Relational Databases(?)

Locus  of  Work

Friday, November 20, 2009

Page 35: NoSQL: Death to Relational Databases(?)

key-­‐value  storescolumn-­‐oriented  storesdocument-­‐oriented  storesrelational  databasesgraph  databases  

Friday, November 20, 2009

Page 36: NoSQL: Death to Relational Databases(?)

Domain  Complexity

Friday, November 20, 2009

Page 37: NoSQL: Death to Relational Databases(?)

key-­‐value  storescolumn-­‐oriented  storesdocument-­‐oriented  storesrelational  databasesgraph  databases  

Friday, November 20, 2009

Page 38: NoSQL: Death to Relational Databases(?)

Examples

Friday, November 20, 2009

Page 39: NoSQL: Death to Relational Databases(?)

Redis

Friday, November 20, 2009

Page 40: NoSQL: Death to Relational Databases(?)

Data  Typesstringslistssets

Friday, November 20, 2009

Page 41: NoSQL: Death to Relational Databases(?)

In-­‐Memoryperiodic  snapshotsmaster-­‐slave  replicationmemory-­‐bound

Friday, November 20, 2009

Page 42: NoSQL: Death to Relational Databases(?)

require 'redis'

gl = Redis.new

# A stringgl['name'] = 'Kyle Rayner'gl['name']gl.delete('name')

# A listgl.push_tail 'to-dos', 'Lose Ion power'gl.push_tail 'to-dos', 'Mourn dead loved ones'gl.push_tail 'to-dos', 'Blow up zombie lanterns'

gl.list_range('to-dos', 0, -1)

Friday, November 20, 2009

Page 43: NoSQL: Death to Relational Databases(?)

Tokyo  Cabinet

Friday, November 20, 2009

Page 44: NoSQL: Death to Relational Databases(?)

Data  Typesstringstables!

Friday, November 20, 2009

Page 45: NoSQL: Death to Relational Databases(?)

Related  Projectstyrantdystopiapromenade

Friday, November 20, 2009

Page 46: NoSQL: Death to Relational Databases(?)

require 'rufus/tokyo'

# Key-valueleagues = Rufus::Tokyo::Cabinet.new('jl.tch')leagues['JLI'] = [ 'Batman', 'Black Canary', 'Blue Beetle', 'Captain Marvel', 'Doctor Light', 'Doctor Fate', 'Guy Gardner','Martian Manhunter', 'Mister Miracle'].to_yaml

YAML.load(leagues['JLI'])

Friday, November 20, 2009

Page 47: NoSQL: Death to Relational Databases(?)

require 'rufus/tokyo'

# Tablebig7 = Rufus::Tokyo::Table.new('big7.tct')

big7['s'] = {'name' => 'Superman', 'role' => 'deus ex machina'}big7['b'] = {'name' => 'Batman', 'role' => 'mastermind'}big7['gl'] = {'name' => 'Green Lantern', 'role' => 'space cop'}big7['f'] = {'name' => 'Flash', 'role' => 'speedster'}big7['mm'] = {'name' => 'Martian Manhunter', 'role' => '?'}big7['ww'] = {'name' => 'Wonder Woman', 'role' => 'hitter'}big7['a'] = {'name' => 'Aquaman', 'role' => 'fish-talking'}

big7.query {|q| q.add_condition 'role', :streq, 'fish-talking'}

Friday, November 20, 2009

Page 48: NoSQL: Death to Relational Databases(?)

Cassandra

Friday, November 20, 2009

Page 49: NoSQL: Death to Relational Databases(?)

GenealogyDynamoBigTable

Friday, November 20, 2009

Page 50: NoSQL: Death to Relational Databases(?)

Column-­‐Orientedcolumnssupercolumnscolumn  families

Friday, November 20, 2009

Page 51: NoSQL: Death to Relational Databases(?)

Distributedautomatic  replicationeventual  consistencyeasy  expansion

Friday, November 20, 2009

Page 52: NoSQL: Death to Relational Databases(?)

Availabilityweak  readsquorum  reads

Friday, November 20, 2009

Page 53: NoSQL: Death to Relational Databases(?)

require 'cassandra'

op = Cassandra.new('OnePiece')

op.insert(:People, '1', {'name' => 'Luffy'})op.insert(:People, '2', {'name' => 'Crocodile'})op.insert(:People, '3', {'name' => 'Mr. 3'})

op.insert(:Fights, '1', {'opponents' => {UUID.new => '2'}})op.insert(:Fights, '1', {'opponents' => {UUID.new => '3'}})

luffy_fights = op.get(:Fights, '1', 'opponents')luffy_fights.map {|t, opp| op.get(:People, opp, 'name')}

Friday, November 20, 2009

Page 54: NoSQL: Death to Relational Databases(?)

CouchDB

Friday, November 20, 2009

Page 55: NoSQL: Death to Relational Databases(?)

Web-­‐InspiredJSON  storageHTTP  /  RESTful  interface

Friday, November 20, 2009

Page 56: NoSQL: Death to Relational Databases(?)

ViewspredeVined,  updated  incrementallyjavascript  for  map/reduce

Friday, November 20, 2009

Page 57: NoSQL: Death to Relational Databases(?)

Updatesfull,  including  embedded  documents

Friday, November 20, 2009

Page 58: NoSQL: Death to Relational Databases(?)

require 'couchrest'

konoha = CouchRest.database!('http://127.0.0.1:5984/konoha')naruto = konoha.save_doc { 'name' => 'Naruto Uzumaki', 'chakra' => 'wind'}shikamaru = konoha.save_doc { 'name' => 'Shikamaru Nara', 'chunin' => true}

konoha.save_doc { '_id' => '_design/first', :views => { :chunin => { :map => 'function(doc){if(doc.chunin){emit(null, doc);}}' } }}

puts konoha.views('first/chunin')['rows'].inspect

Friday, November 20, 2009

Page 59: NoSQL: Death to Relational Databases(?)

MongoDB

Friday, November 20, 2009

Page 60: NoSQL: Death to Relational Databases(?)

Storagebinary  JSON  documents

Friday, November 20, 2009

Page 61: NoSQL: Death to Relational Databases(?)

Accessnative  clients

Friday, November 20, 2009

Page 62: NoSQL: Death to Relational Databases(?)

Queriesdynamicindex-­‐based

Friday, November 20, 2009

Page 63: NoSQL: Death to Relational Databases(?)

Updatesallows  partial  updates

Friday, November 20, 2009

Page 64: NoSQL: Death to Relational Databases(?)

require 'mongo'

avengers = Mongo::Connection.new.db('avengers')members = avengers.collection('members')

members.insert {'name' => 'Ant-Man'}members.insert {'name' => 'Hulk'}members.insert {'name' => 'Iron Man'}members.insert {'name' => 'Thor'}members.insert {'name' => 'Wasp'}

members.create_index('name')

pym = members.find {'name' => 'Ant-Man'}pym['name'] = 'Giant-Man'pym.save

members.remove {'name' => 'Hulk'}

members.insert {'name' => 'Captain America'}

Friday, November 20, 2009

Page 65: NoSQL: Death to Relational Databases(?)

Neo4J

Friday, November 20, 2009

Page 66: NoSQL: Death to Relational Databases(?)

Structurenodes  and  edgeskey-­‐value  pairs

Friday, November 20, 2009

Page 67: NoSQL: Death to Relational Databases(?)

Querieslucene

Friday, November 20, 2009

Page 68: NoSQL: Death to Relational Databases(?)

require 'neo4j'

class Person include Neo4j::NodeMixin property :name, :mutant index :name, :mutant has_n :interests has_n :dates has_n :marriages def initialize(name, mutant = true) name = name mutant = mutant endend

Friday, November 20, 2009

Page 69: NoSQL: Death to Relational Databases(?)

Neo4j::Transaction.run do magneto = Person.new('Magneto') esme = Person.new('Esme') rogue = Person.new('Rogue') magda = Person.new('Magda', false) wasp = Person.new('Wasp', false) magneto.interests << wasp magneto.marriages << magda magneto.dates << rogue esme.interests << magneto magda.marriages << magneto rogue.dates << magnetoend

Friday, November 20, 2009

Page 70: NoSQL: Death to Relational Databases(?)

magneto = Person.find(:name => 'Magneto')

# Who likes Magneto?magneto.relationships.incoming(:interests).nodes

# Which non-mutants has Magneto dated?magneto.dates{ !mutant? }.to_a

Friday, November 20, 2009

Page 71: NoSQL: Death to Relational Databases(?)

Simulations

Friday, November 20, 2009

Page 72: NoSQL: Death to Relational Databases(?)

Structure

Friday, November 20, 2009

Page 73: NoSQL: Death to Relational Databases(?)

people{ ‘name’:‘Jimmy Olsen’ ‘title’:‘Superman’s Pal’ ‘company_id’:12441}

companies{ _id:12441 ‘name’:‘Daily Planet’}

Friday, November 20, 2009

Page 74: NoSQL: Death to Relational Databases(?)

Lack  of  Structure

Friday, November 20, 2009

Page 75: NoSQL: Death to Relational Databases(?)

mysql> SELECT * FROM people LIMIT 1 \G*************************** 1. row *************************** id: 1content: --- company: Daily Planetname: Jimmy Olsentitle: Superman’s Pal

Friday, November 20, 2009

Page 76: NoSQL: Death to Relational Databases(?)

mysql> desc people;+-------+-------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-------+-------------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || name | varchar(50) | YES | | NULL | |+-------+-------------+------+-----+---------+-------+

mysql> desc attributes;+-----------+--------------+------+-----+---------+-------+| Field | Type | Null | Key | Default | Extra |+-----------+--------------+------+-----+---------+-------+| id | int(11) | YES | | NULL | || person_id | int(11) | YES | | NULL | || attribute | varchar(50) | YES | | NULL | || value | varchar(100) | YES | | NULL | |+-----------+--------------+------+-----+---------+-------+

Friday, November 20, 2009

Page 77: NoSQL: Death to Relational Databases(?)

Not  Only  SQL

Friday, November 20, 2009

Page 78: NoSQL: Death to Relational Databases(?)

Caching

Friday, November 20, 2009

Page 79: NoSQL: Death to Relational Databases(?)

Already  in  Usememcached

Friday, November 20, 2009

Page 80: NoSQL: Death to Relational Databases(?)

Logging

Friday, November 20, 2009

Page 81: NoSQL: Death to Relational Databases(?)

Rails  Log  Replacementhttp://github.com/peburrows/mongo_db_logger

Friday, November 20, 2009

Page 82: NoSQL: Death to Relational Databases(?)

Hybrid  Domains

Friday, November 20, 2009

Page 83: NoSQL: Death to Relational Databases(?)

different  domains

Friday, November 20, 2009

Page 84: NoSQL: Death to Relational Databases(?)

Publishinge-­‐commercedocuments

Friday, November 20, 2009

Page 85: NoSQL: Death to Relational Databases(?)

Datinge-­‐commercesocial  graph

Friday, November 20, 2009

Page 86: NoSQL: Death to Relational Databases(?)

different  scales

Friday, November 20, 2009

Page 87: NoSQL: Death to Relational Databases(?)

Photo  Sharinguser  accountsuploaded  photos

Friday, November 20, 2009

Page 88: NoSQL: Death to Relational Databases(?)

Next  Steps

Friday, November 20, 2009

Page 89: NoSQL: Death to Relational Databases(?)

Explore

Friday, November 20, 2009

Page 90: NoSQL: Death to Relational Databases(?)

Database  Listhttp://internetmindmap.com/database_software

NoSQL  Google  Grouphttp://groups.google.com/group/nosql-­‐discussion

NoSQL  Ecosystemhttp://www.rackspacecloud.com/blog/2009/11/09/nosql-­‐ecosystem/

Wave!

Friday, November 20, 2009

Page 91: NoSQL: Death to Relational Databases(?)

Ignore  the  Database

Friday, November 20, 2009

Page 92: NoSQL: Death to Relational Databases(?)

Logical  Modeling  Firstbe  mindful

Friday, November 20, 2009

Page 93: NoSQL: Death to Relational Databases(?)

Change  the  Default

Friday, November 20, 2009

Page 94: NoSQL: Death to Relational Databases(?)

Application  Templatesstart  with  something  new

Friday, November 20, 2009

Page 95: NoSQL: Death to Relational Databases(?)

@bsco'ieldben.sco'[email protected]://spkr8.com/bscoVieldhttp://viget.com/extendhttp:  //benscoVield.com

bensco'ield

Friday, November 20, 2009