Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008...

28
Modeling Denormalization Duncan Beevers 2008

Transcript of Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008...

Page 1: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Modeling Denormalization

Duncan Beevers 2008

Page 2: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

What is denormalization?

Duplicating facts

Duplicating facts

Page 3: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Modeling

Piles of things are things

class Game < ActiveRecord::Base has_many :plays has_one :lifetime_plays_countend

Page 4: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Where we started

Fully normalized data

Page 5: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

First denormalization

Page 6: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Why denormalize?

Large number of rows

Frequent expensive queries

Complex business rules about data

Page 7: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Complex Business Rules

They make simple Business Rules?

Page 8: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Model the requirement

Just get it working first

Page 9: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

class DailyHighScore < ActiveRecord::Base set_table_name 'scores'

default_scope :select => "#{quoted_table_name}.*, MAX(value) AS value" named_scope :for_date, lambda { |date| { :conditions => { :created_at => date.beginning_of_day .. date.end_of_day } } }end

class User < ActiveRecord::Base has_many :daily_high_scores end

user.daily_high_scores. for_date(Date.today).first

Page 10: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

class ActiveRecord::Base def self.default_scope options self.scoped_methods << { :find => options } endend

Page 11: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Haphazard denormalization

Page 12: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Minimize Indices-per-tablemore indices = slower writes

Page 13: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Minimize complex queriesMake sure you're using your indices!

Page 14: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Eventual Consistency

Why use real tables instead of triggers or views?

Page 15: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Do it later

Batch processing can save you writes and lighten replication load

Page 16: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Take a picture, it'll last longer

Denormalized models capture history

Page 17: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Like Observers, but different

class DailyHighScore uniqueness :user_id, :statistic_id, :date

takes :user_id, :statistic_id, :from => Score

takes :value, :from => Score, :if => :new_score_better?

def new_score_better? new_score new_score.better_than? self.value endend

Page 18: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Use Descriptive NamesVeryLongDescriptiveNamesThatProgrammingPairsThinkProvideGoodDescriptions

class LifetimeHighScoreend

class DailyGameplaysCountend

class MonthlyPaymentRunend

Page 19: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Avoiding our mistakes

Updates to models triggered external API calls

Single Table Inheritance

Page 20: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Use a queue

Lots of choices out there, or just roll your own

Page 22: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Moving to the new scheme

Pulling up stakes

Page 23: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Interim strategies

Disabling features and turning tables into placeholders

CREATE TABLE dummy_#{table_name}LIKE #{table_name}ENGINE=BLACKHOLE

ewww SQL

Page 24: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Toolbox

Bulk insert http://gist.github.com/7681

Hash rewrite http://www.dweebd.com/ruby/hash-key-rewrite/

{ :username => 'johnnyfive' }. rewrite(:username => :login)

=> { :login => 'johnnyfive' }

Gameplay.insert( [ { :user_id => 1, :game_id => 1 }, { :user_id => 2, :game_id => 1 }] )

Page 25: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Catch-up

Creating denormalized data should be idempotent

Page 26: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Pick the easy ones first

There are lots of ways to speed up an application

Page 27: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Make models judiciously

Page 28: Modeling Denormalization - dweebd Denormalization.pdfModeling Denormalization Duncan Beevers 2008 What is denormalization? Duplicating facts Duplicating facts Modeling Piles of things

Over 3 million badges awarded in August

~1.5 badges per second