SlideShare a Scribd company logo
1 of 140
Download to read offline
Append-only data stores

vs

onsdag 16 oktober 13
What?

onsdag 16 oktober 13
Append-only data stores
Only add, never remove or change
Can retrieve old values

onsdag 16 oktober 13
Source code
Version controlled
Keep all versions

onsdag 16 oktober 13
The problem

onsdag 16 oktober 13
Mutable state

id

email

jakr

onsdag 16 oktober 13

name
Jan Kronquist

jan.kronquist@jayway.se
Mutable state

id

name

email

jakr

Jan Kronquist

jan.kronquist@jayway.se

UPDATE customer
SET email="jan.kronquist@jayway.com"
WHERE id="jakr"

onsdag 16 oktober 13
Mutable state

id

name

email

jakr

Jan Kronquist

jan.kronquist@jayway.com

UPDATE customer
SET email="jan.kronquist@jayway.com"
WHERE id="jakr"

onsdag 16 oktober 13
Mutable state

id

name

email

jakr

Jan Kronquist

jan.kronquist@jayway.com

UPDATE customer
SET email="jan.kronquist@jayway.com"
WHERE id="jakr"

I didnโ€™t get con๏ฌrmation of the order last week?

onsdag 16 oktober 13
Mutable state

id

name

email

jakr

Jan Kronquist

jan.kronquist@jayway.com

UPDATE customer
SET email="jan.kronquist@jayway.com"
WHERE id="jakr"

I didnโ€™t get con๏ฌrmation of the order last week?
Could you reset my email address?

onsdag 16 oktober 13
The technical details

SELECT count(*) AS inSweden
FROM customer
WHERE email LIKE "%@jayway.se"

SELECT count(*) AS elsewhere
FROM customer
WHERE email LIKE "%@jayway.com"

total = inSweden + elsewhere

onsdag 16 oktober 13
Human errors

DELETE
FROM customer
WHERE email LIKE "j%"

onsdag 16 oktober 13
Scalability - the easy parts
Caching

Static content

onsdag 16 oktober 13
Scalability - the easy parts
Caching

Static content

onsdag 16 oktober 13
Scalability - the easy parts
Caching

Static content

Stateless work

onsdag 16 oktober 13
Scalability - the easy parts
Caching

Static content

Stateless work
Load balancer

onsdag 16 oktober 13
Scalability - the hard parts
State + behavior

onsdag 16 oktober 13
Scalability - the hard parts
State + behavior

onsdag 16 oktober 13
Example domain

onsdag 16 oktober 13
Rock - Paper - Scissors

onsdag 16 oktober 13
http://rock-paper-scissors.com/
The future Facebook of Rock Paper Scissors
Millions of users
Many games per user

onsdag 16 oktober 13
Playing the game

Player A

Player B
onsdag 16 oktober 13

Server
Playing the game

Player A

Server
Game 123

Player B
onsdag 16 oktober 13
Playing the game

Player A

paper

Server
Game 123

Player B
onsdag 16 oktober 13
Playing the game

Player A

paper

Server
Game 123
Player B: paper

Player B
onsdag 16 oktober 13
Playing the game

rock
Player A

Server
Game 123
Player B: paper
Player A: rock

Player B
onsdag 16 oktober 13
Playing the game

Player A

Game 123
winner: Player B
loser: Player A

Server
Game 123
Player B: paper
Player A: rock

Player B
onsdag 16 oktober 13
Playing the game
GAME WON
other move
(victory)

CREATED

WAITING
any move

other move
(tie)

GAME TIED

Player A

Game 123
winner: Player B
loser: Player A

Server
Game 123
Player B: paper
Player A: rock

Player B
onsdag 16 oktober 13
Entities

onsdag 16 oktober 13
Entities
Player
+ id
+ name
+ email

onsdag 16 oktober 13
Entities

+
+
+
+
+
+

onsdag 16 oktober 13

Game
id
state
players
moves
winner
loser

Player
+ id
+ name
+ email
Entities

+
+
+
+
+
+

onsdag 16 oktober 13

Game
id
state
players
moves
winner
loser

