87
Key-value databases in practice Matteo Baglini Software Developer, Freelance [email protected] http://it.linkedin.com/in/ matteobaglini http://github.cpom/bmatte www.dotnettoscana.org

Key-value databases in practice Redis @ DotNetToscana

Embed Size (px)

Citation preview

Page 1: Key-value databases in practice Redis @ DotNetToscana

Key-value databases in

practice

Matteo Baglini Software Developer, [email protected]://it.linkedin.com/in/matteobaglinihttp://github.cpom/bmatte

www.dotnettoscana.org

Page 2: Key-value databases in practice Redis @ DotNetToscana

2

What is Redis?

«Advanced key-value store. It is often

referred to as a data structure server»

Page 3: Key-value databases in practice Redis @ DotNetToscana

3

Key-Value

Key Value

page:index <html><head>[...]

user:123:session xDrSdEwd4dSlZkEkj+

user:123:avatar 77u/PD94bWwgdm+

Everything is a «blob»Commands, primarily, can GET and SET the

values

Page 4: Key-value databases in practice Redis @ DotNetToscana

4

Advanced Key-ValueKey Value Type

page:index <html><head>[...] String

events:timeline { «Joe logged», «File X Uploaded», …} List

logged:today { 1, 2, 3, 4, 5 } Set

user:123:profile time => 10927353username => bmatte Hash

game:leaderboardjoe ~ 1.3483smith ~ 293.45fred ~ 83.22

Sorted Set

Different «data type/structure»Rich set of specialized commands

Page 5: Key-value databases in practice Redis @ DotNetToscana

5

Advanced Key-Value Everything is stored in memory Screamingly fast performance Persistent via snapshot or append-only log file Replication (only Master/Slave) Extensible via embedded scripting engine (Lua) Rich set of client libraries High availability (In progress)

◦ Cluster (Fault tolerance, Multi-Node consistence) ◦ Sentinel (Monitoring, Notification, Automatic failover)

Page 6: Key-value databases in practice Redis @ DotNetToscana

6

Project Created by Salvatore

Sanfilippo (@antirez) First «public release»

in March 2009. Since 2010 sponsored

by VMware.

Initially written to improve performance of Web Analytics product LLOOGG out of his

startup

Page 7: Key-value databases in practice Redis @ DotNetToscana

7

Project

Written in ANSI C No external dependencies Single thread (asynchronous evented I/O) Works on all POSIX-like system Exist unofficial build for Windows Open-source BSD licensed Community (list, IRC & wiki)

Page 8: Key-value databases in practice Redis @ DotNetToscana

8

Manifest

1. A DSL for Abstract Data Types.2. Memory storage is #1.3. Fundamental data structures for a

fundamental API.4. Code is like a poem.5. We're against complexity.6. Two levels of API.7. We optimize for joy.

Page 9: Key-value databases in practice Redis @ DotNetToscana

9

Getting Started

Page 10: Key-value databases in practice Redis @ DotNetToscana

10

Install

Latest stable version (2.6.*)

Page 11: Key-value databases in practice Redis @ DotNetToscana

11

Install

Latest unstable version (2.9.7)

Page 12: Key-value databases in practice Redis @ DotNetToscana

12

Server

Page 13: Key-value databases in practice Redis @ DotNetToscana

13

Configuration

Page 14: Key-value databases in practice Redis @ DotNetToscana

14

Client

Page 15: Key-value databases in practice Redis @ DotNetToscana

15

Telnet

Page 16: Key-value databases in practice Redis @ DotNetToscana

16

Data Types

Page 17: Key-value databases in practice Redis @ DotNetToscana

17

Strings

Page 18: Key-value databases in practice Redis @ DotNetToscana

18

Strings

Any blob will do(A value can be at max 512MB)

Page 19: Key-value databases in practice Redis @ DotNetToscana

19

Strings

Operations on strings holding an integer

Page 20: Key-value databases in practice Redis @ DotNetToscana

20

Strings Commands

Page 21: Key-value databases in practice Redis @ DotNetToscana

21

Strings Patterns

Sharing state across processes◦Distribute lock, Incremental ID, Time series,

User session. Web Analytics

◦User visit (day, week, month), Feature Tracking.

Caching◦String values can hold arbitrary data.

Rate limiting◦Limit number of API calls/minute.

Page 22: Key-value databases in practice Redis @ DotNetToscana

22

Keys

Page 23: Key-value databases in practice Redis @ DotNetToscana

23

Expiration

Any item in can be made to expireafter or at a certain time.

