windycityrails - "comics" is hard

105
Welcome ben scofield - @bscofield http://benscofield.com http://www.viget.com/extend http://www.speakerrate.com/bscofield Saturday, September 12, 2009

Upload: ben-scofield

Post on 17-May-2015

1.316 views

Category:

Technology


0 download

DESCRIPTION

Domain modeling/alternative database talk given at WindyCityRails 2009

TRANSCRIPT

Page 1: WindyCityRails - "Comics" Is Hard

Welcomeben scofield - @bscofield

http://benscofield.comhttp://www.viget.com/extend

http://www.speakerrate.com/bscofieldSaturday, September 12, 2009

Page 2: WindyCityRails - "Comics" Is Hard

“Comics” Is Hard:On Domains and DatabasesBen Scofield – Viget Labs

Saturday, September 12, 2009

Page 3: WindyCityRails - "Comics" Is Hard

Modeling

flickr: bunchofpants

Saturday, September 12, 2009

Page 4: WindyCityRails - "Comics" Is Hard

Biology

Saturday, September 12, 2009

Page 5: WindyCityRails - "Comics" Is Hard

Linnean taxonomySaturday, September 12, 2009

Page 6: WindyCityRails - "Comics" Is Hard

AnimaliaChordataMammaliaCarnivoraFelidaePantheratigris

KingdomPhylumClassOrderFamilyGenusSpecies

flickr: pandiyan

Saturday, September 12, 2009

Page 7: WindyCityRails - "Comics" Is Hard

AnimaliaChordataMammaliaCarnivoraFelidaePantheratigris

flickr: pandiyan

Saturday, September 12, 2009

Page 8: WindyCityRails - "Comics" Is Hard

kingdom phylum class

genus family order

species organism

Saturday, September 12, 2009

Page 9: WindyCityRails - "Comics" Is Hard

ProblemThe levels are imaginary

Saturday, September 12, 2009

Page 10: WindyCityRails - "Comics" Is Hard

kingdom phylum class

genus family order

species organism

subphylum

superclass subclass

superordersuborder

superfamily

subfamily

subgenus

variety

subspecies

Saturday, September 12, 2009

Page 11: WindyCityRails - "Comics" Is Hard

kingdom phylum class

genus family order

species organism

subphylum

superclass subclass

superordersuborder

superfamily

subfamily

subgenus

variety

subspecies

?Saturday, September 12, 2009

Page 12: WindyCityRails - "Comics" Is Hard

taxon taxontaxon species organism

variety

subspecies

Saturday, September 12, 2009

Page 13: WindyCityRails - "Comics" Is Hard

Speciesflickr: cpurrin1

Saturday, September 12, 2009

Page 14: WindyCityRails - "Comics" Is Hard

Reproductive Isolationflickr: superciliousness

Saturday, September 12, 2009

Page 15: WindyCityRails - "Comics" Is Hard

Reproductive Isolationflickr: superciliousness

Saturday, September 12, 2009

Page 16: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 17: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 18: WindyCityRails - "Comics" Is Hard

flickr: chiotsrun

Saturday, September 12, 2009

Page 19: WindyCityRails - "Comics" Is Hard

flickr: niznoz

Saturday, September 12, 2009

Page 20: WindyCityRails - "Comics" Is Hard

Numerical taxonomySaturday, September 12, 2009

Page 21: WindyCityRails - "Comics" Is Hard

CladisticsSaturday, September 12, 2009

Page 22: WindyCityRails - "Comics" Is Hard

taxon taxon organismclade

Saturday, September 12, 2009

Page 23: WindyCityRails - "Comics" Is Hard

ProblemCladistics is historical and

counter-intuitive

Saturday, September 12, 2009

Page 24: WindyCityRails - "Comics" Is Hard

flickr: goellnitz

Saturday, September 12, 2009

Page 25: WindyCityRails - "Comics" Is Hard

flickr: goellnitzflickr: pcoin

Saturday, September 12, 2009

Page 26: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 27: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 28: WindyCityRails - "Comics" Is Hard

The ChallengeUnclear, imprecise domain

Saturday, September 12, 2009

Page 29: WindyCityRails - "Comics" Is Hard

Comics

Saturday, September 12, 2009

Page 30: WindyCityRails - "Comics" Is Hard

publisher title issue

Saturday, September 12, 2009

Page 31: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 32: WindyCityRails - "Comics" Is Hard

publisher imprint title

issue

Saturday, September 12, 2009

Page 33: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 34: WindyCityRails - "Comics" Is Hard

publisher imprint title

issue volume

Saturday, September 12, 2009

Page 35: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 36: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 37: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 38: WindyCityRails - "Comics" Is Hard

publisher imprint title

issue volume

trade

Saturday, September 12, 2009

Page 39: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 40: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 41: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 42: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 43: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 44: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 45: WindyCityRails - "Comics" Is Hard

publisher imprint title