Player
+ id
+ name
+ email

Move
+ move
+ player
Actions
Create game

POST /games

Make move

POST /games/123
move=rock

Get game result

GET /games/123

onsdag 16 oktober 13
Actions
Create game

POST /games

Make move

POST /games/123
move=rock

Get game result

GET /games/123

1. Form (make move)
2. Waiting
3. Game result
4. Error

onsdag 16 oktober 13
Clojure

onsdag 16 oktober 13
Clojure data structures

onsdag 16 oktober 13
Clojure data structures
Lists - singly linked
(1 2 3 4 5) (fred ethel lucy) (list 1 2 3)

onsdag 16 oktober 13
Clojure data structures
Lists - singly linked
(1 2 3 4 5) (fred ethel lucy) (list 1 2 3)

Vectors - indexed access
[1 2 3]

onsdag 16 oktober 13

["fred" 17 3.14 "bar"]
Clojure data structures
Lists - singly linked
(1 2 3 4 5) (fred ethel lucy) (list 1 2 3)

Vectors - indexed access
[1 2 3]

["fred" 17 3.14 "bar"]

Maps
{:name

onsdag 16 oktober 13

"Jan Kronquist" :age 37}
Event Sourcing
with
Event Store

onsdag 16 oktober 13
Event Sourcing
Events that have happened
Ordered in time
Source of truth

onsdag 16 oktober 13
http://geteventstore.com
Runs on .NET and Mono
Free (store) or Commercial (HA)
API

โ‚ฌ1500/year

Custom TCP (c#)
ATOM over HTTP (xml/json)

Features
Event streams, projections, generate new events (CEP)

onsdag 16 oktober 13
Event example

Server

onsdag 16 oktober 13

EventStore
Event example
CreateGameCommand{:game 123 :creator "player-1"}

Server

onsdag 16 oktober 13

EventStore
Event example
CreateGameCommand{:game 123 :creator "player-1"}

Server

EventStore

GameCreatedEvent{:game 123 :creator "player-1"}

onsdag 16 oktober 13
Event example
MakeMoveCommand{:game 123 :player "player-1" :move "rock"}

Server

EventStore

GameCreatedEvent{:game 123 :creator "player-1"}
MoveMadeEvent{:game 123 :player "player-1" :move "rock"}

onsdag 16 oktober 13
Event example
MakeMoveCommand{:game 123 :player "player-2" :move "paper"}

Server

EventStore

GameCreatedEvent{:game 123 :creator "player-1"}
MoveMadeEvent{:game 123 :player "player-1" :move "rock"}
MoveMadeEvent{:game 123 :player "player-2" :move "paper"}
GameWonEvent{:game 123 :winner "player-2" :loser "player-1"}

onsdag 16 oktober 13
Current state?
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}

onsdag 16 oktober 13
Current state?
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}

GAME WON
if victory

CREATED

WAITING
any move

other move
if tie

GAME TIED

onsdag 16 oktober 13
Current state?
GameCreatedEvent
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}

GAME WON
if victory

CREATED

WAITING
any move

other move
if tie

GAME TIED

onsdag 16 oktober 13
Current state?
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}

GAME WON
if victory

CREATED

WAITING
any move

other move
if tie

GAME TIED

onsdag 16 oktober 13
Aggregates
Scope of consistency when handling a command

Game
+ id
+ state
+ players
+ moves
+ winner
+ loser

onsdag 16 oktober 13

Move

Player

+ id

+ id

+ move

+ name

+ player

+ email
Aggregates as Event Streams

stream = game-1
version = 2

onsdag 16 oktober 13

event1 GameCreatedEvent{:game 1...}
event2 MoveMadeEvent{:game 1....}
Aggregates as Event Streams

stream = game-1
version = 2

event1 GameCreatedEvent{:game 1...}
event2 MoveMadeEvent{:game 1....}

stream = game-2
version = 4

event1
event2
event3
event4

onsdag 16 oktober 13

GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}
Aggregates as Event Streams

stream = game-1
version = 2

event1 GameCreatedEvent{:game 1...}
event2 MoveMadeEvent{:game 1....}