Page 24: Key-value databases in practice Redis @ DotNetToscana

24

Keys Commands

Page 25: Key-value databases in practice Redis @ DotNetToscana

25

Lists

Page 26: Key-value databases in practice Redis @ DotNetToscana

26

Lists

Sequence of string values

Page 27: Key-value databases in practice Redis @ DotNetToscana

27

Lists

Sequence of string values(Max length is 232 - 1 elements)

Page 28: Key-value databases in practice Redis @ DotNetToscana

28

Lists

Prevent indefinite growth

Page 29: Key-value databases in practice Redis @ DotNetToscana

29

Lists Commands

Page 30: Key-value databases in practice Redis @ DotNetToscana

30

Lists Patterns

Events Store or Notification◦Logs, Social Network Timelines, Notifications.

Fixed Data◦Last N activity.

Message Passing◦Durable MQ, Job Queue.

Circular list

Page 31: Key-value databases in practice Redis @ DotNetToscana

31

Sets

Page 32: Key-value databases in practice Redis @ DotNetToscana

32

Sets

Unordered set of unique values

Page 33: Key-value databases in practice Redis @ DotNetToscana

33

Sets

Unordered set of unique values(Max number of members is 232 – 1)

Page 34: Key-value databases in practice Redis @ DotNetToscana

34

SetsYou can do unions, intersections, differences of sets in very short

time.

Page 35: Key-value databases in practice Redis @ DotNetToscana

35

Sets Commands

Page 36: Key-value databases in practice Redis @ DotNetToscana

36

Sets Patterns

Web Analytics◦Unique Page View, IP addresses visiting.

Relations◦Friends, Followers, Tags.

Caching Result◦Store result of expensive intersection of data.

Page 37: Key-value databases in practice Redis @ DotNetToscana

37

Sorted Set

Page 38: Key-value databases in practice Redis @ DotNetToscana

38

Sorted Sets

Ordered set of unique values

Page 39: Key-value databases in practice Redis @ DotNetToscana

39

Sorted Sets

Access by rank

Page 40: Key-value databases in practice Redis @ DotNetToscana

40

Sorted Sets

Access by score

Page 41: Key-value databases in practice Redis @ DotNetToscana

41

Sorted Sets Commands

Page 42: Key-value databases in practice Redis @ DotNetToscana

42

Sorted Sets Patterns

Web Analytics◦Online users, Most visited pages.

Leaderbord◦Show top N.

Order by data◦Maintain a set of ordered data like user by

age.

Page 43: Key-value databases in practice Redis @ DotNetToscana

43

Hashes

Page 44: Key-value databases in practice Redis @ DotNetToscana

44

Hashes

Key → Value map (as value)

Page 45: Key-value databases in practice Redis @ DotNetToscana

45

Hashes

Set attributes(Store up to 232 - 1 field-value pairs)

Page 46: Key-value databases in practice Redis @ DotNetToscana

46

Hashes

Get attributes

Page 47: Key-value databases in practice Redis @ DotNetToscana

47

Hashes Commands

Page 48: Key-value databases in practice Redis @ DotNetToscana

48

Hashes Patterns

Storing Objects◦Hashes are maps between string fields and

string values, so they are the perfect data type to represent objects.

Page 49: Key-value databases in practice Redis @ DotNetToscana

49

Persistence

Page 50: Key-value databases in practice Redis @ DotNetToscana

50

Snapshot (RDB)Dump data to disk after certain

conditions are met

Page 51: Key-value databases in practice Redis @ DotNetToscana

51

Snapshot (RDB) Pro:

◦ RDB is a very compact single-file.◦ RDB files are perfect for backups.◦ RDB is very good for disaster recovery.◦ RDB allows faster restarts with big datasets.◦ RDB maximizes performances (backgr. I/O  via

fork(2)). Contro:

◦ RDB is NOT good if you need to minimize the chance of data loss in case Redis stops working (for example after a power outage).

◦ Fork can be time consuming if the dataset is very big.

Page 52: Key-value databases in practice Redis @ DotNetToscana

52

Append-only (AOF)Append all write operations to a log

Page 53: Key-value databases in practice Redis @ DotNetToscana

53

Append-only (AOF)Durability depends on fsync(2)

policy

Page 54: Key-value databases in practice Redis @ DotNetToscana

54

Append-only (AOF) Pro:

◦ AOF is much more durable.◦ AOF is an append only log, no seeks, nor corruption

problems (for example after a power outage).◦ AOF contains a log of all the operations one after the

other in an easy to understand and parse format. Contro:

