richer data history in groovy with event sourcing

85
Groovier Data History with Event Sourcing Greach 2014

Upload: steve-pember

Post on 26-May-2015

760 views

Category:

Software


0 download

DESCRIPTION

As Grails developers we reflexively lean on the default pattern for data storage: a single row represents the current state of a Domain Object. For most applications, only ever knowing the current state is just fine. However, understanding the manipulations that got your data to that state are just as important as the current state itself, especially in a large system with multiple users. Enter Event Sourcing: instead of persisting the current state of our Domain Objects, we store historical events about our data. In this talk I will discuss the basic concepts of Event Sourcing. We will discuss the advantages – particularly around performance and analytics – and disadvantages of using this pattern. We will see how easily it can be implemented in Groovy and used within a Grails application. Finally, we’ll examine some practical use cases and when one would consider implementation. Additionally, there's a code demo that is not covered in the slides, but can be found here: https://github.com/spember/greach2014-es-demo

TRANSCRIPT

Page 1: Richer Data History in Groovy with Event Sourcing

Groovier Data History with Event Sourcing

Greach 2014

Page 2: Richer Data History in Groovy with Event Sourcing

Web / Business Analytics

Meet Bob

2

Page 3: Richer Data History in Groovy with Event Sourcing

3

Page 4: Richer Data History in Groovy with Event Sourcing

4

Page 5: Richer Data History in Groovy with Event Sourcing

5

Page 6: Richer Data History in Groovy with Event Sourcing

6

Page 7: Richer Data History in Groovy with Event Sourcing

7

What do you have to offer?

Page 8: Richer Data History in Groovy with Event Sourcing

8

State of Your Data

Page 9: Richer Data History in Groovy with Event Sourcing

9

Page 10: Richer Data History in Groovy with Event Sourcing

10

Page 11: Richer Data History in Groovy with Event Sourcing

11

Page 12: Richer Data History in Groovy with Event Sourcing

12

Page 13: Richer Data History in Groovy with Event Sourcing

13

Page 14: Richer Data History in Groovy with Event Sourcing

14

Balance: $100

Page 15: Richer Data History in Groovy with Event Sourcing

15

Balance: -$100

Page 16: Richer Data History in Groovy with Event Sourcing

16

Page 17: Richer Data History in Groovy with Event Sourcing

17

Page 18: Richer Data History in Groovy with Event Sourcing

18

Page 19: Richer Data History in Groovy with Event Sourcing

19

Page 20: Richer Data History in Groovy with Event Sourcing

20

Maintaining Only the Current State is a limitation

Historical Data can be important

Page 21: Richer Data History in Groovy with Event Sourcing

21

Event Sourcing

Page 22: Richer Data History in Groovy with Event Sourcing

No Direct Manipulation of State

Page 23: Richer Data History in Groovy with Event Sourcing

23

Page 24: Richer Data History in Groovy with Event Sourcing

24

Page 25: Richer Data History in Groovy with Event Sourcing

Events are a Timeline

Page 26: Richer Data History in Groovy with Event Sourcing

26

Page 27: Richer Data History in Groovy with Event Sourcing

27

Page 28: Richer Data History in Groovy with Event Sourcing

28

Page 29: Richer Data History in Groovy with Event Sourcing

29

Page 30: Richer Data History in Groovy with Event Sourcing

30

Page 31: Richer Data History in Groovy with Event Sourcing

31

Page 32: Richer Data History in Groovy with Event Sourcing

32

Page 33: Richer Data History in Groovy with Event Sourcing

33

Page 34: Richer Data History in Groovy with Event Sourcing

34

Current State Is OnlyOne PROJECTION

Page 35: Richer Data History in Groovy with Event Sourcing

35

Create other Views

Page 36: Richer Data History in Groovy with Event Sourcing

36

Page 37: Richer Data History in Groovy with Event Sourcing

IT HURTS

37

Page 38: Richer Data History in Groovy with Event Sourcing

Grocery Store shopping cart

38

Page 39: Richer Data History in Groovy with Event Sourcing

E Commerce Shopping cart

39

Page 40: Richer Data History in Groovy with Event Sourcing

40

Page 41: Richer Data History in Groovy with Event Sourcing

41

Page 42: Richer Data History in Groovy with Event Sourcing

Scenarios:

42

• Discover if Users are Adding and Removing Products: Give them a discount to encourage purchase

