SlideShare a Scribd company logo
IMDB Showdown
@robertfriberg
robert@devrexlabs.com
origodb.com
Speed of light vs spinning metal
What Time Scale
L1 Cache 0.5 ns 0.008 2 m
L2 Cache 7 ns 0.23
RAM 60 ns 1 240 m 1 second
1K over Gbit network 10 µs 167 2.5 minutes
4K read SSD 150 µs 2500
Rotating disk seek 10 ms 167000 40000 km 46 hours
Price/GB vs GB/Server 1980- 2015
8 USD
6.480.000 USD
0.001 GB
2000 GB
In-memory stores
• VoltDB
• MemSQL
• Hazelcast
• Aerospike
• Memcached
• Oracle Coherence
• Redis
• Oracle Times Ten
• SQL Server
In-memory OLTP
• SAP Hana
• OrigoDB
Key/value
New SQL Hybrid
?
1. SQL Server
In-memory OLTP
B-trees and Transactions
LOG
DATA 64KB blocks w 8x8KB pages
Logical BTREE of 8kb data pages
In the buffer pool (cache)
Buffer
Manager
Transactions append inserted, deleted, original and modified pages to the LOG
CHECKPOINT
SQL Server In-memory OLTP
SP
Logging
Latches
Locks
Buffer Manager I/O
Native compiled SPs
Minimal Logging and
checkpointing
Lock-free data structures
Multi-version Currency
control
In Memory and Memory
optimized data structures
Sql Server In-memory OLTP
• Heka = Greek for 100
• Transparent for application
• Integrates with Sql Server but with limitations
• Enterprise license
• 5-30x performance gain
Demo!
2. Redis
REmote DIctionary Server
• Hybrid Key/Value store
• Value -> String | List | Set | Hash | SortedSet
• Predefined Commands -> SET | GET | HSET | ...
• Persistence: Snapshots + AOF
• Highly optimized C, fast algorithms
Twitter using redis
INCR next_user_id //returns 1000
HMSET user:1000 name bart password ¤¤¤hash¤¤¤
HSET users bart 1000
ZADD followers:1000 1401267618 1234
ZADD following:1234 1401267618 1000
INCR next_post_id => 10343
HMSET post:10343 user 1000 time $time body ’Ay Caramba’
RPUSH posts:1000 10343
3. OrigoDB
Build faster systems faster
What’s the problem?
Service
Layer
Domain
Layer
Data Access
Layer
Relational
Model
Views/SP’s
Cache
One simple idea...
Keep state in memory
Persist operations, not system state
s0 s1 s2
op1 op2
Sn = apply(opn, Sn-1)
... with many names
• System prevalance – Prevalyer, java
• MongoDB op log
• Redis AOF
• Memory Image – Martin Fowler
• VoltDB – logical logging
• Akka persistence – logging per actor
• Event Sourcing
OrigoDB
Kernel
Engine
Model
Storage
App Code
Server
Command
Query
File
Sql
Event Store
Custom
Consistency
Isolation
concurrency
Sends commands and queries
Journaling
Snapshots
BinaryFormatter
ProtoBuf
JSON
tcp
JSON/http
In-process
calls
Domain specific
object-graph
Domain specific operations
Replication
Ad-hoc queries
Web ui
Console or win svc
Complete history of events
• Point in time
• Debugging
• Restore
• Queries
• Audit trail
• New interpretations
Example – the model
[Serializable]
public class CommerceModel : Model
{
internal SortedDictionary<Guid, Customer> Customers { get; set; }
internal SortedDictionary<Guid, Order> Orders { get; set; }
internal SortedDictionary<Guid, Product> Products { get; set; }
public CommerceModel()
{
Customers = new SortedDictionary<Guid, Customer>();
Orders = new SortedDictionary<Guid, Order>();
Products = new SortedDictionary<Guid, Product>();
}
}
Command
[Serializable]
public class AddCustomer : Command<CommerceModel>
{
public readonly Guid Id;
public readonly string Name;
public AddCustomer(Guid id, String name)
{
Id = id;
Name = name;
}
public override void Execute(CommerceModel model)
{
if (model.Customers.ContainsKey(Id)) Abort("Duplicate customer id");
var customer = new Customer {Id = Id, Name = Name};
model.Customers.Add(Id, customer);
}
}
Query
[Serializable]
public class CustomerById : Query<CommerceModel, CustomerView>
{
public readonly Guid Id;
public CustomerById(Guid id)
{
Id = id;
}
public override CustomerView Execute(CommerceModel model)
{
if (!model.Customers.ContainsKey(Id)) throw new Exception("no such customer");
return new CustomerView(model.Customers[Id]);
}
}
Start your engines!
static void Main(string[] args)
{
var engine = Engine.For<CommerceModel>();
Guid id = Guid.NewGuid();
var customerCommand = new AddCustomer(id, "Homer");
engine.Execute(customerCommand);
var customerView = engine.Execute(new CustomerById(id));
Console.WriteLine(customerView.Name);
Console.WriteLine("{0} orders", customerView.OrderIds.Count);
Console.ReadLine();
}
Demo!
Geekstream
4. Conclusion
The old, the new and the ugly
100% ACID Out of the Box?
SQL Server Redis OrigoDB
Atomicity NO NO YES
Consistency NO NO YES
Isolation NO YES YES
Durability YES YES YES
Comparison Matrix
SQL REDIS ORIGO
License/Cost $$ OSS/Free MIT/Free (+$)
Language TSQL Commands + Lua C#/LINQ
OLTP YES YES YES
OLAP (indexing) YES NO YES
In-process NO NO YES
Througput/latency 3 1 2
Modeling Relational Fixed Multi
Maturity 1 2 3
Size 250GB/DB Available RAM Available RAM
Thank you!
• Try Origo!
• Contribute, it’s open source
• http://origodb.com
• @robertfriberg, robert@devrexlabs.com

