SlideShare una empresa de Scribd logo
1 de 119
Descargar para leer sin conexión
vs
Immutable data stores
onsdag 25 september 13
What?
onsdag 25 september 13
Immutable data stores
Only add, never remove or change
Can retrieve old values
onsdag 25 september 13
Source code
Version controlled
Keep all versions
onsdag 25 september 13
Example domain
onsdag 25 september 13
Rock - Paper - Scissors
onsdag 25 september 13
http://rock-paper-scissors.com/
The future Facebook of Rock Paper Scissors
Millions of users
Many games per user
onsdag 25 september 13
Playing the game
Player A
Player B
Server
onsdag 25 september 13
Playing the game
Player A
Player B
Server
Game 123
onsdag 25 september 13
Playing the game
Player A
Player B
Server
paper
Game 123
onsdag 25 september 13
Playing the game
Player A
Player B
Server
paper
Player B: paper
Game 123
onsdag 25 september 13
Playing the game
Player A
Player B
Server
rock
Player B: paper
Player A: rock
Game 123
onsdag 25 september 13
Playing the game
Player A
Player B
Server
Player B: paper
Player A: rock
Game 123
Game 123
winner: Player B
loser: Player A
onsdag 25 september 13
Playing the game
Player A
Player B
Server
Player B: paper
Player A: rock
Game 123
Game 123
winner: Player B
loser: Player A
CREATED WAITING
GAME WON
GAME TIED
any move
other move
(victory)
other move
(tie)
onsdag 25 september 13
Entities
onsdag 25 september 13
Entities
Player
+ id
+ name
+ email
onsdag 25 september 13
Entities
Game
+ id
+ state
+ players
+ moves
+ winner
+ loser
Player
+ id
+ name
+ email
onsdag 25 september 13
Entities
Game
+ id
+ state
+ players
+ moves
+ winner
+ loser
Move
+ move
+ player
Player
+ id
+ name
+ email
onsdag 25 september 13
Actions
Create game
Make move
Get game result
POST /games
POST /games/123
move=rock
GET /games/123
onsdag 25 september 13
Actions
Create game
Make move
Get game result
POST /games
POST /games/123
move=rock
GET /games/123
1. Form (make move)
2. Waiting
3. Game result
4. Error
onsdag 25 september 13
Event Sourcing
with
Event Store
onsdag 25 september 13
Event Sourcing
Events that have happened
Ordered in time
Source of truth
onsdag 25 september 13
http://geteventstore.com
Runs on .NET and Mono
Free (store) or Commercial (HA)
API
Custom TCP (c#)
ATOM over HTTP (xml/json)
Features
Event streams, projections, generate new events (CEP)
€1500/year
onsdag 25 september 13
Event example
Server EventStore
onsdag 25 september 13
Event example
Server
CreateGameCommand{:game 123 :creator "player-1"}
EventStore
onsdag 25 september 13
Event example
Server
CreateGameCommand{:game 123 :creator "player-1"}
GameCreatedEvent{:game 123 :creator "player-1"}
EventStore
onsdag 25 september 13
Event example
Server
MakeMoveCommand{:game 123 :player "player-1" :move "rock"}
GameCreatedEvent{:game 123 :creator "player-1"}
MoveMadeEvent{:game 123 :player "player-1" :move "rock"}
EventStore
onsdag 25 september 13
Event example
Server
MakeMoveCommand{:game 123 :player "player-2" :move "paper"}
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"}
EventStore
onsdag 25 september 13
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}
Current state?
onsdag 25 september 13
CREATED WAITING
GAME WON
GAME TIED
any move
if victory
other move
if tie
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}
Current state?
onsdag 25 september 13
CREATED WAITING
GAME WON
GAME TIED
any move
if victory
other move
if tie
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}
GameCreatedEvent
Current state?
CREATED
onsdag 25 september 13
CREATED WAITING
GAME WON
GAME TIED
any move
if victory
other move
if tie
GameCreatedEvent{:game 123, :creator "player-1", :time 1}
MoveMadeEvent{:game 123, :player "player-1", :move "rock", :time 2}
Current state?
WAITING
MoveMadeEvent
onsdag 25 september 13
Aggregates
Scope of consistency when handling a command
Game
+ id
+ state
+ players
+ moves
+ winner
+ loser
Move
+ id
+ move
+ player
Player
+ id
+ name
+ email
onsdag 25 september 13
Aggregates as Event Streams
event1 GameCreatedEvent{:game 1...}
event2 MoveMadeEvent{:game 1....}
stream = game-1
version = 2
onsdag 25 september 13
Aggregates as Event Streams
event1 GameCreatedEvent{:game 1...}
event2 MoveMadeEvent{:game 1....}
stream = game-1
version = 2
event1 GameCreatedEvent{:game 2...}
event2 MoveMadeEvent{:game 2....}
event3 MoveMadeEvent{:game 2....}
event4 GameWonEvent{:game 2....}
stream = game-2
version = 4
onsdag 25 september 13
Aggregates as Event Streams
event1 GameCreatedEvent{:game 1...}
event2 MoveMadeEvent{:game 1....}
stream = game-1
version = 2
event1 GameCreatedEvent{:game 2...}
event2 MoveMadeEvent{:game 2....}
event3 MoveMadeEvent{:game 2....}
event4 GameWonEvent{:game 2....}
stream = game-2
version = 4
curl "http://127.0.0.1:2113/streams/game-1"
-d @eventdata.json
-H "Content-Type:application/json"
-H "ES-ExpectedVersion: 2"
onsdag 25 september 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}
onsdag 25 september 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 25 september 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}
onsdag 25 september 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}
created = 2
onsdag 25 september 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...}
onsdag 25 september 13
Projections
GameCreatedEvent{:game 1...}
MoveMadeEvent{:game 1....}
GameCreatedEvent{:game 2...}
MoveMadeEvent{:game 2....}
MoveMadeEvent{:game 2....}
GameWonEvent{:game 2....}
(state, event) -> {
if (event instanceof GameCreatedEvent) {
return state++;
}
rerturn state;
}
created = 2
GameCreatedEvent{:game 3...}
onsdag 25 september 13
Projections in Javascript
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},
});
onsdag 25 september 13
Projections in Javascript
fromAll()
.when({
$init: function () {
return { created: 0, completed:0 };
},
});
GameCreatedEvent: function(s, e) {
s.created++;
return s;
},
onsdag 25 september 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 25 september 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 25 september 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;
}
/projections/games-counter
{
created: 15,
completed: 10
}
onsdag 25 september 13
External Projections
events
Business logic
onsdag 25 september 13
External Projections
events events
Business logic Projections
onsdag 25 september 13
External Projections
Consistent
Available
events events
Business logic Projections
onsdag 25 september 13
External Projections
Commands Queries
Consistent
Available
events events
onsdag 25 september 13
System with EventStore
onsdag 25 september 13
System with EventStore
Command
Handler
onsdag 25 september 13
System with EventStore
1.command Command
Handler
onsdag 25 september 13
System with EventStore
1.command Event
Store
Command
Handler
2.get events
onsdag 25 september 13
System with EventStore
1.command Event
Store
Command
Handler
2.get events
3.add events
onsdag 25 september 13
System with EventStore
1.command Event
Store
Command
Handler
2.get events
3.add events
4.update
projections
onsdag 25 september 13
System with EventStore
1.command Event
Store
Command
Handler
2.get events
3.add events
4.update
projections
5.get events
or projections
Some
service
onsdag 25 september 13
System with EventStore
1.command Event
Store
Command
Handler
2.get events
6.update state
3.add events
4.update
projections
5.get events
or projections
Some
service
onsdag 25 september 13
System with EventStore
1.command Event
Store
Command
Handler
2.get events
6.update state
3.add events
4.update
projections
7.query
5.get events
or projections
Some
service
onsdag 25 september 13
Datomic
onsdag 25 september 13
http://www.datomic.com/
Runs on JVM
Free (3 peers, local storage) or Commercial (HA, distrib)
Features
ACID transactions, declarative query engine
€2300
onsdag 25 september 13
Fact
Something known to have happened or existed
onsdag 25 september 13
Fact
Something known to have happened or existed
2004-10-01 the email of Jan was ”jan.kronquist@jayway.se”
onsdag 25 september 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 25 september 13
Atomic fact (datom)
Entity
Attribute
Value
Time
onsdag 25 september 13
Atomic fact (datom)
Entity
Attribute
Value
Time
The person Jan Kronquist
email
”jan.kronquist@jayway.se”
2004-10-01
onsdag 25 september 13
Data perception
Facts
Add facts
Add more facts
Even more facts
time
onsdag 25 september 13
Data perception
Facts
Add facts
Add more facts
Even more facts
time
onsdag 25 september 13
Data perception
Facts
Add facts
Add more facts
Even more facts
time
query
onsdag 25 september 13
Data perception
Facts
Add facts
Add more facts
Even more facts
time
query
query
onsdag 25 september 13
Data perception
Facts
Add facts
Add more facts
Even more facts
time
query
onsdag 25 september 13
Data perception
Facts
Add facts
Add more facts
Even more facts
time
query
onsdag 25 september 13
Data perception
Facts
Add facts
Add more facts
Even more facts
time
query
onsdag 25 september 13
Database deconstructed
onsdag 25 september 13
Database deconstructed
Transactor
Consistency by serializing transactions
onsdag 25 september 13
Database deconstructed
Transactor
Consistency by serializing transactions
Peer
Your code + Query engine
onsdag 25 september 13
Database deconstructed
Transactor
Consistency by serializing transactions
Peer
Your code + Query engine
Storage service
Key/value store
Scalable reads and writes
eg DynamoDB, InfiniSpan, Riak + ZooKeeper, SQL(!)
onsdag 25 september 13
System with Datomic
Transactor
Distributed Storage Service
Peer APeer A
onsdag 25 september 13
System with Datomic
Transactor
Distributed Storage Service
Peer APeer A
1.command
onsdag 25 september 13
System with Datomic
Transactor
Distributed Storage Service
Peer APeer A
2.read and cache
1.command
onsdag 25 september 13
System with Datomic
Transactor
Distributed Storage Service
Peer A
3.transact
Peer A
2.read and cache
1.command
onsdag 25 september 13
System with Datomic
Transactor
Distributed Storage Service
Peer A
3.transact
Peer A
4.write
2.read and cache
1.command
onsdag 25 september 13
System with Datomic
Transactor
Distributed Storage Service
Peer A
3.transact
Peer A
4.write
2.read and cache
Peer B
5.notify
1.command
onsdag 25 september 13
Datomic example
Peer Transactor
onsdag 25 september 13
Datomic example
Peer
CreateGameCommand{:game 123 :creator "player-1"}
Transactor
onsdag 25 september 13
Datomic example
Peer
CreateGameCommand{:game 123 :creator "player-1"}
[123 :creator "player-1" T1]
[123 :state :created T1]
Transactor
onsdag 25 september 13
Datomic example
Peer
CreateGameCommand{:game 123 :creator "player-1"}
[123 :creator "player-1" T1]
[123 :state :created T1]
Transactor
["player-1" :email "player@gmail.com" T0]
onsdag 25 september 13
Datomic example
Peer
CreateGameCommand{:game 123 :creator "player-1"}
[123 :creator "player-1" T1]
[123 :state :created T1]
Transactor
onsdag 25 september 13
Datomic example
Peer
CreateGameCommand{:game 123 :creator "player-1"}
[123 :creator "player-1" T1]
[123 :state :created T1]
Transactor
GameCreatedEvent{:game 123 :creator "player-1"}
onsdag 25 september 13
Datomic example
Peer
CreateGameCommand{:game 123 :creator "player-1"}
[123 :creator "player-1" T1]
[123 :state :created T1]
Transactor
onsdag 25 september 13
Datomic example
Peer
MakeMoveCommand{:game 123 :player "player-1" :move :rock}
[123 :creator "player-1" T1]
[123 :state :created T1]
[123_1 :move :rock T2]
[123_1 :player "player-1" T2]
[123 :moves 123_1 T2]
[123 :state :waiting T2]
Transactor
onsdag 25 september 13
Datomic example
Peer
MakeMoveCommand{:game 123 :player "player-2" :move :paper}
[123 :creator "player-1" T1]
[123 :state :created T1]
[123_1 :move :rock T2]
[123_1 :player "player-1" T2]
[123 :moves 123_1 T2]
[123 :state :waiting T2]
[123_2 :move :paper T3]
[123_2 :player "player-2" T3]
[123 :moves 123_2 T3]
[123 :state :won T3]
[123 :winner "player-2" T3]
[123 :loser "player-1" T3]
Transactor
onsdag 25 september 13
Aggregates?
Only by convention
cas (compare and set)
isComponent on relation
Game
+ id
+ state
+ players
+ moves
+ winner
+ loser
Move
+ id
+ move
+ player
onsdag 25 september 13
What to find
Where clauses [entity attribute value]
Implicit joins
Call arbitrary function
Query language
onsdag 25 september 13
Query example - basic
[:find ?email
:where
[_ :email ?email]]
onsdag 25 september 13
Query example - basic
[:find ?email
:where
[_ :email ?email]]
[["jan.kronquist@jayway.com]
["player-1@gmail.com"]
["player-2@gmail.com"]]
onsdag 25 september 13
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]
onsdag 25 september 13
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]
[[:created 4]
[:waiting 1]
[:won 7]
[:tied 3]]
onsdag 25 september 13
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]
[[:created 4]
[:waiting 1]
[:won 7]
[:tied 3]]
inProgess = created + waiting
onsdag 25 september 13
Query example - aggregation
[:find ?state (?count game)
:where
[?game :state ?state]]
[[:created 4]
[:waiting 1]
[:won 7]
[:tied 3]]
inProgess = created + waiting
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;
}
});
/projections/games-counter
{
created: 15,
completed: 10
}
onsdag 25 september 13
Query example - join
[:find ?email (count ?game)
:where
[?player :email ?email]
[?game :winner ?player]]
onsdag 25 september 13
Query at any time
(q ’[:find ?email
:where
[_ :email ?email]]
db)
onsdag 25 september 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 25 september 13
Query over time
(q ’[:find ?e (count ?tx)
:where
[?e :email _ ?tx]]
db)
onsdag 25 september 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 25 september 13
Java API
List<Object> results =
Peer.q(someQuery, conn.db());
Future<Map> txResult = conn.transact(data_tx);
onsdag 25 september 13
Comparison
onsdag 25 september 13
Comparison
Data model
Schema evolution
Queries
Recommendation
onsdag 25 september 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 25 september 13
Datomic Facts
✓ Support partial information
✓ Normalization support
✓ CRUD out of the box
๏ Static schema
onsdag 25 september 13
✓ New events
✓ New event attributes
✓ Event attributes rename (change deserialization)
✓ Projected state change (rebuild projection)
๏ Cross event refactoring
EventStore schema evolution
onsdag 25 september 13
✓ New or removed attributes
✓ New or removed entity types
✓ Move attributes between entities
๏ Fact attributes rename not possible
๏ Fact attribute type change not possible
Datomic schema evolution
onsdag 25 september 13
✓ Projections use JavaScript
✓ Persistent
๏ Require projection
EventStore queries
onsdag 25 september 13
✓ Declarative
✓ Logic-based
✓ Allows calling out to your own code
๏ New language to learn
Datomic queries
onsdag 25 september 13
When to use Event Sourcing?
Domains where events seem natural
Different teams with different models
onsdag 25 september 13
When to use Datomic?
Data can be modelled using entities and attributes
History is or may be interesting
onsdag 25 september 13
More details
http://www.jayway.com/author/jankronquist/
https://github.com/jankronquist
onsdag 25 september 13
Questions?
onsdag 25 september 13

