230 likes | 325 Views
r edis noelherrick.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
E N D
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