More Related Content

KEY
Speeding Couch
PDF
MongoDB Evenings Boston - An Update on MongoDB's WiredTiger Storage Engine
PDF
Zero to 1 Billion+ Records: A True Story of Learning & Scaling GameChanger
PPTX
Lessons Learned Migrating 2+ Billion Documents at Craigslist
PDF
Introduction to new high performance storage engines in mongodb 3.0
PPTX
Concurrency Control in MongoDB 3.0
DOCX
Oracle golden gate training course
PPTX
Webinar 2017. Supercharge your analytics with ClickHouse. Alexander Zaitsev
Speeding Couch
MongoDB Evenings Boston - An Update on MongoDB's WiredTiger Storage Engine
Zero to 1 Billion+ Records: A True Story of Learning & Scaling GameChanger
Lessons Learned Migrating 2+ Billion Documents at Craigslist
Introduction to new high performance storage engines in mongodb 3.0
Concurrency Control in MongoDB 3.0
Oracle golden gate training course
Webinar 2017. Supercharge your analytics with ClickHouse. Alexander Zaitsev

What's hot (20)

KEY
Sphinx at Craigslist in 2012
ODP
MySQL And Search At Craigslist
PDF
Presto Meetup (2015-03-19)
KEY
Living with SQL and NoSQL at craigslist, a Pragmatic Approach
PDF
Engineering an Encrypted Storage Engine
PPTX
Azure DocumentDB 101
PDF
Realtime Search Infrastructure at Craigslist (OpenWest 2014)
PPTX
Fusion-io and MySQL at Craigslist
PDF
Потоковая фильтрация событий
PPTX
Share point 2013 on azure
PPTX
TPC-H in MongoDB
PPTX
Inside sql server in memory oltp sql sat nyc 2017
PDF
Building Codealike: a journey into the developers analytics world
PPTX
Benchmarking Redis by itself and versus other NoSQL databases
PPTX
The ELK Stack - Get to Know Logs
PPTX
Windows Server 2012 Developer Preview Active Directory Backup Restore
PDF
ELK Wrestling (Leeds DevOps)
PDF
Gr8Conf 2016 - What's new in Grails 3
PPTX
RavenDB Presentation
KEY
KeyValue Stores
Sphinx at Craigslist in 2012
MySQL And Search At Craigslist
Presto Meetup (2015-03-19)
Living with SQL and NoSQL at craigslist, a Pragmatic Approach
Engineering an Encrypted Storage Engine
Azure DocumentDB 101
Realtime Search Infrastructure at Craigslist (OpenWest 2014)
Fusion-io and MySQL at Craigslist
Потоковая фильтрация событий
Share point 2013 on azure
TPC-H in MongoDB
Inside sql server in memory oltp sql sat nyc 2017
Building Codealike: a journey into the developers analytics world
Benchmarking Redis by itself and versus other NoSQL databases
The ELK Stack - Get to Know Logs
Windows Server 2012 Developer Preview Active Directory Backup Restore
ELK Wrestling (Leeds DevOps)
Gr8Conf 2016 - What's new in Grails 3
RavenDB Presentation
KeyValue Stores
Ad

