Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

41
THREE (OR MORE) THINGS YOU NEED TO KNOW ABOUT DATA MODELING Matthew Revell, Developer Advocate, Couchbase

Transcript of Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

Page 1: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

THREE (OR MORE) THINGS YOU NEED TO KNOW ABOUT DATA MODELINGMatthew Revell, Developer Advocate, Couchbase

Page 2: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

WE’RE STILL LEARNING

Page 3: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 3

Page 4: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 4

Three query methods

Application layer computation Off-load computation

Predictable queries

Key-value: pre-computed answers Views

Ad-hoc queriesN1QL and key-value with manual indexes

N1QL and views

Page 5: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

KEY-VALUE

Page 6: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 6

Key-value

Pre-compute answers asynchronously Store object state Choose when to embed data and when to refer

to it Design your keys well

Page 7: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

PRE-COMPUTED ANSWERS

Page 8: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 8

We’re used to asking questions

Page 9: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 9

Key-value look-ups give us a library of answers

42

Page 10: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 10

Answer oriented databases

http://martinfowler.com/bliki/AggregateOrientedDatabase.html

Page 11: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 11

Airline bookings

Page 12: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

EMBED, OR REFER?

How much should we denormalise?

Page 13: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 13

An ecommerce order

Page 14: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 14

The same order in a document

Page 15: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2014 Couchbase, Inc. ©2015 Couchbase Inc. 15

Embedded v referred

15

Page 16: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 16

When to embed

You should embed data when: Speed trumps all else

Slow moving data

No duplication

Application layer can keep multiple copies of same data in sync

Page 17: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 17

When to refer

You should refer to data when: Consistency is a priority

The data has large growth potential

Page 18: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

KEY DESIGN

Page 19: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 19

Three ways to build a key

Key design is as important as document design. There are three broad types of key:

Human readable/deterministic: e.g. an email address

Computer generated/random: e.g. UUID

Compound: e.g. UUID with a deterministic portion

Page 20: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 20

Human readable/deterministic

public class user {

private String name;private String email;private String streetAddress;private String city;private String country;private String postCode;private String telephone;private Array orders;private Array

productsViewed;}

{ "name": "Matthew Revell", "address": "11-21 Paul Street", "city": "London", "postCode": "EC2A 4JU", "telephone": "44-20-3837-9130", "orders": [ 1, 9, 698, 32 ], “productsViewed”: [8, 33, 99, 100] }

Key: [email protected]

Page 21: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 21

Random/computer genereated

{ "name": "Matthew Revell", "email": "[email protected]", "address": "11-21 Paul Street", "city": "London", "postCode": "EC2A 4JU", "telephone": "44-20-3837-9130", "orders": [ 1, 9, 698, 32 ], “productsViewed”: [8, 33, 99, 100] }

Key: 1001

Page 22: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2014 Couchbase, Inc. ©2015 Couchbase Inc. 22

Using counters to generate keys

22

Application