stream = game-2
version = 4

event1
event2
event3
event4

GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}

curl "http://127.0.0.1:2113/streams/game-1"
-d @eventdata.json
-H "Content-Type:application/json"
-H "ES-ExpectedVersion: 2"

onsdag 16 oktober 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}

onsdag 16 oktober 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}

for (Event events : allEvents) {
if (event instanceof GameCreatedEvent) {
created++;
}
}
return created;

onsdag 16 oktober 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}

onsdag 16 oktober 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}

onsdag 16 oktober 13

created = 2
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}
created = 2
GameCreatedEvent{:game 3...}

onsdag 16 oktober 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}
created = 2
GameCreatedEvent{:game 3...}

(state, event) -> {
if (event instanceof GameCreatedEvent) {
return state++;
}
rerturn state;
}

onsdag 16 oktober 13
Projections in Javascript
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},

});

onsdag 16 oktober 13
Projections in Javascript
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},
GameCreatedEvent: function(s, e) {
s.created++;
return s;
},

});

onsdag 16 oktober 13
Projections in Javascript
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},
GameCreatedEvent: function(s, e) {
s.created++;
return s;
},
GameWonEvent: function(s, e) {
s.completed++;
return s;
},

});

onsdag 16 oktober 13
Projections in Javascript
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},
GameCreatedEvent: function(s, e) {
s.created++;
return s;
},
GameWonEvent: function(s, e) {
s.completed++;
return s;
},
GameTiedEvent: function(s, e) {
s.completed++;
return s;
}
});

onsdag 16 oktober 13
Projections in Javascript
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},
GameCreatedEvent: function(s, e) {
s.created++;
return s;
},

});

onsdag 16 oktober 13

GameWonEvent: function(s, e) {
s.completed++;
return s;
},
/projections/games-counter
GameTiedEvent: function(s, e) {
{
s.completed++;
created: 15,
return s;
completed: 10
}
}
External Projections
Business logic

events

onsdag 16 oktober 13
External Projections
Business logic

Projections

events

onsdag 16 oktober 13

events
External Projections
Business logic

Projections

events

events

Available
Consistent

onsdag 16 oktober 13
External Projections
Commands

Queries

events

events

Available
Consistent

onsdag 16 oktober 13
System with EventStore

onsdag 16 oktober 13
System with EventStore

Command
Handler

onsdag 16 oktober 13
System with EventStore

1.command

onsdag 16 oktober 13

Command
Handler
System with EventStore

1.command

onsdag 16 oktober 13

Command
Handler

2.get events

Event
Store
System with EventStore

1.command

onsdag 16 oktober 13

Command
Handler

2.get events
3.add events

Event
Store
System with EventStore

1.command

onsdag 16 oktober 13

Command
Handler

2.get events
3.add events

4.update
projections

Event
Store
System with EventStore

1.command

Command
Handler

2.get events
3.add events

5.get events
or projections

Some
service

onsdag 16 oktober 13

4.update
projections

Event
Store
System with EventStore

1.command

Command
Handler

2.get events
3.add events

4.update
projections

Event
Store

5.get events
or projections

Some
service

onsdag 16 oktober 13

6.update state
System with EventStore

1.command

Command
Handler

2.get events
3.add events

4.update
projections

Event
Store

5.get events
or projections

7.query

onsdag 16 oktober 13

Some
service

6.update state
More info
Functional Programming with DDD
http://skillsmatter.com/podcast/design-architecture/ddd-functional-programming

A deep look into the Event Store
http://vimeo.com/53153270

onsdag 16 oktober 13
Datomic

onsdag 16 oktober 13
http://www.datomic.com/
Runs on JVM

โ‚ฌ2300

Free (3 peers, local storage) or Commercial (HA, distrib)
Features
ACID transactions, declarative query engine

onsdag 16 oktober 13
Fact
Something known to have happened or existed

onsdag 16 oktober 13
Fact
Something known to have happened or existed

2004-10-01 the email of Jan was โ€jan.kronquist@jayway.seโ€

onsdag 16 oktober 13
Fact
Something known to have happened or existed

