windycityrails - "comics" is hard

Post on 17-May-2015

1.316 Views

Category:

Technology

0 Downloads

Preview:

Click to see full reader

DESCRIPTION

Domain modeling/alternative database talk given at WindyCityRails 2009

TRANSCRIPT

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

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

top related