user_id = incr(“counter_key")

add(user_id, data)

Creating a new user

add(email_address, user_id)

Application

key = get("[email protected]")

get(key)

Finding user by email address

Page 23: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 23

Multiple look-up documents

u::count

1001

u::1001

{ "name": “Matthew Revell",

"facebook_id": 16172910,

"email": “[email protected]”,

“password”: ab02d#Jf02K

"created_at": "5/1/2012 2:30am",

“facebook_access_token”: xox0v2dje20,

“twitter_access_token”: 20jffieieaaixixj }

fb::16172910

1001

nflx::2939202

1001

twtr::2920283830

1001

em::[email protected]

1001

em::[email protected]

1001

uname::mrevell

1001

Page 24: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 24

Compound keys

Compound keys are look-up documents with a predictable name.

It’s a continuation of the embedded versus referred data discussion.

Page 25: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 25

Compound keys: example

u::1001

{ "name": "Matthew Revell", "email": "[email protected]", "address": "11-21 Paul Street", "city": "London", "postCode": "EC2A 4JU", "telephone": "44-20-3837-9130", "orders": [ 1, 9, 698, 32 ], “productsViewed”: [8, 33, 99, 100]

}

Page 26: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 26

Compound keys: example

u::1001

{ "name": "Matthew Revell", "email": "[email protected]", "address": "11-21 Paul Street", "city": "London", "postCode": "EC2A 4JU", "telephone": "44-20-3837-9130", "orders": [ 1, 9, 698, 32 ]}

u::1001::productsviewed

{"productsList": [

8, 33, 99, 100]

}

Page 27: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 27

Compound keys: example

u::1001

{ "name": "Matthew Revell", "email": "[email protected]", "address": "11-21 Paul Street", "city": "London", "postCode": "EC2A 4JU", "telephone": "44-20-3837-9130", "orders": [ 1, 9, 698, 32 ]}

u::1001::productsviewed

{"productsList": [

8, 33, 99, 100]

}

p::8

{

id": 1,"name": "T-shirt","description": "Red Couchbase shirt","quantityInStock": 99,"image": "tshirt.jpg”

}

Page 28: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 28

Compound keys: example

u::1001

{ "name": "Matthew Revell", "email": "[email protected]", "address": "11-21 Paul Street", "city": "London", "postCode": "EC2A 4JU", "telephone": "44-20-3837-9130", "orders": [ 1, 9, 698, 32 ]}

u::1001::productsviewed

{"productsList": [

8, 33, 99, 100]

}

p::8

{

id": 1,"name": "T-shirt","description": "Red Couchbase shirt","quantityInStock": 99

}

p::8::img

“http://someurl.com/tshirt.jpg”

Page 29: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

N1QL AND VIEWS!

The world beyond key-value

Page 30: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 30

Page 31: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 31

N1QL and Views

N1QL Views

Ad-hoc querying Predictable queries

Nested JSON in and unnested JSON out

Number crunching

Large growth clustersMulti-dimensional/geospatial queries

Page 32: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 32

N1QL

Indexes Schema and documents types Keyspaces

Page 33: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 33

Indexes

You always need at least one index PRIMARY index gives you all of the keys in the

bucket Secondary indexes enable ad-hoc querying at

speed

Page 34: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 34

Indexes

GSI

versusVIEWS

Page 35: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 35

Indexes

NEW Global Secondary Indexes Views

N1QL query to create a new indexJavascript map/reduce

Option to run dedicated indexing and query nodes

Queries always run on database nodes

ForestDB backed Couchstore backed

Supports multi-dimensional/geospatial queries

Page 36: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 36

Maintaining schema and working with keyspaces JOINs work on primary keys and secondary keys They JOIN across and within keyspaces (for now, that

means buckets)

Airlines:

airline_24 ← Key (“primary key”){ "id": "24", "type": "airline", "name": "American Airlines", "iata": "AA", "icao": "AAL", "callsign": "AMERICAN", "country": "United States", "active": "Y"}

Routes:

route_5966 ← Key { "id": "5966", "type": "route", "airline": "AA", "airlineid": "airline_24", ← This is the foreign key "sourceairport": "MCO", "destinationairport": "SEA", "stops": "0", "equipment": "737", "schedule": [... ]}

Page 37: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

©2015 Couchbase Inc. 37

Offloading computation to N1QL

N1QL allows you to choose which elements are returned at the top level. This is incredibly useful as it reduces the need to write complex parsing logic: Within the application. In Client side front end frameworks

(Angular/Backbone etc)SELECT a.name, s.flight, s.utc, r.sourceairport, r.destinationairport, r.equipment FROM `travel-sample` r UNNEST r.schedule s JOIN `travel-sample` a ON KEYS r.airlineid WHERE r.sourceairport='LHR' AND r.destinationairport='LAX' AND s.day=2 ORDER BY a.name

Page 38: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

QUESTIONS!

Page 39: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

OTHER SESSIONS!

IRFC: A design pattern for next gen business applicationsSteve Yen, 4.30pm ThursdayDev track

Page 40: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

THANKS!

Matthew [email protected]@matthewrevell

Page 41: Three Things You Need to Know About Data Modeling: Couchbase Connect 2015

Get Started with Couchbase Server 4.0: www.couchbase.com/beta

Get Trained on Couchbase: training.couchbase.com