charlotte software engineering meetup - jan.2015

102
Polyglot Persistence

Upload: majid-fatemian

Post on 11-Apr-2017

367 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Charlotte Software Engineering Meetup - Jan.2015

PolyglotPersistence

Page 2: Charlotte Software Engineering Meetup - Jan.2015

Majid Fatemian

R E D V E N T U R E S

@majidfn

Page 3: Charlotte Software Engineering Meetup - Jan.2015

Relational Non-Relational Key-Value Big Data

Page 4: Charlotte Software Engineering Meetup - Jan.2015

Application

Relational

Page 5: Charlotte Software Engineering Meetup - Jan.2015

Application

Relational Relational Non-Relational

Page 6: Charlotte Software Engineering Meetup - Jan.2015

Relational

Page 7: Charlotte Software Engineering Meetup - Jan.2015

DATA

Page 8: Charlotte Software Engineering Meetup - Jan.2015

BIGDATA

Page 9: Charlotte Software Engineering Meetup - Jan.2015

Capture

SearchStorage

Q u e r y

Privacy Visualize

Analysis

Page 10: Charlotte Software Engineering Meetup - Jan.2015

Non-Relational

Page 11: Charlotte Software Engineering Meetup - Jan.2015

1 2 3

Non-Relational Cluster Schemaless

Page 12: Charlotte Software Engineering Meetup - Jan.2015

I. Document

II. Key-Value

III. Graph

IV. Column

MongoDB, CouchBase

Memcache, Redis

Neo4J, OrientDB

Cassandra, HBase

Page 13: Charlotte Software Engineering Meetup - Jan.2015

P

C AAvailabilityConsistency

Partition Tolerance

Page 14: Charlotte Software Engineering Meetup - Jan.2015

P

AAvailabilityConsistency

Partition Tolerance

C

Page 15: Charlotte Software Engineering Meetup - Jan.2015

CP

CA APMySQL

Postgres

MongoDBCouchBase

Cassandra

Riak

Page 16: Charlotte Software Engineering Meetup - Jan.2015
Page 17: Charlotte Software Engineering Meetup - Jan.2015

2 x

1 x

1 x

Page 18: Charlotte Software Engineering Meetup - Jan.2015
Page 19: Charlotte Software Engineering Meetup - Jan.2015

2011

2012

2013

2014

Page 20: Charlotte Software Engineering Meetup - Jan.2015

2011

2012

2013

201

Page 21: Charlotte Software Engineering Meetup - Jan.2015
Page 22: Charlotte Software Engineering Meetup - Jan.2015

Application

Page 23: Charlotte Software Engineering Meetup - Jan.2015

Normalized