2004-10-01 the email of Jan was โ€jan.kronquist@jayway.seโ€
2007-01-01 the email of Jan was โ€jan.kronquist@jayway.comโ€

onsdag 16 oktober 13
Atomic fact (datom)
Entity
Attribute
Value
Time

onsdag 16 oktober 13
Atomic fact (datom)
Entity

The person Jan Kronquist

Attribute

email

Value

โ€jan.kronquist@jayway.seโ€

Time

2004-10-01

onsdag 16 oktober 13
Data perception

Facts

Add facts
Add more facts
Even more facts

time
onsdag 16 oktober 13
Data perception

Facts

Add facts
Add more facts
Even more facts

time
onsdag 16 oktober 13
Data perception

Facts

query

Add facts
Add more facts
Even more facts

time
onsdag 16 oktober 13
Data perception

Facts

query

Add facts
Add more facts

query
Even more facts

time
onsdag 16 oktober 13
Data perception

Facts

Add facts
Add more facts

query
Even more facts

time
onsdag 16 oktober 13
Data perception

Facts

Add facts
Add more facts

query
Even more facts

time
onsdag 16 oktober 13
Data perception

Facts

Add facts
Add more facts

query
Even more facts

time
onsdag 16 oktober 13
Database deconstructed

onsdag 16 oktober 13
Database deconstructed
Transactor
Consistency by serializing transactions

onsdag 16 oktober 13
Database deconstructed
Transactor
Consistency by serializing transactions

Peer
Your code + Query engine

onsdag 16 oktober 13
Database deconstructed
Transactor
Consistency by serializing transactions

Peer
Your code + Query engine

Storage service
Key/value store
Scalable reads and writes
eg DynamoDB, In๏ฌniSpan, Riak + ZooKeeper, SQL(!)

onsdag 16 oktober 13
System with Datomic
Peer A

Transactor

Distributed

onsdag 16 oktober 13

Storage

Service
System with Datomic
1.command

Peer A

Transactor

Distributed

onsdag 16 oktober 13

Storage

Service
System with Datomic
1.command

Peer A

2.read and cache

Transactor

Distributed

onsdag 16 oktober 13

Storage

Service
System with Datomic
1.command

Peer A
3.transact
2.read and cache

Transactor

Distributed

onsdag 16 oktober 13

Storage

Service
System with Datomic
1.command

Peer A
3.transact
2.read and cache

Transactor
4.write

Distributed

onsdag 16 oktober 13

Storage

Service
System with Datomic
1.command

Peer A
3.transact
2.read and cache

Transactor
4.write
5.notify

Peer B

onsdag 16 oktober 13

Distributed

Storage

Service
Datomic example

Peer

onsdag 16 oktober 13

Transactor
Datomic example
CreateGameCommand{:game 123 :creator "player-1"}

Peer

onsdag 16 oktober 13

Transactor
Datomic example
CreateGameCommand{:game 123 :creator "player-1"}

Transactor

Peer

[123
[123

onsdag 16 oktober 13

:creator
:state

"player-1"
:created

T1]
T1]
Datomic example
CreateGameCommand{:game 123 :creator "player-1"}

Transactor

Peer

[123
[123

:creator
:state

"player-1"
:created

["player-1" :email "player@gmail.com" T0]

onsdag 16 oktober 13

T1]
T1]
Datomic example
CreateGameCommand{:game 123 :creator "player-1"}

Transactor

Peer

[123
[123

onsdag 16 oktober 13

:creator
:state

"player-1"
:created

T1]
T1]
Datomic example
CreateGameCommand{:game 123 :creator "player-1"}

Transactor

Peer

[123
[123

:creator
:state

"player-1"
:created

T1]
T1]

GameCreatedEvent{:game 123 :creator "player-1"}

onsdag 16 oktober 13
Datomic example
CreateGameCommand{:game 123 :creator "player-1"}

Transactor

Peer

[123
[123

onsdag 16 oktober 13

:creator
:state

"player-1"
:created

T1]
T1]
Datomic example
MakeMoveCommand{:game 123 :player "player-1" :move :rock}

Transactor

Peer

