windycityrails - "comics" is hard
DESCRIPTION
Domain modeling/alternative database talk given at WindyCityRails 2009TRANSCRIPT
Welcomeben scofield - @bscofield
http://benscofield.comhttp://www.viget.com/extend
http://www.speakerrate.com/bscofieldSaturday, September 12, 2009
“Comics” Is Hard:On Domains and DatabasesBen Scofield – Viget Labs
Saturday, September 12, 2009
Modeling
flickr: bunchofpants
Saturday, September 12, 2009
Biology
Saturday, September 12, 2009
Linnean taxonomySaturday, September 12, 2009
AnimaliaChordataMammaliaCarnivoraFelidaePantheratigris
KingdomPhylumClassOrderFamilyGenusSpecies
flickr: pandiyan
Saturday, September 12, 2009
AnimaliaChordataMammaliaCarnivoraFelidaePantheratigris
flickr: pandiyan
Saturday, September 12, 2009
kingdom phylum class
genus family order
species organism
Saturday, September 12, 2009
ProblemThe levels are imaginary
Saturday, September 12, 2009
kingdom phylum class
genus family order
species organism
subphylum
superclass subclass
superordersuborder
superfamily
subfamily
subgenus
variety
subspecies
Saturday, September 12, 2009
kingdom phylum class
genus family order
species organism
subphylum
superclass subclass
superordersuborder
superfamily
subfamily
subgenus
variety
subspecies
?Saturday, September 12, 2009
taxon taxontaxon species organism
variety
subspecies
Saturday, September 12, 2009
Speciesflickr: cpurrin1
Saturday, September 12, 2009
Reproductive Isolationflickr: superciliousness
Saturday, September 12, 2009
Reproductive Isolationflickr: superciliousness
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
flickr: chiotsrun
Saturday, September 12, 2009
flickr: niznoz
Saturday, September 12, 2009
Numerical taxonomySaturday, September 12, 2009
CladisticsSaturday, September 12, 2009
taxon taxon organismclade
Saturday, September 12, 2009
ProblemCladistics is historical and
counter-intuitive
Saturday, September 12, 2009
flickr: goellnitz
Saturday, September 12, 2009
flickr: goellnitzflickr: pcoin
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
The ChallengeUnclear, imprecise domain
Saturday, September 12, 2009
Comics
Saturday, September 12, 2009
publisher title issue
Saturday, September 12, 2009
Saturday, September 12, 2009
publisher imprint title
issue
Saturday, September 12, 2009
Saturday, September 12, 2009
publisher imprint title
issue volume
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
publisher imprint title
issue volume
trade
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
publisher imprint title
issue volume
tradevariant
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
publisher imprint title
issue volume
tradevariant
name
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
publisher imprint title
issue
nested set?volume
tradevariant
name
?
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
publisher
imprint
title
issue
nested set?volume
tradevariant
name
storyline ?!?!Saturday, September 12, 2009
horror
superhero
Martial Arts
noir
Pirate
science fiction
independent
historical
genres?
Saturday, September 12, 2009
publisherimprint
title
issue
nested set?volume
tradevariant
name
storyline
genre@#&*!Saturday, September 12, 2009
The ChallengeComplete insanity
Saturday, September 12, 2009
databases unite!
#?forben
Alternatives
Saturday, September 12, 2009
http://thisisindexed.com/2009/02/just-because-you-can-doesnt-mean-you-should/
Saturday, September 12, 2009
Key-Value
Saturday, September 12, 2009
Cassandra*
Tokyo CabinetRedis
Project Voldemort
Saturday, September 12, 2009
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
Biology x
Comics x
Saturday, September 12, 2009
Configuration ✓Caching ✓
Translations ✓
Saturday, September 12, 2009
Saturday, September 12, 2009
Document
Saturday, September 12, 2009
Saturday, September 12, 2009
{ 'name':'Ben Scofield', 'adjective':'awesomesauce'}
{ 'name':'Magic Pony', 'description':'It is a *lie*!'}
Saturday, September 12, 2009
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
Saturday, September 12, 2009
Biology ✓
Comics x
Saturday, September 12, 2009
{ ‘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
{ ‘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
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
Saturday, September 12, 2009
Graph
Saturday, September 12, 2009
Java
AllegroGraphJava / Lisp
Saturday, September 12, 2009
http://neotechnology.com/why-neo
Saturday, September 12, 2009
http://markorodriguez.com/Lectures_files/risk-symposium2009.pdf
Saturday, September 12, 2009
flickr: 9948354@N08
Saturday, September 12, 2009
Biology ✓
Comics ✓
Saturday, September 12, 2009
Felidae
001
tigris
Panthera
Panthernae
member
speciesof
Wanda
name
3
age
300
weight
genusof
Animalia
...
subfamilyof
genusof
Saturday, September 12, 2009
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
Picornaviridae
002
human
rhinovirus A
Rhinovirus
member
speciesof
genusof
Picornavirales
familyof
Group IV
orderof
Saturday, September 12, 2009
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
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
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
Other Options
Saturday, September 12, 2009
http://internetmindmap.com/database_software
Column-Oriented
Saturday, September 12, 2009
http://internetmindmap.com/database_software
Column-OrientedTemporal
Saturday, September 12, 2009
http://internetmindmap.com/database_software
Column-OrientedTemporalConstant
Saturday, September 12, 2009
http://internetmindmap.com/database_software
Column-OrientedTemporalConstant
?
Saturday, September 12, 2009
I am your databases... combined!flickr: joriel
Saturday, September 12, 2009
Saturday, September 12, 2009
Saturday, September 12, 2009
tagpost
document id
{ 'title':'Post Title' 'content':'Hello!' 'comments':["First!"]}
Saturday, September 12, 2009
Saturday, September 12, 2009
� � � � � � � � � � � � � � � � � � � � �
{ 'name':'...' 'attr1':'...' 'attr7':'...'}
����
Saturday, September 12, 2009
flickr: joriel
The power is yours
Saturday, September 12, 2009
Thank Youben scofield - @bscofield
http://benscofield.comhttp://www.viget.com/extend
http://www.speakerrate.com/bscofieldSaturday, September 12, 2009