issue volume

tradevariant

Saturday, September 12, 2009

Page 46: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 47: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 48: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 49: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 50: WindyCityRails - "Comics" Is Hard

publisher imprint title

issue volume

tradevariant

name

Saturday, September 12, 2009

Page 51: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 52: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 53: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 54: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 55: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 56: WindyCityRails - "Comics" Is Hard

publisher imprint title

issue

nested set?volume

tradevariant

name

?

Saturday, September 12, 2009

Page 57: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 58: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 59: WindyCityRails - "Comics" Is Hard

publisher

imprint

title

issue

nested set?volume

tradevariant

name

storyline ?!?!Saturday, September 12, 2009

Page 60: WindyCityRails - "Comics" Is Hard

horror

superhero

Martial Arts

noir

Pirate

science fiction

independent

historical

genres?

Saturday, September 12, 2009

Page 61: WindyCityRails - "Comics" Is Hard

publisherimprint

title

issue

nested set?volume

tradevariant

name

storyline

genre@#&*!Saturday, September 12, 2009

Page 62: WindyCityRails - "Comics" Is Hard

The ChallengeComplete insanity

Saturday, September 12, 2009

Page 63: WindyCityRails - "Comics" Is Hard

databases unite!

#?forben

Alternatives

Saturday, September 12, 2009

Page 64: WindyCityRails - "Comics" Is Hard

http://thisisindexed.com/2009/02/just-because-you-can-doesnt-mean-you-should/

Saturday, September 12, 2009

Page 65: WindyCityRails - "Comics" Is Hard

Key-Value

Saturday, September 12, 2009

Page 66: WindyCityRails - "Comics" Is Hard

Cassandra*

Tokyo CabinetRedis

Project Voldemort

Saturday, September 12, 2009

Page 67: WindyCityRails - "Comics" Is Hard

require "rubygems"require "tokyocabinet" include TokyoCabinet bdb = BDB::new # B-Tree database; keys may have multiple valuesbdb.open("casket.bdb", BDB::OWRITER | BDB::OCREAT) # store records in the database, allowing duplicatesbdb.putdup("key1", "value1")bdb.putdup("key1", "value2")bdb.put("key2", "value3")bdb.put("key3", "value4") # retrieve all valuesp bdb.getlist("key1")# => ["value1", "value2"] # range query, find all matching keysp bdb.range("key1", true, "key3", true)# => ["key1", "key2", "key3"]

http://www.igvita.com/2009/02/13/tokyo-cabinet-beyond-key-value-store/

Saturday, September 12, 2009

Page 68: WindyCityRails - "Comics" Is Hard

Biology x

Comics x

Saturday, September 12, 2009

Page 69: WindyCityRails - "Comics" Is Hard

Configuration ✓Caching ✓

Translations ✓

Saturday, September 12, 2009

Page 70: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 71: WindyCityRails - "Comics" Is Hard

Document

Saturday, September 12, 2009

Page 72: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 73: WindyCityRails - "Comics" Is Hard

{ 'name':'Ben Scofield', 'adjective':'awesomesauce'}

{ 'name':'Magic Pony', 'description':'It is a *lie*!'}

Saturday, September 12, 2009

Page 74: WindyCityRails - "Comics" Is Hard

class Question include MongoMapper::Document key :number, Integer, :required => true key :text, String, :required => true many :choicesend

class Choice include MongoMapper::EmbeddedDocument key :text, String, :required => trueend

Saturday, September 12, 2009

Page 75: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 76: WindyCityRails - "Comics" Is Hard

Biology ✓

Comics x

Saturday, September 12, 2009

Page 77: WindyCityRails - "Comics" Is Hard

{ ‘kingdom’:‘Animalia’, ‘phylum’:‘Chordata’, ‘subphylum’:‘Vertebrata’, ‘class’:‘Mammalia’, ‘subclass’:‘Eutheria’, ‘order’:‘Carnivora’, ‘family’:‘Felidae’, ‘subfamily’:‘Panthernae’, ‘genus’:‘Pantera’, ‘species’:‘tigris’, ‘name’:‘Wanda’}

Saturday, September 12, 2009

Page 78: WindyCityRails - "Comics" Is Hard

{ ‘kingdom’:‘Animalia’, ‘subkingdom’:‘Eumetazoa’, ‘phylum’:‘Chordata’, ‘subphylum’:‘Vertebrata’, ‘class’:‘Mammalia’, ‘subclass’:‘Theria’, ‘order’:‘Carnivora’, ‘suborder’: ‘Caniformia’, ‘family’:‘Canidae’, ‘subfamily’:‘Caninae’, ‘tribe’:‘Canini’, ‘genus’:‘Canis’, ‘species’:‘lupus’, ‘subspecies’:‘familiaris’, ‘name’:‘Daisy’}

Saturday, September 12, 2009

Page 79: WindyCityRails - "Comics" Is Hard