Similar to IMDB Showdown - OrigoDB, Redis and Hekaton (20)

PPTX
OrigoDB - Your data fits in RAM
PPTX
In-memory Databases
PPTX
OrigoDB - take the red pill
PPTX
Freeing Yourself from an RDBMS Architecture
PPTX
Big Data and the growing relevance of NoSQL
PDF
Developing polyglot persistence applications (SpringOne China 2012)
PPSX
Big Data Redis Mongodb Dynamodb Sharding
PPT
SQL or NoSQL, that is the question!
PPTX
Introduction to NoSql
PDF
Developing polyglot persistence applications #javaone 2012
PDF
OrientDB: Unlock the Value of Document Data Relationships
PPT
Document Databases & RavenDB
PDF
Your Database is Trying to Kill You
PPTX
Being RDBMS Free -- Alternate Approaches to Data Persistence
PDF
Domain-Driven Data at the O'Reilly Software Architecture Conference
PDF
The NoSQL Ecosystem
PDF
HPTS 2011: The NoSQL Ecosystem
PPTX
Netflix viewing data architecture evolution - EBJUG Nov 2014
PPTX
NoSQL Introduction, Theory, Implementations
PDF
Using Spring with NoSQL databases (SpringOne China 2012)
OrigoDB - Your data fits in RAM
In-memory Databases
OrigoDB - take the red pill
Freeing Yourself from an RDBMS Architecture
Big Data and the growing relevance of NoSQL
Developing polyglot persistence applications (SpringOne China 2012)
Big Data Redis Mongodb Dynamodb Sharding
SQL or NoSQL, that is the question!
Introduction to NoSql
Developing polyglot persistence applications #javaone 2012
OrientDB: Unlock the Value of Document Data Relationships
Document Databases & RavenDB
Your Database is Trying to Kill You
Being RDBMS Free -- Alternate Approaches to Data Persistence
Domain-Driven Data at the O'Reilly Software Architecture Conference
The NoSQL Ecosystem
HPTS 2011: The NoSQL Ecosystem
Netflix viewing data architecture evolution - EBJUG Nov 2014
NoSQL Introduction, Theory, Implementations
Using Spring with NoSQL databases (SpringOne China 2012)
Ad

Recently uploaded (20)

PPTX
CHAPTER 2 - PM Management and IT Context
PDF
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
PPTX
history of c programming in notes for students .pptx
PDF
Navsoft: AI-Powered Business Solutions & Custom Software Development
PDF
Which alternative to Crystal Reports is best for small or large businesses.pdf
PDF
Designing Intelligence for the Shop Floor.pdf
PPTX
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
PPTX
Why Generative AI is the Future of Content, Code & Creativity?
PDF
wealthsignaloriginal-com-DS-text-... (1).pdf
PPTX
Computer Software and OS of computer science of grade 11.pptx
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 41
PPTX
assetexplorer- product-overview - presentation
PDF
Softaken Excel to vCard Converter Software.pdf
PPTX
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
PDF
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PDF
Design an Analysis of Algorithms II-SECS-1021-03
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PPTX
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
PDF
Digital Systems & Binary Numbers (comprehensive )
CHAPTER 2 - PM Management and IT Context
Why TechBuilder is the Future of Pickup and Delivery App Development (1).pdf
history of c programming in notes for students .pptx
Navsoft: AI-Powered Business Solutions & Custom Software Development
Which alternative to Crystal Reports is best for small or large businesses.pdf
Designing Intelligence for the Shop Floor.pdf
Embracing Complexity in Serverless! GOTO Serverless Bengaluru
Why Generative AI is the Future of Content, Code & Creativity?
wealthsignaloriginal-com-DS-text-... (1).pdf
Computer Software and OS of computer science of grade 11.pptx
Internet Downloader Manager (IDM) Crack 6.42 Build 41
assetexplorer- product-overview - presentation
Softaken Excel to vCard Converter Software.pdf
Agentic AI Use Case- Contract Lifecycle Management (CLM).pptx
Adobe Premiere Pro 2025 (v24.5.0.057) Crack free
Upgrade and Innovation Strategies for SAP ERP Customers
Design an Analysis of Algorithms II-SECS-1021-03
Design an Analysis of Algorithms I-SECS-1021-03
Log360_SIEM_Solutions Overview PPT_Feb 2020.pptx
Digital Systems & Binary Numbers (comprehensive )