Más contenido relacionado

Destacado (20)

The Unanticipated Benefits of Content Curation
The Unanticipated Benefits of Content CurationThe Unanticipated Benefits of Content Curation
The Unanticipated Benefits of Content Curation
 
Google Analytics
Google AnalyticsGoogle Analytics
Google Analytics
 
Manchester city
Manchester cityManchester city
Manchester city
 
Datomic
DatomicDatomic
Datomic
 
Jim rohn
Jim  rohnJim  rohn
Jim rohn
 
Datomic
DatomicDatomic
Datomic
 
Datomic
DatomicDatomic
Datomic
 
Backbone.js
Backbone.jsBackbone.js
Backbone.js
 
Tesco
TescoTesco
Tesco
 
Management Consulting
Management ConsultingManagement Consulting
Management Consulting
 
French Property Market 2014
French Property Market 2014French Property Market 2014
French Property Market 2014
 
intel core i7
intel core i7intel core i7
intel core i7
 
Clojure
ClojureClojure
Clojure
 
Medical devices
Medical devicesMedical devices
Medical devices
 
French Property market 2015 - Cushman & Wakefield
French Property market 2015 - Cushman & WakefieldFrench Property market 2015 - Cushman & Wakefield
French Property market 2015 - Cushman & Wakefield
 