class Question include MongoMapper::Document key :number, Integer, :required => true key :text, String, :required => true many :choicesend

class Choice include MongoMapper::EmbeddedDocument key :text, String, :required => trueend

Saturday, September 12, 2009

Page 80: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 81: WindyCityRails - "Comics" Is Hard

Graph

Saturday, September 12, 2009

Page 82: WindyCityRails - "Comics" Is Hard

Java

AllegroGraphJava / Lisp

Saturday, September 12, 2009

Page 83: WindyCityRails - "Comics" Is Hard

http://neotechnology.com/why-neo

Saturday, September 12, 2009

Page 85: WindyCityRails - "Comics" Is Hard

flickr: 9948354@N08

Saturday, September 12, 2009

Page 86: WindyCityRails - "Comics" Is Hard

Biology ✓

Comics ✓

Saturday, September 12, 2009

Page 87: WindyCityRails - "Comics" Is Hard

Felidae

001

tigris

Panthera

Panthernae

member

speciesof

Wanda

name

3

age

300

weight

genusof

Animalia

...

subfamilyof

genusof

Saturday, September 12, 2009

Page 88: WindyCityRails - "Comics" Is Hard

Felidae

001

tigris

Panthera

Panthernae

member

speciesof

Wanda

name

3

age

300

weight

genusof

Animalia

...

subfamilyof

genusof

010

tigris

species

name

type

Saturday, September 12, 2009

Page 89: WindyCityRails - "Comics" Is Hard

Picornaviridae

002

human

rhinovirus A

Rhinovirus

member

speciesof

genusof

Picornavirales

familyof

Group IV

orderof

Saturday, September 12, 2009

Page 90: WindyCityRails - "Comics" Is Hard

Picornaviridae

002

human rhinovirus A

Rhinovirus

member

speciesof

genusof

Picornavirales

familyof

Group IV

orderof

Felidae

tigris

Panthera

Panthernae

speciesof

genusof

subfamilyof

genusof

001

member

Carnivora

familyof

Mammalia

orderof

class group

Saturday, September 12, 2009

Page 91: WindyCityRails - "Comics" Is Hard

DC

001

DC Universe

titleof

imprintof

titleof

Volume 1

volumeof

Green

Lantern nameof

Sci Fi

genreof

genreof

genreof

002

issueof genreof

Superhero

Issue #2precedes

003

coverof

#1

number

Saturday, September 12, 2009

Page 92: WindyCityRails - "Comics" Is Hard

require 'neo4j'

Neo4j::Transaction.run do dc = Neo4j::Node.new dc[:name] = 'DC' dc_universe = Neo4j::Node.new dc_universe[:name] = 'DC Universe' dc.relationships.outgoing(:imprints) << dc_universe rel = dc.relationships.outgoing(:imprints).first rel[:started] = 1980 vol1 = Neo4j::Node.new vol1[:started] = 1941 vol1[:ended] = 1949 vol1[:name] = 'Green Lantern' dc.relationships.outgoing(:titles) << vol1 dc_universe.relationships.outgoing(:titles) << vol1

# ...end

Saturday, September 12, 2009

Page 93: WindyCityRails - "Comics" Is Hard

Other Options

Saturday, September 12, 2009

Page 94: WindyCityRails - "Comics" Is Hard

http://internetmindmap.com/database_software

Column-Oriented

Saturday, September 12, 2009

Page 95: WindyCityRails - "Comics" Is Hard

http://internetmindmap.com/database_software

Column-OrientedTemporal

Saturday, September 12, 2009

Page 96: WindyCityRails - "Comics" Is Hard

http://internetmindmap.com/database_software

Column-OrientedTemporalConstant

Saturday, September 12, 2009

Page 97: WindyCityRails - "Comics" Is Hard

http://internetmindmap.com/database_software

Column-OrientedTemporalConstant

?

Saturday, September 12, 2009

Page 98: WindyCityRails - "Comics" Is Hard

I am your databases... combined!flickr: joriel

Saturday, September 12, 2009

Page 99: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 100: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 101: WindyCityRails - "Comics" Is Hard

tagpost

document id

{ 'title':'Post Title' 'content':'Hello!' 'comments':["First!"]}

Saturday, September 12, 2009

Page 102: WindyCityRails - "Comics" Is Hard

Saturday, September 12, 2009

Page 103: WindyCityRails - "Comics" Is Hard

� � � � � � � � � � � � � � � � � � � � �

{ 'name':'...' 'attr1':'...' 'attr7':'...'}

����

Saturday, September 12, 2009

Page 104: WindyCityRails - "Comics" Is Hard

flickr: joriel

The power is yours

Saturday, September 12, 2009

Page 105: WindyCityRails - "Comics" Is Hard

Thank Youben scofield - @bscofield

http://benscofield.comhttp://www.viget.com/extend

http://www.speakerrate.com/bscofieldSaturday, September 12, 2009