IMDB Showdown - OrigoDB, Redis and Hekaton

  • 2. Speed of light vs spinning metal What Time Scale L1 Cache 0.5 ns 0.008 2 m L2 Cache 7 ns 0.23 RAM 60 ns 1 240 m 1 second 1K over Gbit network 10 µs 167 2.5 minutes 4K read SSD 150 µs 2500 Rotating disk seek 10 ms 167000 40000 km 46 hours
  • 3. Price/GB vs GB/Server 1980- 2015 8 USD 6.480.000 USD 0.001 GB 2000 GB
  • 4. In-memory stores • VoltDB • MemSQL • Hazelcast • Aerospike • Memcached • Oracle Coherence • Redis • Oracle Times Ten • SQL Server In-memory OLTP • SAP Hana • OrigoDB Key/value New SQL Hybrid ?
  • 6. B-trees and Transactions LOG DATA 64KB blocks w 8x8KB pages Logical BTREE of 8kb data pages In the buffer pool (cache) Buffer Manager Transactions append inserted, deleted, original and modified pages to the LOG CHECKPOINT
  • 7. SQL Server In-memory OLTP SP Logging Latches Locks Buffer Manager I/O Native compiled SPs Minimal Logging and checkpointing Lock-free data structures Multi-version Currency control In Memory and Memory optimized data structures
  • 8. Sql Server In-memory OLTP • Heka = Greek for 100 • Transparent for application • Integrates with Sql Server but with limitations • Enterprise license • 5-30x performance gain
  • 11. • Hybrid Key/Value store • Value -> String | List | Set | Hash | SortedSet • Predefined Commands -> SET | GET | HSET | ... • Persistence: Snapshots + AOF • Highly optimized C, fast algorithms
  • 12. Twitter using redis INCR next_user_id //returns 1000 HMSET user:1000 name bart password ¤¤¤hash¤¤¤ HSET users bart 1000 ZADD followers:1000 1401267618 1234 ZADD following:1234 1401267618 1000 INCR next_post_id => 10343 HMSET post:10343 user 1000 time $time body ’Ay Caramba’ RPUSH posts:1000 10343
  • 13. 3. OrigoDB Build faster systems faster
  • 14. What’s the problem? Service Layer Domain Layer Data Access Layer Relational Model Views/SP’s Cache
  • 15. One simple idea... Keep state in memory Persist operations, not system state s0 s1 s2 op1 op2 Sn = apply(opn, Sn-1)
  • 16. ... with many names • System prevalance – Prevalyer, java • MongoDB op log • Redis AOF • Memory Image – Martin Fowler • VoltDB – logical logging • Akka persistence – logging per actor • Event Sourcing
  • 17. OrigoDB Kernel Engine Model Storage App Code Server Command Query File Sql Event Store Custom Consistency Isolation concurrency Sends commands and queries Journaling Snapshots BinaryFormatter ProtoBuf JSON tcp JSON/http In-process calls Domain specific object-graph Domain specific operations Replication Ad-hoc queries Web ui Console or win svc
  • 18. Complete history of events • Point in time • Debugging • Restore • Queries • Audit trail • New interpretations
  • 19. Example – the model [Serializable] public class CommerceModel : Model { internal SortedDictionary<Guid, Customer> Customers { get; set; } internal SortedDictionary<Guid, Order> Orders { get; set; } internal SortedDictionary<Guid, Product> Products { get; set; } public CommerceModel() { Customers = new SortedDictionary<Guid, Customer>(); Orders = new SortedDictionary<Guid, Order>(); Products = new SortedDictionary<Guid, Product>(); } }
  • 20. Command [Serializable] public class AddCustomer : Command<CommerceModel> { public readonly Guid Id; public readonly string Name; public AddCustomer(Guid id, String name) { Id = id; Name = name; } public override void Execute(CommerceModel model) { if (model.Customers.ContainsKey(Id)) Abort("Duplicate customer id"); var customer = new Customer {Id = Id, Name = Name}; model.Customers.Add(Id, customer); } }
  • 21. Query [Serializable] public class CustomerById : Query<CommerceModel, CustomerView> { public readonly Guid Id; public CustomerById(Guid id) { Id = id; } public override CustomerView Execute(CommerceModel model) { if (!model.Customers.ContainsKey(Id)) throw new Exception("no such customer"); return new CustomerView(model.Customers[Id]); } }
  • 22. Start your engines! static void Main(string[] args) { var engine = Engine.For<CommerceModel>(); Guid id = Guid.NewGuid(); var customerCommand = new AddCustomer(id, "Homer"); engine.Execute(customerCommand); var customerView = engine.Execute(new CustomerById(id)); Console.WriteLine(customerView.Name); Console.WriteLine("{0} orders", customerView.OrderIds.Count); Console.ReadLine(); }
  • 24. 4. Conclusion The old, the new and the ugly
  • 25. 100% ACID Out of the Box? SQL Server Redis OrigoDB Atomicity NO NO YES Consistency NO NO YES Isolation NO YES YES Durability YES YES YES
  • 26. Comparison Matrix SQL REDIS ORIGO License/Cost $$ OSS/Free MIT/Free (+$) Language TSQL Commands + Lua C#/LINQ OLTP YES YES YES OLAP (indexing) YES NO YES In-process NO NO YES Througput/latency 3 1 2 Modeling Relational Fixed Multi Maturity 1 2 3 Size 250GB/DB Available RAM Available RAM
  • 27. Thank you! • Try Origo! • Contribute, it’s open source • http://origodb.com • @robertfriberg, robert@devrexlabs.com