[123
[123
[123_1
[123_1
[123
[123

onsdag 16 oktober 13

:creator
:state
:move
:player
:moves
:state

"player-1"
:created
:rock
"player-1"
123_1
:waiting

T1]
T1]
T2]
T2]
T2]
T2]
Datomic example
MakeMoveCommand{:game 123 :player "player-2" :move :paper}

Transactor

Peer

[123
[123
[123_1
[123_1
[123
[123
[123_2
[123_2
[123
[123
[123
[123
onsdag 16 oktober 13

:creator
:state
:move
:player
:moves
:state
:move
:player
:moves
:state
:winner
:loser

"player-1"
:created
:rock
"player-1"
123_1
:waiting
:paper
"player-2"
123_2
:won
"player-2"
"player-1"

T1]
T1]
T2]
T2]
T2]
T2]
T3]
T3]
T3]
T3]
T3]
T3]
Aggregates?
Only by convention
cas (compare and set)
isComponent on relation

Game
+ id
+ state
+ players
+ moves
+ winner
+ loser

onsdag 16 oktober 13

Move
+ id
+ move
+ player
Query language
What to ๏ฌnd
Where clauses

[entity attribute value]

Implicit joins
Call arbitrary function

onsdag 16 oktober 13
Query example - basic

[:find ?email
:where
[_ :email ?email]]

onsdag 16 oktober 13
Query example - basic

[:find ?email
:where
[_ :email ?email]]

[["jan.kronquist@jayway.com]
["player-1@gmail.com"]
["player-2@gmail.com"]]

onsdag 16 oktober 13
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]

onsdag 16 oktober 13
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]

[[:created
[:waiting
[:won
[:tied

onsdag 16 oktober 13

4]
1]
7]
3]]
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]

[[:created
[:waiting
[:won
[:tied

4]
1]
7]
3]]

inProgess = created + waiting

onsdag 16 oktober 13
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},
GameCreatedEvent: function(s, e) {
s.created++;
return s;
},
GameWonEvent: function(s, e) {
s.completed++;
return s;
},
GameTiedEvent: function(s, e) {
/projections/games-counter
s.completed++; {
return s;
created: 15,
}
completed: 10
});
}

onsdag 16 oktober 13

[[:created
[:waiting
[:won
[:tied

4]
1]
7]
3]]

inProgess = created + waiting
Query example - join

[:find ?email (count ?game)
:where
[?player :email
?email]
[?game
:winner ?player]]

onsdag 16 oktober 13
Query at any time
(q โ€™[:find ?email
:where
[_ :email ?email]]
db)

onsdag 16 oktober 13
Query at any time
(q โ€™[:find ?email
:where
[_ :email ?email]]
db)