• Time between adding products and purchase

• Frequency between cart events and other system events

Page 43: Richer Data History in Groovy with Event Sourcing

Bob is Pleased

43

Page 44: Richer Data History in Groovy with Event Sourcing

Not a New Concept

Page 45: Richer Data History in Groovy with Event Sourcing

45

Page 46: Richer Data History in Groovy with Event Sourcing

46

Page 47: Richer Data History in Groovy with Event Sourcing

47

Page 48: Richer Data History in Groovy with Event Sourcing

48

Page 49: Richer Data History in Groovy with Event Sourcing

49

Wait, what about those transaction logs?

Page 50: Richer Data History in Groovy with Event Sourcing

50

Page 51: Richer Data History in Groovy with Event Sourcing

51

Page 52: Richer Data History in Groovy with Event Sourcing

52

Audit Log will tell the history

Events tell you the Intent of history

Page 53: Richer Data History in Groovy with Event Sourcing

53

Implementation

Page 54: Richer Data History in Groovy with Event Sourcing

54

Page 55: Richer Data History in Groovy with Event Sourcing

55

Page 56: Richer Data History in Groovy with Event Sourcing

56

Page 57: Richer Data History in Groovy with Event Sourcing

57

Page 58: Richer Data History in Groovy with Event Sourcing

58

Page 59: Richer Data History in Groovy with Event Sourcing

59

Page 60: Richer Data History in Groovy with Event Sourcing

60

Page 61: Richer Data History in Groovy with Event Sourcing

61

Page 62: Richer Data History in Groovy with Event Sourcing

62

Creating an Event Store

Page 63: Richer Data History in Groovy with Event Sourcing

63

Aggregate(it’s like a Domain Instance)

Page 64: Richer Data History in Groovy with Event Sourcing

64

Page 65: Richer Data History in Groovy with Event Sourcing

Events

65

Page 66: Richer Data History in Groovy with Event Sourcing

66

Page 67: Richer Data History in Groovy with Event Sourcing

67

Page 68: Richer Data History in Groovy with Event Sourcing

68

Page 69: Richer Data History in Groovy with Event Sourcing

69

Page 70: Richer Data History in Groovy with Event Sourcing

70

Snapshots: essential optimization

Page 71: Richer Data History in Groovy with Event Sourcing

71

Page 72: Richer Data History in Groovy with Event Sourcing

72

Page 73: Richer Data History in Groovy with Event Sourcing

73

Choosing a Persistance Layer

Page 74: Richer Data History in Groovy with Event Sourcing

74

No real need for an ORM

Page 75: Richer Data History in Groovy with Event Sourcing

Data base agnostic

Page 76: Richer Data History in Groovy with Event Sourcing

Consider Using a Relational Database

76

Page 77: Richer Data History in Groovy with Event Sourcing

77

Page 78: Richer Data History in Groovy with Event Sourcing

78

Page 79: Richer Data History in Groovy with Event Sourcing

79

Demo Time

Page 80: Richer Data History in Groovy with Event Sourcing

80

… But Should I use it?

Page 81: Richer Data History in Groovy with Event Sourcing

Use it only for Business-Critical data

Page 82: Richer Data History in Groovy with Event Sourcing

Make Bob Happy

82

Page 83: Richer Data History in Groovy with Event Sourcing

Thank You!

Page 84: Richer Data History in Groovy with Event Sourcing

Questions?

Page 85: Richer Data History in Groovy with Event Sourcing

Image References(Multiple Newspapers): http://www.kba.com/gb/news/detail/article/30-kba-newspaper-customers-carry-off-quality-awards-2/back/50/

(Harbor): http://www.dredgingtoday.com/2013/09/06/corps-highlights-economic-benefits-of-savannah-harbor-dredging-usa/(Sad Bob) http://workerscompensationwatch.com/2012/12/

(Logs in River / Log Driving) http://www.flickr.com/photos/foresthistory/(Data Base Transaction Log) http://yutechnet.com/?p=96

(Amazon Shopping Cart) http://www.amazon.com(Ha, Ha, Business) http://www.quickmeme.com

(crowd of people) http://www.flickr.com/photos/jamescridland/613445810/(skeptical dog) http://loltheists.com/?p=2427

(brick layer) http://www.torange.us/photo/4/13/brick-mud-brick-building-1259649354_44.jpg