70s - database access is hard and depends on the app 80s – relational databases come on the scene...

23
redis noelherrick.com

Upload: judith-nash

Post on 01-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

redisnoelherrick.com

History of database technology

70s - Database access is hard and depends on the app

80s – Relational databases come on the scene

90s – Object oriented programming and DBs

00s – Interpreted languages, Agile

Web scale

Means an app that supports millions of users

Represents relationships Variable usage (viral apps) Data that is important aggregated,

not by itself Time-to-market vs. proper design Uptime (availability) vs. correctness Ease of management vs.

customization

NoSQL

Rejection of RDBMS as one-size-fits-all

Minimal functions and minimal admin

BASE Basically available, Soft state, Eventually

consistent ACID

Atomic, Consistent, Isolation, Durable

Basics of Redis

Written in C Open-source and free (no royalties) New BSD license By Salvatore Sanfilippo Created for a Web analytics project Sponsored by VMWare Used by various projects: github,

craigslist, stackoverflow, digg

Architecture

Key-value dictionary with sets, lists Single-threaded Delayed writes Data needs to be kept in-memory Simple protocol Lack of table, schema, or database Very basic security

Potential Uses

Session store One (or more) sessions per user Many reads, few writes Throw-away data Timeouts

Potential Uses

Logging Rapid, low latency writes Data you don’t care that much about Not that much data (must be in-

memory)

Transaction store

Low-latency write Many reads throughout transaction Short (less than a day) Think a shopping cart or a file upload

General Cases

Data that you don’t mind losing Records that can be accessed by a

single primary key Schema that that is either a single

value or is a serialized object

Clients

Java Jedis (github)

.NET ServiceStack (Google Code)

Ruby redis-rb (github)

Basic functions

SET k v GET k MSET k v [k2 v2] MGET k [k2 …] GETSET k v

Returns value before set, sets new value SETNX k v (only sets if does not

exist) SETEX k n v (expires a key after n

seconds)

Advanced Functionality - Sets

Set is unordered grouping of values SADD k v SCARD k – counts set SISMEMBER k v – checks to see if v is

in set SUNION k [k2 …] – adds sets SINTER k [k2 …] – intersects sets SDIFF k [k2 …] – subtracts sets

Advanced Functionality - Lists Ordered group LPUSH k v – prepends LPOP k v – removes 1st element LINSERT k BEFORE || AFTER n v – inserts

v before or after the nth element RPUSH kv – appends RPOP k v – removes last element LLEN k – number of elements LRANGE k n m – gets range n to m

inclusive

Adv Functionality - Replication

SLAVEOF host port Asynchronous Can chain together pub -> slave ->

slave Cannot chain together pub <-> pub

Advanced Functionality - Misc

Sorted sets (indexed but with set operations, higher big-O complexity)

Hashes (many values for one key) HSET k field v – sets v for field for k HGET k field

MULTI / EXEC / DISCARD / WATCH – xactions

Message queues (Pub/Sub)

Troubleshooting - Logs

Startup info Client logins Databases and number of keys Background saves and time Replication

Troubleshooting - IO Patterns

Bottleneck on memory Low CPU Disk only on flush

Big O Costs

Amortized SET, GET, etc – O(1) KEYS – O(N) ZADD, ZREM, etc – O(log(n))

Place in the Database Jungle

General Types of Databases Relational Databases – Oracle, Postgres,

MySQL Object Stores – Objectivity, Cache, db4o Key Value Stores – Berkelely DB, Riak,

Cassandra Document Stores – Mongo, Lotus, Couch Graph Databases – Neo4j, InfoGrid

Redis is a key value store

Comparisons - Cassandra

Intentionally made for clustering Replicas are not consistent Written in Java Much more robust organization Often called a column-store, though

this is a misnomer Imitates Dynamo

Comparisons - Riak

Written in Erlang Robust organization REST Api Made for clustering, similar to

Cassandra Imitates Dynamo

Comparisons - MongoDB

Document store – can represent objects natively – understands its data

Can access by values Much more advanced architecture Auto-sharding