Editor's Notes

  • #2: Hi I’m Robert from Devrex Labs. We’re a small startup based in Sweden building OrigoDB, an in-memory database for .NET. Goals: Compare architecture, give a feel, not hands on use, you can figure that out.
  • #3: Why is memory so much faster? 200 meters to the convenience store down the block and back is 400 meters. 40000 km = circumference of the earth To give you some perspective... So why isn’t in-memory the default? Next slide...
  • #4: 99% of all OLTP databases are < 1TB – Michael Stonebraker https://aws.amazon.com/ec2/instance-types/ R3.8xlarge 32 cores, 244 GB Azure 112GB
  • #5: Lot’s of buzz and claims. NEW SQL Analytics, Transactions, Both or None What is a database? Key/value store? Transactions? Queries? OLAP vs. OLTP SAP HANA Column Store
  • #6: Let’s start with SQL Server.. RDBMS architecture conceived 70’s, implemented 80’s How do we organize data on disk to get acceptable performance for general workloads? Architected for disk access. Let’s look at how it works
  • #7: Logical structure of data pages. B-TREE, 8kb block, buffer pool Varje tabell är en B-TREE (om den inte är en HEAP), varje index är en b-tree Effect logging – log the effect of the transaction = modified pages, new pages Support rollback by including deleted pages and original version of modified page.
  • #8: Memory optimized structures – no b-trees with 8kb blocks. Linked lists of data rows Locking – rows, pages, extents. Read/write locks for data in transactions. Latches – Concurrent transactions, data structures – b-trees. Logging – No Effect logging, deleted, original, modified. Just row logging. Background process updates FILESTREAM based SP’s transcompiled to C
  • #9: No foreign keys No outer joins Not all datatypes supported Measure performance Compare with VoltDB – All in with in-memory. Redesigned from scratch. Command logging
  • #10: Show Memory Optimization Wizard for adventureworks
  • #11: Ok, time to look at contestant number 2. Redis is a very popular in-memory key/value where the values are complex data structures, not just simple values. Used by twitter for session data, cache (twitter, flickr,github,digg,disqus,Instagram,stackoverflow) AppFabric Cache is going away, Redis on Azure
  • #12: Open source Widespread Drivers for almost all languages Fast, optimized algorithms Replication Sharding
  • #13: Complete example with source code in PHP at http://redis.io
  • #14: Not faster but easier. Simplicity. Consistency. Testing.
  • #15: MOVING DATA BACK AND FORTH DUAL DOMAIN MODELS MAPPING COMPLEXITY ADD CACHING BECAUSE TOO SLOW, EVEN MORE PROBLEMS
  • #16: So let’s start off with a bit of theory. Current state of a system is a function of the initial state and the sequence of operations applied to it. Examples: Counter, increment, decrement, set, reset, read Rubiks Cube ACID – Rubiks Cube System scope can be a variable, a data structure, application or entire database. Deterministic, side effect free operations OrigoDB State is an object graph defined using NET types and collections Restore at system start by replaying commands
  • #17: One simple idea with many names and applications. Describe each briefly WAL – this is whats going on in your relational database. SQL Server writes to the transaction log
  • #18: In-memory database engine/server Code and data in same process Write-ahead command logging and snapshots Open Source single DLL for NET/Mono Commercial server with mirror replication In-memory In-memory object graph, user defined. Probably collections, entities and references. Your choice. Is it a database? Is it an object database? Linq queries. Toolkit Flexible, configurable, kernels, storage, data model, persistence modes, formatting Bring your own model. – this is key. Usually a product based on a specific data model. VoltDB, Raven Naming. LiveDomain -> LiveDB -> OrigoDB Code and data in same process Don’t do CRUD. It’s silly. ORMS are based on crud. One of the first thing you learn is don’t do SELECT *. EF Command logging The in-memory data is a projection of the commands, compare ES with a single aggregate. Same benefits as ES. What is OrigoDB? OrigoDB is an in-memory database toolkit. The core component is the Engine. The engine is 100% ACID, runs in-process and hosts a user defined data model. The data model can be domain specific or generic and is defined using plain old NET types. Persistence is based on snapshots and write-ahead command logging to the underlying storage. The Model is an instance of the user defined data model lives in RAM only is the data is a projection of the entire sequence of commands applied to the initial model, usually empty. can only be accessed through the engine The Client has no direct reference to the model interacts directly with the Engine either in-process or remote or indirectly via a proxy with the same interface as the model passes query and command objects to the engine The Engine The Engine encapsulates an instance of the model and is responsible for atomicity, consistency, isolation and durability. It performs the following tasks: writes commands to the journal executes commands and queries reads and writes snapshots restores the model on startup We call it a toolkit because you have a lot of options Modelling - define your own model or use an existing one. Generic or domain specific. It’s up to you. Storage - Default is FileStore. SqlStore or write your own module. Data format - Choose wire and storage format by plugging in different IFormatter implementations. Binary, JSON, ProtoBuf, etc Read more in the docs on Extensibility Design goals Our initial design goals were focused on rapid development, testability, simplicity, correctness, modularity, flexibility and extensibility. Performance was never a goal but running in-memory with memory optimized data structures outperforms any disk oriented system. But of course a lot of optimization is possible.
  • #19: OrigoDB is a cousin of Event Sourcing.. The entire database is a single aggregrate and there is single stream om events, the commands that were executed. Unless designed to partition it won’t scale out
  • #20: An instance of the model IS the database. Create your own domain specific model or choose a generic one. An object IS a strongly typed graph. Constraints.
  • #21: Guidelines No side effects or external actions – like send an email No external dependencies – like datetime.now, random Unhandled exceptions trigger rollback (full restore) Call Command.Abort() to signal exception or throw CommandAbortedException Immutable is good
  • #22: Serializable Inheritance Immutable Point out View and why
  • #23: Walk through the code Explain Engine.For<T>();
  • #24: Show the Geekstream site, search for ndc, ndc oslo, ode to code Show the statistics page. Show the solution explorer. Show model and a few commands, mention it’s on github.
  • #25: So when do you use ... OrigoDB when you can, SQL Server when you have to, REDIS if you have to. The DISEASE and THE CURE – Partners in crime, sql + cache. CQRS is a symptom of REDIS is cool and lightning fast but relatively limited representation. No querying, so often separate read models/persistence. SQL Server – existing rdbms, existing operations, policy, infrastructure, licenses OrigoDB – OLTP + OLAP Whenever data fits in RAM, can even use SQL Backing store. Auditing Debugging Projections Speed 100% ACID Testability
  • #26: Out of the box? Degrees, not binary. Trade-offs. Sacrifices for performance. READ_COMMITED is default isolation level. Atomic? Failures within sql transaction do not roll back unless error level > 10 isolation - > inconsistency: Phantom reads, non-repeatable reads, dirty reads