(q โ€™[:find ?email
:where
[_ :email ?email]]
(as-of db #inst "2013-09-02"))

onsdag 16 oktober 13
Query over time
(q โ€™[:find ?e (count ?tx)
:where
[?e :email _ ?tx]]
db)

onsdag 16 oktober 13
Query over time
(q โ€™[:find ?e (count ?tx)
:where
[?e :email _ ?tx]]
db)

(q โ€™[:find ?e (count ?tx)
:where
[?e :email _ ?tx]]
(history db))

onsdag 16 oktober 13
Java API

List<Object> results =
Peer.q(someQuery, conn.db());

Future<Map> txResult = conn.transact(data_tx);

onsdag 16 oktober 13
More info
http://www.datomic.com/videos.html

onsdag 16 oktober 13
Comparison

onsdag 16 oktober 13
Comparison
Data model
Schema evolution
Queries
Recommendation

onsdag 16 oktober 13
EventStore Events
โœ“ Understandable by normal people
โœ“ Designed for integration
โœ“ Forces aggregate design (scalability)
โœ“ Capture intent
เน Require design effort to get right
เน Complect transaction and query

onsdag 16 oktober 13
Datomic Facts
โœ“ Support partial information
โœ“ Normalization support
โœ“ CRUD out of the box
เน Static schema

onsdag 16 oktober 13
EventStore schema evolution
โœ“ New events
โœ“ New event attributes
โœ“ Event attributes rename (change deserialization)
โœ“ Projected state change (rebuild projection)
เน Cross event refactoring

onsdag 16 oktober 13
Datomic schema evolution
โœ“ New or removed attributes
โœ“ New or removed entity types
โœ“ Move attributes between entities
เน Fact attributes rename not possible
เน Fact attribute type change not possible

onsdag 16 oktober 13
EventStore queries
โœ“ Projections use JavaScript
โœ“ Persistent
เน Require projection

onsdag 16 oktober 13
Datomic queries
โœ“ Declarative
โœ“ Logic-based
โœ“ Allows calling out to your own code
เน New language to learn

onsdag 16 oktober 13
When to use Event Sourcing?
Domains where events seem natural
Different teams with different models

onsdag 16 oktober 13
When to use Datomic?
Data can be modelled using entities and attributes
History is or may be interesting

onsdag 16 oktober 13
More details
http://www.jayway.com/author/jankronquist/
https://github.com/jankronquist
http://www.slideshare.net/jankronquist

onsdag 16 oktober 13
Questions?

onsdag 16 oktober 13

More Related Content

Viewers also liked

Concurrency
ConcurrencyConcurrency
Concurrency
Biju Nair
ย 
Column-Stores vs. Row-Stores: How Different are they Really?
Column-Stores vs. Row-Stores: How Different are they Really?Column-Stores vs. Row-Stores: How Different are they Really?
Column-Stores vs. Row-Stores: How Different are they Really?
Daniel Abadi
ย 
Introduction to column oriented databases
Introduction to column oriented databasesIntroduction to column oriented databases
Introduction to column oriented databases
ArangoDB Database
ย 
New microsoft office power point presentation
New microsoft office power point presentationNew microsoft office power point presentation
New microsoft office power point presentation
Zorigoo Bayar
ย 
Final logo designs
Final logo designsFinal logo designs
Final logo designs
lelicordell
ย 
24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ
24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ 24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ
24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ
george papadopoulos
ย 

Viewers also liked (20)

Intro to column stores
Intro to column storesIntro to column stores
Intro to column stores
ย 
How to write your database: the story about Event Store
How to write your database: the story about Event StoreHow to write your database: the story about Event Store
How to write your database: the story about Event Store
ย 
DDD Framework for Java: JdonFramework
DDD Framework for Java: JdonFrameworkDDD Framework for Java: JdonFramework
DDD Framework for Java: JdonFramework
ย 
Cassandra - An Introduction
Cassandra - An IntroductionCassandra - An Introduction
Cassandra - An Introduction
ย 
Analyze billions of records on Salesforce App Cloud with BigObject
Analyze billions of records on Salesforce App Cloud with BigObjectAnalyze billions of records on Salesforce App Cloud with BigObject
Analyze billions of records on Salesforce App Cloud with BigObject
ย 
Concurrency
ConcurrencyConcurrency
Concurrency
ย 
Flink Streaming
Flink StreamingFlink Streaming
Flink Streaming
ย 
CQRS and Event Sourcing with Akka, Cassandra and RabbitMQ
CQRS and Event Sourcing with Akka, Cassandra and RabbitMQCQRS and Event Sourcing with Akka, Cassandra and RabbitMQ
CQRS and Event Sourcing with Akka, Cassandra and RabbitMQ
ย 
Row or Columnar Database
Row or Columnar DatabaseRow or Columnar Database
Row or Columnar Database
ย 
Column-Stores vs. Row-Stores: How Different are they Really?
Column-Stores vs. Row-Stores: How Different are they Really?Column-Stores vs. Row-Stores: How Different are they Really?
Column-Stores vs. Row-Stores: How Different are they Really?
ย 
Building scalable rest service using Akka HTTP
Building scalable rest service using Akka HTTPBuilding scalable rest service using Akka HTTP
Building scalable rest service using Akka HTTP
ย 
Introduction to column oriented databases
Introduction to column oriented databasesIntroduction to column oriented databases
Introduction to column oriented databases
ย 
Introduction to Zabbix - Company, Product, Services and Use Cases
Introduction to Zabbix - Company, Product, Services and Use CasesIntroduction to Zabbix - Company, Product, Services and Use Cases
Introduction to Zabbix - Company, Product, Services and Use Cases
ย 
New microsoft office power point presentation
New microsoft office power point presentationNew microsoft office power point presentation
New microsoft office power point presentation
ย 
Portraits. Artist, Tang Wei Min
Portraits. Artist, Tang Wei MinPortraits. Artist, Tang Wei Min
Portraits. Artist, Tang Wei Min
ย 
Final logo designs
Final logo designsFinal logo designs
Final logo designs
ย 
The Little Baker
The Little BakerThe Little Baker
The Little Baker
ย 
At the Speed of Lightning
At the Speed of LightningAt the Speed of Lightning
At the Speed of Lightning
ย 
24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ
24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ 24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ
24 ฮตฮนฮบฮฟฮฝฮฟฮผฮฑฯ‡ฮฏฮฑ
ย 
Peter Mitchev's Art
Peter Mitchev's ArtPeter Mitchev's Art
Peter Mitchev's Art
ย 

Recently uploaded

Turbhe Female Escorts 09167354423 Turbhe Escorts,Call Girls In Turbhe
Turbhe Female Escorts 09167354423  Turbhe Escorts,Call Girls In TurbheTurbhe Female Escorts 09167354423  Turbhe Escorts,Call Girls In Turbhe
Turbhe Female Escorts 09167354423 Turbhe Escorts,Call Girls In Turbhe
Priya Reddy
ย 
Dubai Call girls Service 0524076003 Call girls in Dubai
Dubai Call girls Service 0524076003 Call girls in DubaiDubai Call girls Service 0524076003 Call girls in Dubai
Dubai Call girls Service 0524076003 Call girls in Dubai
Monica Sydney
ย 
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
call girls kolkata
ย 
Pakistani Call girls in Deira 0567006274 Deira Call girls
Pakistani Call girls in Deira 0567006274 Deira Call girlsPakistani Call girls in Deira 0567006274 Deira Call girls
Pakistani Call girls in Deira 0567006274 Deira Call girls
Monica Sydney
ย 
Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...
Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...
Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...
call girls kolkata
ย 
Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...
Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...
Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...
call girls kolkata
ย 
Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...
Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...
Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...
call girls kolkata
ย 
Dubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in DubaiDubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in Dubai
Monica Sydney
ย 
Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...
Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem  โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem  โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...
Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...
Call Girls Mumbai
ย 
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
DipikaDelhi
ย 

Recently uploaded (20)

Satara call girl 8617370543โ™ฅ๏ธ call girls in satara escort service
Satara call girl 8617370543โ™ฅ๏ธ call girls in satara escort serviceSatara call girl 8617370543โ™ฅ๏ธ call girls in satara escort service
Satara call girl 8617370543โ™ฅ๏ธ call girls in satara escort service
ย 
Turbhe Female Escorts 09167354423 Turbhe Escorts,Call Girls In Turbhe
Turbhe Female Escorts 09167354423  Turbhe Escorts,Call Girls In TurbheTurbhe Female Escorts 09167354423  Turbhe Escorts,Call Girls In Turbhe
Turbhe Female Escorts 09167354423 Turbhe Escorts,Call Girls In Turbhe
ย 
Bhubaneswar๐ŸŒนCall Girls Chandrashekharpur โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CAL...
Bhubaneswar๐ŸŒนCall Girls Chandrashekharpur โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CAL...Bhubaneswar๐ŸŒนCall Girls Chandrashekharpur โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CAL...
Bhubaneswar๐ŸŒนCall Girls Chandrashekharpur โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CAL...
ย 
Call Girls Moradabad Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Moradabad Just Call 8617370543 Top Class Call Girl Service AvailableCall Girls Moradabad Just Call 8617370543 Top Class Call Girl Service Available
Call Girls Moradabad Just Call 8617370543 Top Class Call Girl Service Available
ย 
Dubai Call girls Service 0524076003 Call girls in Dubai
Dubai Call girls Service 0524076003 Call girls in DubaiDubai Call girls Service 0524076003 Call girls in Dubai
Dubai Call girls Service 0524076003 Call girls in Dubai
ย 
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
Call Girls Kozhikode - 9332606886 Our call girls are sure to provide you with...
ย 
Hire ๐Ÿ’• 8617370543 Mirzapur Call Girls Service Call Girls Agency
Hire ๐Ÿ’• 8617370543 Mirzapur Call Girls Service Call Girls AgencyHire ๐Ÿ’• 8617370543 Mirzapur Call Girls Service Call Girls Agency
Hire ๐Ÿ’• 8617370543 Mirzapur Call Girls Service Call Girls Agency
ย 
Hire ๐Ÿ’• 8617370543 Dhalai Call Girls Service Call Girls Agency
Hire ๐Ÿ’• 8617370543 Dhalai Call Girls Service Call Girls AgencyHire ๐Ÿ’• 8617370543 Dhalai Call Girls Service Call Girls Agency
Hire ๐Ÿ’• 8617370543 Dhalai Call Girls Service Call Girls Agency
ย 
Pakistani Call girls in Deira 0567006274 Deira Call girls
Pakistani Call girls in Deira 0567006274 Deira Call girlsPakistani Call girls in Deira 0567006274 Deira Call girls
Pakistani Call girls in Deira 0567006274 Deira Call girls
ย 
Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...
Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...
Call Girls in Perumbavoor / 9332606886 Genuine Call girls with real Photos an...
ย 
Call Girls In Gandhinagar ๐Ÿ“ž 8617370543 At Low Cost Cash Payment Booking
Call Girls In Gandhinagar ๐Ÿ“ž 8617370543  At Low Cost Cash Payment BookingCall Girls In Gandhinagar ๐Ÿ“ž 8617370543  At Low Cost Cash Payment Booking
Call Girls In Gandhinagar ๐Ÿ“ž 8617370543 At Low Cost Cash Payment Booking
ย 
๐Ÿ“ž Contact Number 8617370543VIP Fatehgarh Call Girls
๐Ÿ“ž Contact Number 8617370543VIP Fatehgarh Call Girls๐Ÿ“ž Contact Number 8617370543VIP Fatehgarh Call Girls
๐Ÿ“ž Contact Number 8617370543VIP Fatehgarh Call Girls
ย 
Call girls Service in Deira 0507330913 Deira Call girls
Call girls Service in Deira 0507330913 Deira Call girlsCall girls Service in Deira 0507330913 Deira Call girls
Call girls Service in Deira 0507330913 Deira Call girls
ย 
Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...
Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...
Call Girls Rajnandgaon / 9332606886 Genuine Call girls with real Photos and N...
ย 
Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...
Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...
Call Girls in Kollam - 9332606886 Our call girls are sure to provide you with...
ย 
Dubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in DubaiDubai Call girls Service 0524076003 Call girls services in Dubai
Dubai Call girls Service 0524076003 Call girls services in Dubai
ย 
Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...
Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem  โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem  โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...
Bhubaneswar๐ŸŒนCall Girls Kalpana Mesuem โคKomal 9777949614 ๐Ÿ’Ÿ Full Trusted CALL ...
ย 
๐ŸŒนBhubaneswar๐ŸŒนRavi Tailkes โคCALL GIRL 9777949614 โคCALL GIRLS IN bhubaneswar E...
๐ŸŒนBhubaneswar๐ŸŒนRavi Tailkes  โคCALL GIRL 9777949614 โคCALL GIRLS IN bhubaneswar E...๐ŸŒนBhubaneswar๐ŸŒนRavi Tailkes  โคCALL GIRL 9777949614 โคCALL GIRLS IN bhubaneswar E...
๐ŸŒนBhubaneswar๐ŸŒนRavi Tailkes โคCALL GIRL 9777949614 โคCALL GIRLS IN bhubaneswar E...
ย 
Top IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdf
Top IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdfTop IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdf
Top IPTV Subscription Service to Stream Your Favorite Shows in 2024.pdf
ย 
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
Call girls Service Bellary - 9332606886 Rs 3000 Free Pickup & Drop Services 2...
ย 

Append only data stores