ACID {ConsistencyRelational

Page 24: Charlotte Software Engineering Meetup - Jan.2015

Replication

Fault ToleranceAvailability{Relational

Page 25: Charlotte Software Engineering Meetup - Jan.2015

OPs / DBAs Tools Devs{DevOps

Relational

Page 26: Charlotte Software Engineering Meetup - Jan.2015

2011

2012

2013

201

Page 27: Charlotte Software Engineering Meetup - Jan.2015

ScalabilityRelational

Page 28: Charlotte Software Engineering Meetup - Jan.2015

SchemaRelational

{ player_id: 1234, * level: 40, * duration: 75, * activity: activity, game_id: 4001, platform: WiiU, difficulty_level: medium, repetition: 178, score: 450, endurance:3}

{ player_id: 1234, level: 12, duration: 120, activity: activity}

Page 29: Charlotte Software Engineering Meetup - Jan.2015

Aggregated

Detailed

stats

statsPlayers’ Profiles

Individual Activities

Page 30: Charlotte Software Engineering Meetup - Jan.2015

DistributionRelational

Data CData B

Data A

Data Access Layer

Page 31: Charlotte Software Engineering Meetup - Jan.2015

ACID Transaction Partitioning Replication

Tools OPs

Data Volume Fixed Schema Scale Up Manual Sharding

+ -

Page 32: Charlotte Software Engineering Meetup - Jan.2015

NoSQL...

Page 33: Charlotte Software Engineering Meetup - Jan.2015

mongoDB

1 2 3

OPs Devs Community

Page 34: Charlotte Software Engineering Meetup - Jan.2015

Schema-lessNon-Relational

player_id: 1234, * level: 40, * duration: 75, * activity: activity, game_id: 4001, platform: WiiU, difficulty_level: 2, repetition: 178, score: 450, endurance:3

player_id: 1234, level: 75, duration: 120, activity: activity

Page 35: Charlotte Software Engineering Meetup - Jan.2015

ScalabilityNon-Relational

Page 36: Charlotte Software Engineering Meetup - Jan.2015

ScalabilityNon-Relational

+

Page 37: Charlotte Software Engineering Meetup - Jan.2015

ShardingNon-Relational

Page 38: Charlotte Software Engineering Meetup - Jan.2015

ShardingNon-Relational

Data A

{key}

Page 39: Charlotte Software Engineering Meetup - Jan.2015

ShardingNon-Relational

Data A

A

Data B

B

Data C

C

{key}

Page 40: Charlotte Software Engineering Meetup - Jan.2015

Map/ReduceNon-Relational

K, V

K,V1 K,V2 K,V3

Page 41: Charlotte Software Engineering Meetup - Jan.2015

Map/ReduceNon-Relational

QueryK, V

K,V1 K,V2 K,V3

Page 42: Charlotte Software Engineering Meetup - Jan.2015

Map/ReduceNon-Relational

Query

Map

K, V

K,V1 K,V2 K,V3

Page 43: Charlotte Software Engineering Meetup - Jan.2015

Map/ReduceNon-Relational M

ap

K,V1 K,V2 K,V3

Page 44: Charlotte Software Engineering Meetup - Jan.2015

Map/ReduceNon-Relational

ResultReduce

Map

K,V1 K,V2 K,V3

Page 45: Charlotte Software Engineering Meetup - Jan.2015

DenormalizedNon-Relationalread / }write

Disk Space

Page 46: Charlotte Software Engineering Meetup - Jan.2015

Data ModelNon-RelationalQuery

Aggregation}

Page 47: Charlotte Software Engineering Meetup - Jan.2015

Eventual- Consistency

Non-Relational

X1

X1 X1

Page 48: Charlotte Software Engineering Meetup - Jan.2015

Eventual- Consistency

Non-Relational

X2

W

X1 X1

X2

Page 49: Charlotte Software Engineering Meetup - Jan.2015

Eventual- Consistency

Non-Relational

X2

W

X1 X1

R

X1

X2

Page 50: Charlotte Software Engineering Meetup - Jan.2015

Eventual- Consistency

Non-Relational

X2

W

X2

X2

R

X2

X2

Page 51: Charlotte Software Engineering Meetup - Jan.2015

BalancerNon-Relational

Page 52: Charlotte Software Engineering Meetup - Jan.2015

BalancerNon-Relational+

Page 53: Charlotte Software Engineering Meetup - Jan.2015

BalancerNon-Relational

Page 54: Charlotte Software Engineering Meetup - Jan.2015

Non-RelationalResilience

A B C

Page 55: Charlotte Software Engineering Meetup - Jan.2015

Non-RelationalResilience

A C

Page 56: Charlotte Software Engineering Meetup - Jan.2015

LockingNon-RelationalDB Level (2.2)}Document Level (3.x)

Page 57: Charlotte Software Engineering Meetup - Jan.2015

BackupNon-Relational

Point-in-time

Page 58: Charlotte Software Engineering Meetup - Jan.2015

Denormalized data Disk Space Expertise Complex QueryingEventual Consistency Resource Usage DB-Level Locking

-

Schema-Less Aggregated Data Large Scale Data

Sharding Map/Reduce

Memory Storage Journaling

+

Page 59: Charlotte Software Engineering Meetup - Jan.2015

Random ProfileSearch(1M)