◦ AOF files are usually bigger than the equivalent RDB.◦ AOF can be slower then RDB depending on the exact

fsync policy.

Page 55: Key-value databases in practice Redis @ DotNetToscana

55

What should I use? Use both persistence methods if you want a degree of

data safety comparable to what any RDBMS can provide you.

If you care a lot about your data, but still can live with a few minutes of data lose in case of disasters, you can simply use RDB alone.

There are many users using AOF alone, but we discourage it since to have an RDB snapshot from time to time is a great idea for doing database backups, for faster restarts.

Page 56: Key-value databases in practice Redis @ DotNetToscana

56

C# Clients

Page 57: Key-value databases in practice Redis @ DotNetToscana

57

C# clients

Rich set of clients

Page 58: Key-value databases in practice Redis @ DotNetToscana

58

C# clients

Page 59: Key-value databases in practice Redis @ DotNetToscana

59

BookSleeve

Page 60: Key-value databases in practice Redis @ DotNetToscana

60

Code

Page 61: Key-value databases in practice Redis @ DotNetToscana

61

Transactions

Page 62: Key-value databases in practice Redis @ DotNetToscana

62

Transactions

Multiple commands (ACID)

Page 63: Key-value databases in practice Redis @ DotNetToscana

63

Transactions Commands

Page 64: Key-value databases in practice Redis @ DotNetToscana

64

Transactions Patterns Classic scenario

◦Multi atomic commands. Optimistic locking

◦Check and Set (CAS Pattern) write only if not changed.

Page 65: Key-value databases in practice Redis @ DotNetToscana

65

Publish Subscribe

Page 66: Key-value databases in practice Redis @ DotNetToscana

66

PubSub

Provide 1-N messaging

Page 67: Key-value databases in practice Redis @ DotNetToscana

67

PubSub

Subscribe multi channels decoupled from the key space

Page 68: Key-value databases in practice Redis @ DotNetToscana

68

PubSub

Publish on some channel

Page 69: Key-value databases in practice Redis @ DotNetToscana

69

PubSub

Subscriber getting notified

Page 70: Key-value databases in practice Redis @ DotNetToscana

70

PubSub Commands

Page 71: Key-value databases in practice Redis @ DotNetToscana

71

PubSub Patterns

Message Passing◦Distribute message-oriented system, Event-

Driven Architecture, Service Bus.

Page 72: Key-value databases in practice Redis @ DotNetToscana

72

Code

Page 73: Key-value databases in practice Redis @ DotNetToscana

73

Replication

Page 74: Key-value databases in practice Redis @ DotNetToscana

74

Replication

One master replicate to multiple slaves

Page 75: Key-value databases in practice Redis @ DotNetToscana

75

ReplicationSlave send SYNC command and master transfers the database

file to the slave

Page 76: Key-value databases in practice Redis @ DotNetToscana

76

ReplicationSlaves can perform only read

operation

Page 77: Key-value databases in practice Redis @ DotNetToscana

77

Replication Patterns

Scalability◦Multiple slaves for read-only queries.

Redundancy◦Data replication.

Slave of Slave◦Graph-like structure for more scalability e

redundancy.

Page 78: Key-value databases in practice Redis @ DotNetToscana

78

Performance

Page 79: Key-value databases in practice Redis @ DotNetToscana

79

Performance

~50K read/write operations per seconds.

~100K read/write ops per second on a regular EC2 instance.

Screamingly fast performance

Page 80: Key-value databases in practice Redis @ DotNetToscana

80

Performanceredis-benchmark tool on a Ubuntu

virtual machine ~36K rps

Page 81: Key-value databases in practice Redis @ DotNetToscana

81

Application Architecture

Page 82: Key-value databases in practice Redis @ DotNetToscana

82

Infrastructure

Application Server

SQL Server

Redis

Page 83: Key-value databases in practice Redis @ DotNetToscana

83

Who is using Redis?

Page 84: Key-value databases in practice Redis @ DotNetToscana

84

Finally

Page 85: Key-value databases in practice Redis @ DotNetToscana

85

This is Redis

«I see Redis definitely more as a flexible tool than as a solution specialized to solve

a specific problem: his mixed soul of cache, store, and messaging server shows

this very well»

Salvatore Sanfilippo

Page 86: Key-value databases in practice Redis @ DotNetToscana

86

Risources http://redis.io/ http://github.com/antirez/redis http://groups.google.com/group/redis-db

Page 87: Key-value databases in practice Redis @ DotNetToscana

That’s all!