Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Event Store Launch
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
eventstore
September 17, 2012
Programming
1
380
Event Store Launch
eventstore
September 17, 2012
Tweet
Share
Other Decks in Programming
See All in Programming
Amazon Bedrockを活用したRAGの品質管理パイプライン構築
tosuri13
4
250
Kotlin Multiplatform Meetup - Compose Multiplatform 외부 의존성 아키텍처 설계부터 운영까지
wisemuji
0
190
Vibe codingでおすすめの言語と開発手法
uyuki234
0
220
0→1 フロントエンド開発 Tips🚀 #レバテックMeetup
bengo4com
0
540
Honoを使ったリモートMCPサーバでAIツールとの連携を加速させる!
tosuri13
1
170
AIエージェント、”どう作るか”で差は出るか? / AI Agents: Does the "How" Make a Difference?
rkaga
4
2k
AIによるイベントストーミング図からのコード生成 / AI-powered code generation from Event Storming diagrams
nrslib
2
1.8k
dchart: charts from deck markup
ajstarks
3
990
疑似コードによるプロンプト記述、どのくらい正確に実行される?
kokuyouwind
0
380
登壇資料を作る時に意識していること #登壇資料_findy
konifar
4
960
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
500
Architectural Extensions
denyspoltorak
0
270
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1k
Bioeconomy Workshop: Dr. Julius Ecuru, Opportunities for a Bioeconomy in West Africa
akademiya2063
PRO
1
54
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.3k
Raft: Consensus for Rubyists
vanstee
141
7.3k
JAMstack: Web Apps at Ludicrous Speed - All Things Open 2022
reverentgeek
1
320
Navigating Weather and Climate Data
rabernat
0
100
Scaling GitHub
holman
464
140k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
71k
SEO for Brand Visibility & Recognition
aleyda
0
4.2k
How to Ace a Technical Interview
jacobian
281
24k
Why You Should Never Use an ORM
jnunemaker
PRO
61
9.7k
Building Adaptive Systems
keathley
44
2.9k
Transcript
The Event Store 17th September 2012 Release! Skills Matter, London
Agenda • Demo • How to interact with the Event
Store • Internal architecture, decisions made • Something else… • Summary • Questions
DEMO TIME!
There are only 24 bytes of mutable data in the
Event Store
There are only 24 BYTES of mutable data in the
Event Store
Transaction File All data goes into a constantly appending file.
Transaction File Last Disk Flush
Transaction File Last Disk Flush Last Indexed
Transaction File The file is built up of many smaller
chunks of files.
Transaction File Chunk 1 Chunk 0
Transaction File Chunk 1 (1MB) Chunk 3 (1MB) Chunk 2
(1MB)
Scavenge 7 6 5 4 3 2 1 0 Index
has (1,2,7) deleted Scavenge 6 5 4 3 0 6 à 4 5 à 3 4 à 2 3 à 1 0 à 0
Transaction File Chunk 1 (1MB) Chunk 3 (1MB) Chunk 2
(1MB) Chunk 1a (1MB-) (items removed)
Transaction File Chunk 3 (1MB) Chunk 2 (1MB) Chunk 1a
(1MB-) (items removed)
TF Scavenge TF Chunks are immutable once written.
TF Scavenge Allows indexes and data storage to be scavenged
separately.
Indexes There is only one index in the Event Store.
Indexes Entries in index are 20 bytes each. (so 1
billion items is 20GB!)
Memtable 1 (up to 1M)
Memtable 1 (up to 1M) Ptable 1 (1M) Last Disk
Write
Memtable 1 (up to 1M) PTable 1 (1M) Last Disk
Write
PTable 01 (1M)
PTable 02 (1M) PTable 01 (1M)
PTable 03 (1M) PTable 02 (1M) PTable 01 (1M)
Merge
PTable 11 (4M)
PTable 11 (4M) PTable 01 (1M)
PTable 11 (4M) PTable 01 (1M) PTable 02 (1M)
PTable 03 (1M) PTable 11 (4M) PTable 01 (1M) PTable
02 (1M)
Merge
PTable 11 (4M) PTable 12 (4M)
PTable 11 (4M) PTable 01 (1M) PTable 12 (4M)
PTable 11 (4M) PTable 01 (1M) PTable 02 (1M) PTable
12 (4M)
PTable 03 (1M) PTable 11 (4M) PTable 01 (1M) PTable
02 (1M) PTable 12 (4M)
Indexes Indexes are immutable!
Indexes Reads have no locks!
No toasting of drives!
Simple When you look at what you have done and
think “Wow, it’s really simple” you have probably done something right.
Benchmarks! All benchmarks should be taken lightly for any system.
Usually they are biased!
Benchmarks! • Have indexed over 1B items with log(n) performance
Benchmarks! • Have indexed over 1B items with log(n) performance
• Writes! 15,000+/sec over TCP
Benchmarks! • Have indexed over 1B items with log(n) performance
• Writes! 15,000+/sec over TCP • Reads! 50,000+/sec over TCP
Pure async is good.
You can do a lot on one thread.
Immutability is good.
WAT?
There is an entire query language!
Projections Handle( Handle( Handle(state, Created), Deactivated), Closed)
Projections State, Event à State
Projections from_all().when( AccountCreated: function(state,event) { state.Name = event.CustomerName; state.Balance =
0; }, TransactionOccurred: function(state,event) { state.Balance += event.value; } );
Projections fromAll() fromStream(x,y,z) foreach(account)
Projection Indexes Link Link Link Link
Projection Indexes from_all().when_any( function(state, event) { emit(‘/streams/’ + event.Type, link_to(event));
} );
DEMO TIME!
Questions?
THANKS!
Coming 31st October
ONE YEAR FREE SUPPORT On all appliances ordered before 31st
October!
None