Full History Retrieval(6M)

Insert(6M)

AggregationMap/Reduce

(6M)

0

0.003

0.005

0.008

0.01

MySQLMongoDB

Page 60: Charlotte Software Engineering Meetup - Jan.2015

PersistencePolyglot

Page 61: Charlotte Software Engineering Meetup - Jan.2015

Players’ Profile Leaderboards

Activity Details

Page 62: Charlotte Software Engineering Meetup - Jan.2015
Page 63: Charlotte Software Engineering Meetup - Jan.2015

Total Sum

Activity 1

Activity n

Activity m

……

Page 64: Charlotte Software Engineering Meetup - Jan.2015

Shard 1

Shard 2

Config

Page 65: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

Application

Page 66: Charlotte Software Engineering Meetup - Jan.2015

TheChallenge

Page 67: Charlotte Software Engineering Meetup - Jan.2015

Inconsistency1

Page 68: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

Commit2-Phase

Page 69: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

W

Pending

Commit2-Phase

Page 70: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

Pending

W Commit2-Phase

Page 71: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

Done

Commit2-Phase

Page 72: Charlotte Software Engineering Meetup - Jan.2015

2 Latency

Page 73: Charlotte Software Engineering Meetup - Jan.2015

2 Latencyvs. Consistency

Page 74: Charlotte Software Engineering Meetup - Jan.2015

Operations3

Page 75: Charlotte Software Engineering Meetup - Jan.2015

Operations3Exponential complexity

Page 76: Charlotte Software Engineering Meetup - Jan.2015

Availability4

Page 77: Charlotte Software Engineering Meetup - Jan.2015

Availability4 Plan for failure

Page 78: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

Page 79: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

Page 80: Charlotte Software Engineering Meetup - Jan.2015

Data Access Layer

Page 81: Charlotte Software Engineering Meetup - Jan.2015

Data Integrity5

Page 82: Charlotte Software Engineering Meetup - Jan.2015

Data Integrity5Backward compatibility

Page 83: Charlotte Software Engineering Meetup - Jan.2015

Unit{TEST IntegrationFunctional

Page 84: Charlotte Software Engineering Meetup - Jan.2015

Data Migration6

Page 85: Charlotte Software Engineering Meetup - Jan.2015
Page 86: Charlotte Software Engineering Meetup - Jan.2015

Profile

History }{ profile: { GUID:…, platform: { name:’xbox’, xuid:… } }, activity:…, duration:…, datetime:… }

3rd Party

Page 87: Charlotte Software Engineering Meetup - Jan.2015

1 One-Shot Migration

Page 88: Charlotte Software Engineering Meetup - Jan.2015

1 One-Shot Migration4 hours !!

Page 89: Charlotte Software Engineering Meetup - Jan.2015

1 One-Shot Migration4 hours !!

Live !!2 Profile versioning

Page 90: Charlotte Software Engineering Meetup - Jan.2015

+1

Page 91: Charlotte Software Engineering Meetup - Jan.2015

V+11

Page 92: Charlotte Software Engineering Meetup - Jan.2015

V+11

Page 93: Charlotte Software Engineering Meetup - Jan.2015

V

+1

2

Page 94: Charlotte Software Engineering Meetup - Jan.2015
Page 95: Charlotte Software Engineering Meetup - Jan.2015
Page 96: Charlotte Software Engineering Meetup - Jan.2015

FinalResults

Page 97: Charlotte Software Engineering Meetup - Jan.2015

Scalability

2011 2012 2013 2014

Page 98: Charlotte Software Engineering Meetup - Jan.2015

9x response time

Page 99: Charlotte Software Engineering Meetup - Jan.2015

3 years uptime

Page 100: Charlotte Software Engineering Meetup - Jan.2015

Go Hybrid!>

Page 101: Charlotte Software Engineering Meetup - Jan.2015

Go Hybrid!Thoughtfully

>

Page 102: Charlotte Software Engineering Meetup - Jan.2015

ThankYOU!

@majidfn