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
Unicodeどうしてる? PHPから見たUnicode対応と他言語での対応についてのお伺い
youkidearitai
PRO
0
920
React 19でつくる「気持ちいいUI」- 楽観的UIのすすめ
himorishige
11
5.6k
フルサイクルエンジニアリングをAI Agentで全自動化したい 〜構想と現在地〜
kamina_zzz
0
370
Findy AI+の開発、運用におけるMCP活用事例
starfish719
0
2.3k
gunshi
kazupon
1
140
フロントエンド開発の勘所 -複数事業を経験して見えた判断軸の違い-
heimusu
7
2.6k
The Past, Present, and Future of Enterprise Java
ivargrimstad
0
120
Basic Architectures
denyspoltorak
0
520
Vibe codingでおすすめの言語と開発手法
uyuki234
0
190
dchart: charts from deck markup
ajstarks
3
970
AI 駆動開発ライフサイクル(AI-DLC):ソフトウェアエンジニアリングの再構築 / AI-DLC Introduction
kanamasa
11
5.7k
Fluid Templating in TYPO3 14
s2b
0
110
Featured
See All Featured
Evolving SEO for Evolving Search Engines
ryanjones
0
100
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
1.8k
Music & Morning Musume
bryan
47
7k
Mobile First: as difficult as doing things right
swwweet
225
10k
Everyday Curiosity
cassininazir
0
120
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
200
Git: the NoSQL Database
bkeepers
PRO
432
66k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.6k
Thoughts on Productivity
jonyablonski
74
5k
Designing for Timeless Needs
cassininazir
0
120
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
890
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
230
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