Cerebral Palsy
Cerebral PalsyCerebral Palsy
Cerebral Palsy
 
Bill Gates, Who is he?
Bill Gates, Who is he?Bill Gates, Who is he?
Bill Gates, Who is he?
 
Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014
Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014
Simo Ahava - Tag Management Solutions – Best. Data. Ever. MKTFEST 2014
 
In memory computing
In memory computingIn memory computing
In memory computing
 
Reverse Engineering
Reverse EngineeringReverse Engineering
Reverse Engineering
 

Último

SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek SchlawackFwdays
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Mark Simos
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embeddingZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024Lorenzo Miniero
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfRankYa
 

Último (20)

DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
"Subclassing and Composition – A Pythonic Tour of Trade-Offs", Hynek Schlawack
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
Tampa BSides - Chef's Tour of Microsoft Security Adoption Framework (SAF)
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Training state-of-the-art general text embedding
Training state-of-the-art general text embeddingTraining state-of-the-art general text embedding
Training state-of-the-art general text embedding
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024SIP trunking in Janus @ Kamailio World 2024
SIP trunking in Janus @ Kamailio World 2024
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Search Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdfSearch Engine Optimization SEO PDF for 2024.pdf
Search Engine Optimization SEO PDF for 2024.pdf
 

JavaZone 2013 - Datomic vs EventStore