SlideShare uma empresa Scribd logo
1 de 59
Baixar para ler offline
And now for something completely
different...
WiredTiger:
Fast data structures in C
Keith Bostic
MongoDB WiredTiger team
keith.bostic@mongodb.com
#MDBE16
You are here: database layers
Middleware
Networking
Query APIs
Storage Engine
#MDBE16
Storage engines are performance critical
Middleware
Networking
Query APIs
mmapV1
Storage Engine
RocksDB
Storage Engine
WiredTiger
Storage Engine
ACID
transactional guarantees
#MDBE16
WiredTiger
•  From (some of) the folks that brought you Berkeley DB
•  High performance data engine
•  scalable throughput with low latency
•  MongoDB’s default storage engine
•  a general-purpose workhorse
Next
Ø  Hardware (is the problem)
•  Hazard pointers
•  Skiplists
•  Ticket locks
#MDBE16
Modern servers have many CPUs/cores
core
3
core
2
core
1
core
N
#MDBE16
Each core has multiple memory caches
core
3
core
2
core
1
core
N
two or
more
caches
two or
more
caches
two or
more
caches
two or
more
caches
#MDBE16
Cache coherence: cores “snoop” on writes
core
3
core
2
core
1
core
N
two or
more
caches
two or
more
caches
two or
more
caches
Main Memory
two or
more
caches
#MDBE16
Traditional data engines struggle with this architecture
•  Writing “shared” memory is slow
•  but databases exist to manage shared access to data!
•  Snoopy cache-coherence scales poorly
#MDBE16
Programmers solve with locking
•  Locks are complex objects
•  get exclusive access to the lock state
•  review and update the lock state
•  “publish” (ensure every CPU sees the changes)
•  release exclusive access
#MDBE16
Locking is slow
•  Every operation requires exclusive access
•  even shared (“read”) locks require a lock/unlock cycle
•  thread stall is inevitable
•  Locks require notification of every CPU
•  Locks require exclusive access to the memory bus
#MDBE16
Locking is expensive
•  A lock per object is too much memory
•  POSIX locks cache-aligned, up to 128B
•  grouping objects under locks makes contention worse
•  More complexity to make locks “fair” and avoid starvation
•  add thread queues
•  wake-up the next thread waiting for the lock
#MDBE16
We need to find something else
If we can’t use locks, what do we use instead?
Today we’re going to talk about ways to get rid of locks.
#MDBE16
WiredTiger is written in C
•  Java or C++ are better choices for system programming
•  automatic memory management vs. malloc/free
•  exception handling vs. explicit error paths
•  widespread availability of reusable components
•  Giving up programmer productivity
#MDBE16
C is “portable assembler”
•  Marshall typed values to/from unaligned memory
•  streaming compression, encryption, checksums
•  unstructured I/O to/from stable storage
•  Light-weight access to shared data
•  use the underlying machine primitives that make up locks
•  algorithms/structures based on those primitives
You may have seen this last year:
Next
•  Hardware
Ø  Hazard pointers
•  Skiplists
•  Ticket locks
#MDBE16
Pages in the WiredTiger cache
page 2
page 6
page 8
page 9
Lots and lots (and lots) of pages
MongoDB worker threads read from disk
WiredTiger server threads evict to disk
#MDBE16
A reasonable page-locking implementation
•  MongoDB worker threads read, modify pages
•  WiredTiger server threads evict pages from the cache
•  Allocate a lock per page
•  MongoDB worker threads share pages
•  WiredTiger eviction threads require exclusive access
#MDBE16
Page locking in the WiredTiger cache
page 2
page 6
page 8
page 9
eviction
lock
lock
lock
lock
writer
reader
thread stall on read locks!
vulnerable to starvation
too much memory
#MDBE16
Introducing memory barriers
•  Memory barriers
•  order reads, writes or both across a line of code
•  compiler won’t cache values or reorder across a barrier
•  Locks imply memory barriers
#MDBE16
Something faster
•  Hazard pointers: a technique for avoiding locks
•  MongoDB worker threads
•  “log” intention to access a page
•  publish: a memory barrier to ensure global CPU visibility
•  Write to a per-thread memory location
•  write won’t collide with other worker threads
#MDBE16
What about eviction starvation?
•  Add a per-page “blocker”
•  MongoDB worker won’t proceed if the page is blocked
•  Cheap:
•  it’s only a bit of information
•  a read-only operation for workers
#MDBE16
Worker threads
•  Publish intent to access the page
•  Memory barrier to ensure global CPU visibility
•  If the page not blocked, it’s accessible
•  Clear intent to access when done
#MDBE16
Hazard pointers for workers
page 2
page 6
page 8
page 9
flag
writer
reader
flag
flag
flag
page 9
page 2
page 6
page 2
page 9
#MDBE16
Eviction server
•  Block future worker thread access
•  Memory barrier to ensure global CPU visibility
•  Review worker thread access intentions
•  can either wait or quit
•  Unblock worker thread access when done
#MDBE16
Hazard pointers for workers and eviction
page 2
page 6
page 8
page 9
flag
flag
flag
flag
writer
reader
page 9
page 2
page 6
page 2
page 9
eviction
#MDBE16
Something faster: hazard pointers
Replaces two lock/unlock pairs for each page access
... with a single memory barrier instruction.
•  Transfers work to the eviction server
•  MongoDB worker latency is what we care about
•  Memory costs
•  per-worker-thread list
•  per-page blocking flag
Next
•  Hardware
•  Hazard pointers
Ø  Skiplists
•  Ticket locks
#MDBE16
Introducing atomic instructions
•  Atomic increment or decrement
•  read a value
•  change it and store it back without the possibility of racing
•  Based on compare-and-swap (CAS) instruction
•  read value
•  update value if the value is unchanged
•  but fail if the value has changed
#MDBE16
Atomic prepend to singly-linked list
Update head if (and only if), head’s value is unchanged
head
NEW
new.next = head
compare_and_swap(head, new.next, new)
#MDBE16
How WiredTiger uses skiplists
•  WiredTiger pages start with a disk image
•  a compact representation we don’t want to modify
•  Inserts and updates for the disk image stored in skiplists
#MDBE16
Skiplists start with a linked list
Singly-linked list with sorted values: 7, 10, 13, 18, 21, 24
7 10 211813 24
#MDBE16
Skiplists: add additional linked lists
Each higher level “skips” over more of the list
1:7
3:7
2:7
1:10 1:211:181:13 1:24
2:13 2:21
3:21
2:24
#MDBE16
Search for 18
search starts at the top-level
1:7
3:7
2:7
1:10 1:211:181:13 1:24
2:13 2:21
3:21
2:24
#MDBE16
Search for 18
search starts at the top-level
1:7
3:7
2:7
1:10 1:211:181:13 1:24
2:13 2:21
3:21
2:24
#MDBE16
Search for 18
search starts at the top-level
1:7
3:7
2:7
1:10 1:211:181:13 1:24
2:13 2:21
3:21
2:24
#MDBE16
Search for 18
search starts at the top-level
1:7
3:7
2:7
1:10 1:211:181:13 1:24
2:13 2:21
3:21
2:24
#MDBE16
Search for 18
search starts at the top-level
1:7
3:7
2:7
1:10 1:211:181:13 1:24
2:13 2:21
3:21
2:24
#MDBE16
Search for 18
search starts at the top-level
1:7
3:7
2:7
1:10 1:211:181:13 1:24
2:13 2:21
3:21
2:24
#MDBE16
Skiplists, the great
Replaces a lock/unlock pair over the entire skiplist
with one atomic memory instruction per object level
•  Insert without locking
•  Search without locking, while inserting
•  Forward & backward traversal without locking, while inserting
#MDBE16
Skiplists, the good
•  Simpler code than a Btree
•  WiredTiger binary search ~200 lines of code
•  a typical skiplist search < 20
•  Fast search
•  a Btree guarantees search in logarithmic time
•  skiplists don’t offer a guarantee, but are usually close
#MDBE16
Skiplists, the not-so-good
•  Cache-unfriendly
•  every indirection a CPU cache miss
•  Memory-unfriendly
•  needs more memory for a data set than a Btree
•  Removal requires locking
•  WiredTiger is an MVCC engine (multiple values per key)
•  removal less important to WiredTiger
Next
•  Hardware
•  Hazard pointers
•  Skiplists
Ø  Ticket locks
#MDBE16
Ticket locks
•  WiredTiger still needs to lock objects
•  but we can make locks faster
•  Ticket locks
•  customers take a unique ticket number
•  customers served in ticket order
#MDBE16
Ticket locks
Please
Take a Number
42 43414039
Now
Serving
#MDBE16
Ticket locks
•  Two incrementing counters:
ticket: the next available ticket number
serving: the ticket number now being served
•  Thread takes a ticket number
•  Thread increments “next available”
•  Thread waits for “serving” to match its ticket number
•  When thread finishes, increments “serving”
#MDBE16
Ticket locks serialize threads
40
Now Serving
39
Thread A
39
40
39
40
41
Thread B
#MDBE16
Ticket locks are almost what we need
•  Ticket locks avoid starvation and are “fair”
•  Smaller memory footprint
•  Can be made significantly faster than POSIX locks
•  remember our compare-and-swap instructions!
•  But POSIX locks are shared between readers
#MDBE16
Ticket locks: shared vs. exclusive
•  Three incrementing counters:
ticket: the next available ticket number
readers: the next reader to be served
writers: the next writer to be served
#MDBE16
Readers run in parallel
40
Writers Readers
39
Thread A
39
40
41
41
39
40
41
42
39
40
41
42
Thread B
Thread
C
#MDBE16
Multiple variable updates without locking
•  Updating multiple counters would require locking
... but we can write the bus width atomically
•  Encode the entire lock state in a single 8B value
lock {
uint16_t readers;
uint16_t writers;
uint16_t ticket; // 64K simultaneous threads
uint16_t unused;
}
#MDBE16
Ticket locks
Replaces two higher-level lock/unlock calls
... with two atomic instructions.
#MDBE16
That’s a (very) fast introduction....
•  Hazard pointers
•  Skiplists
•  Ticket locks
Open Source implementations are available in WiredTiger, including Public
Domain ticket locks.
#MDBE16
WiredTiger distribution
•  Standalone application database toolkit library
•  key-value store (NoSQL)
•  row-store, column-store and LSM engines
•  schema layer includes data types and indexes
•  Another MongoDB Open Source contribution
•  WiredTiger available for other applications
•  https://github.com/wiredtiger
Thank you!
Keith Bostic
keith.bostic@mongodb.com
MongoDB Europe 2016 - Building WiredTiger

Mais conteúdo relacionado

Mais procurados

Beyond the Basics 1: Storage Engines
Beyond the Basics 1: Storage EnginesBeyond the Basics 1: Storage Engines
Beyond the Basics 1: Storage EnginesMongoDB
 
eHarmony - Messaging Platform with MongoDB Atlas
eHarmony - Messaging Platform with MongoDB Atlas eHarmony - Messaging Platform with MongoDB Atlas
eHarmony - Messaging Platform with MongoDB Atlas MongoDB
 
Cloud Backup Overview
Cloud Backup Overview Cloud Backup Overview
Cloud Backup Overview MongoDB
 
An Enterprise Architect's View of MongoDB
An Enterprise Architect's View of MongoDBAn Enterprise Architect's View of MongoDB
An Enterprise Architect's View of MongoDBMongoDB
 
An Elastic Metadata Store for eBay’s Media Platform
An Elastic Metadata Store for eBay’s Media PlatformAn Elastic Metadata Store for eBay’s Media Platform
An Elastic Metadata Store for eBay’s Media PlatformMongoDB
 
Webinar: What's New in MongoDB 3.2
Webinar: What's New in MongoDB 3.2Webinar: What's New in MongoDB 3.2
Webinar: What's New in MongoDB 3.2MongoDB
 
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...MongoDB
 
MongoDB 3.2 Feature Preview
MongoDB 3.2 Feature PreviewMongoDB 3.2 Feature Preview
MongoDB 3.2 Feature PreviewNorberto Leite
 
Prepare for Peak Holiday Season with MongoDB
Prepare for Peak Holiday Season with MongoDBPrepare for Peak Holiday Season with MongoDB
Prepare for Peak Holiday Season with MongoDBMongoDB
 
Scaling MongoDB to a Million Collections
Scaling MongoDB to a Million CollectionsScaling MongoDB to a Million Collections
Scaling MongoDB to a Million CollectionsMongoDB
 
MongoDB Atlas
MongoDB AtlasMongoDB Atlas
MongoDB AtlasMongoDB
 
Using Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your ClusterUsing Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your ClusterMongoDB
 
A Free New World: Atlas Free Tier and How It Was Born
A Free New World: Atlas Free Tier and How It Was Born A Free New World: Atlas Free Tier and How It Was Born
A Free New World: Atlas Free Tier and How It Was Born MongoDB
 
MongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of viewMongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of viewPierre Baillet
 
Webinar: Simplifying the Database Experience with MongoDB Atlas
Webinar: Simplifying the Database Experience with MongoDB AtlasWebinar: Simplifying the Database Experience with MongoDB Atlas
Webinar: Simplifying the Database Experience with MongoDB AtlasMongoDB
 
Introduction To MongoDB
Introduction To MongoDBIntroduction To MongoDB
Introduction To MongoDBElieHannouch
 
Introducing Stitch
Introducing Stitch Introducing Stitch
Introducing Stitch MongoDB
 

Mais procurados (20)

Beyond the Basics 1: Storage Engines
Beyond the Basics 1: Storage EnginesBeyond the Basics 1: Storage Engines
Beyond the Basics 1: Storage Engines
 
eHarmony - Messaging Platform with MongoDB Atlas
eHarmony - Messaging Platform with MongoDB Atlas eHarmony - Messaging Platform with MongoDB Atlas
eHarmony - Messaging Platform with MongoDB Atlas
 
Mongo db 3.4 Overview
Mongo db 3.4 OverviewMongo db 3.4 Overview
Mongo db 3.4 Overview
 
Cloud Backup Overview
Cloud Backup Overview Cloud Backup Overview
Cloud Backup Overview
 
An Enterprise Architect's View of MongoDB
An Enterprise Architect's View of MongoDBAn Enterprise Architect's View of MongoDB
An Enterprise Architect's View of MongoDB
 
An Elastic Metadata Store for eBay’s Media Platform
An Elastic Metadata Store for eBay’s Media PlatformAn Elastic Metadata Store for eBay’s Media Platform
An Elastic Metadata Store for eBay’s Media Platform
 
Webinar: What's New in MongoDB 3.2
Webinar: What's New in MongoDB 3.2Webinar: What's New in MongoDB 3.2
Webinar: What's New in MongoDB 3.2
 
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...
How Thermo Fisher is Reducing Data Analysis Times from Days to Minutes with M...
 
MongoDB 3.2 Feature Preview
MongoDB 3.2 Feature PreviewMongoDB 3.2 Feature Preview
MongoDB 3.2 Feature Preview
 
MongoDB and Spark
MongoDB and SparkMongoDB and Spark
MongoDB and Spark
 
Prepare for Peak Holiday Season with MongoDB
Prepare for Peak Holiday Season with MongoDBPrepare for Peak Holiday Season with MongoDB
Prepare for Peak Holiday Season with MongoDB
 
Scaling MongoDB to a Million Collections
Scaling MongoDB to a Million CollectionsScaling MongoDB to a Million Collections
Scaling MongoDB to a Million Collections
 
MongoDB Atlas
MongoDB AtlasMongoDB Atlas
MongoDB Atlas
 
Using Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your ClusterUsing Compass to Diagnose Performance Problems in Your Cluster
Using Compass to Diagnose Performance Problems in Your Cluster
 
A Free New World: Atlas Free Tier and How It Was Born
A Free New World: Atlas Free Tier and How It Was Born A Free New World: Atlas Free Tier and How It Was Born
A Free New World: Atlas Free Tier and How It Was Born
 
MongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of viewMongoDB vs Mysql. A devops point of view
MongoDB vs Mysql. A devops point of view
 
Webinar: Simplifying the Database Experience with MongoDB Atlas
Webinar: Simplifying the Database Experience with MongoDB AtlasWebinar: Simplifying the Database Experience with MongoDB Atlas
Webinar: Simplifying the Database Experience with MongoDB Atlas
 
Introduction To MongoDB
Introduction To MongoDBIntroduction To MongoDB
Introduction To MongoDB
 
Introducing Stitch
Introducing Stitch Introducing Stitch
Introducing Stitch
 
MongodB Internals
MongodB InternalsMongodB Internals
MongodB Internals
 

Semelhante a MongoDB Europe 2016 - Building WiredTiger

Scaling and Transaction Futures
Scaling and Transaction FuturesScaling and Transaction Futures
Scaling and Transaction FuturesMongoDB
 
MongoDB Europe 2016 - Big Data meets Big Compute
MongoDB Europe 2016 - Big Data meets Big ComputeMongoDB Europe 2016 - Big Data meets Big Compute
MongoDB Europe 2016 - Big Data meets Big ComputeMongoDB
 
Memcached Code Camp 2009
Memcached Code Camp 2009Memcached Code Camp 2009
Memcached Code Camp 2009NorthScale
 
Jumpstart: Your Introduction to MongoDB
Jumpstart: Your Introduction to MongoDBJumpstart: Your Introduction to MongoDB
Jumpstart: Your Introduction to MongoDBMongoDB
 
2013_protect_presentation
2013_protect_presentation2013_protect_presentation
2013_protect_presentationJeff Holland
 
Common Cluster Configuration Pitfalls
Common Cluster Configuration PitfallsCommon Cluster Configuration Pitfalls
Common Cluster Configuration PitfallsMongoDB
 
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good ServerEngage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good ServerBill Malchisky Jr.
 
Advanced Schema Design Patterns
Advanced Schema Design PatternsAdvanced Schema Design Patterns
Advanced Schema Design PatternsMongoDB
 
RSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallamRSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallamAhmed Sallam
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clientspanagenda
 
Silicon Valley Code Camp 2015 - Advanced MongoDB - The Sequel
Silicon Valley Code Camp 2015 - Advanced MongoDB - The SequelSilicon Valley Code Camp 2015 - Advanced MongoDB - The Sequel
Silicon Valley Code Camp 2015 - Advanced MongoDB - The SequelDaniel Coupal
 
Performance & Scalability Improvements in Perforce
Performance & Scalability Improvements in PerforcePerformance & Scalability Improvements in Perforce
Performance & Scalability Improvements in PerforcePerforce
 
https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...
https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...
https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...MongoDB
 
Using Aggregation for Analytics
Using Aggregation for Analytics Using Aggregation for Analytics
Using Aggregation for Analytics MongoDB
 
Using Aggregation for analytics
Using Aggregation for analyticsUsing Aggregation for analytics
Using Aggregation for analyticsMongoDB
 
MongoDB Miami Meetup 1/26/15: Introduction to WiredTiger
MongoDB Miami Meetup 1/26/15: Introduction to WiredTigerMongoDB Miami Meetup 1/26/15: Introduction to WiredTiger
MongoDB Miami Meetup 1/26/15: Introduction to WiredTigerValeri Karpov
 
MongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerMongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerWiredTiger
 
Low Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesLow Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesTanel Poder
 

Semelhante a MongoDB Europe 2016 - Building WiredTiger (20)

Scaling and Transaction Futures
Scaling and Transaction FuturesScaling and Transaction Futures
Scaling and Transaction Futures
 
MongoDB Europe 2016 - Big Data meets Big Compute
MongoDB Europe 2016 - Big Data meets Big ComputeMongoDB Europe 2016 - Big Data meets Big Compute
MongoDB Europe 2016 - Big Data meets Big Compute
 
Memcached Code Camp 2009
Memcached Code Camp 2009Memcached Code Camp 2009
Memcached Code Camp 2009
 
Jumpstart: Your Introduction to MongoDB
Jumpstart: Your Introduction to MongoDBJumpstart: Your Introduction to MongoDB
Jumpstart: Your Introduction to MongoDB
 
2013_protect_presentation
2013_protect_presentation2013_protect_presentation
2013_protect_presentation
 
Common Cluster Configuration Pitfalls
Common Cluster Configuration PitfallsCommon Cluster Configuration Pitfalls
Common Cluster Configuration Pitfalls
 
cache memory management
cache memory managementcache memory management
cache memory management
 
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good ServerEngage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
Engage 2016 - Adm01 - Back from the Dead: When Bad Code Kills a Good Server
 
Advanced Schema Design Patterns
Advanced Schema Design PatternsAdvanced Schema Design Patterns
Advanced Schema Design Patterns
 
memcached Distributed Cache
memcached Distributed Cachememcached Distributed Cache
memcached Distributed Cache
 
RSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallamRSA SF Conference talk-2009-ht2-401 sallam
RSA SF Conference talk-2009-ht2-401 sallam
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clients
 
Silicon Valley Code Camp 2015 - Advanced MongoDB - The Sequel
Silicon Valley Code Camp 2015 - Advanced MongoDB - The SequelSilicon Valley Code Camp 2015 - Advanced MongoDB - The Sequel
Silicon Valley Code Camp 2015 - Advanced MongoDB - The Sequel
 
Performance & Scalability Improvements in Perforce
Performance & Scalability Improvements in PerforcePerformance & Scalability Improvements in Perforce
Performance & Scalability Improvements in Perforce
 
https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...
https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...
https://docs.google.com/presentation/d/1DcL4zK6i3HZRDD4xTGX1VpSOwyu2xBeWLT6a_...
 
Using Aggregation for Analytics
Using Aggregation for Analytics Using Aggregation for Analytics
Using Aggregation for Analytics
 
Using Aggregation for analytics
Using Aggregation for analyticsUsing Aggregation for analytics
Using Aggregation for analytics
 
MongoDB Miami Meetup 1/26/15: Introduction to WiredTiger
MongoDB Miami Meetup 1/26/15: Introduction to WiredTigerMongoDB Miami Meetup 1/26/15: Introduction to WiredTiger
MongoDB Miami Meetup 1/26/15: Introduction to WiredTiger
 
MongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTigerMongoDB World 2015 - A Technical Introduction to WiredTiger
MongoDB World 2015 - A Technical Introduction to WiredTiger
 
Low Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling ExamplesLow Level CPU Performance Profiling Examples
Low Level CPU Performance Profiling Examples
 

Mais de MongoDB

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump StartMongoDB
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB
 

Mais de MongoDB (20)

MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB AtlasMongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
MongoDB SoCal 2020: Migrate Anything* to MongoDB Atlas
 
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
MongoDB SoCal 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDBMongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
MongoDB SoCal 2020: A Complete Methodology of Data Modeling for MongoDB
 
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
MongoDB SoCal 2020: From Pharmacist to Analyst: Leveraging MongoDB for Real-T...
 
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series DataMongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
MongoDB SoCal 2020: Best Practices for Working with IoT and Time-series Data
 
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 MongoDB SoCal 2020: MongoDB Atlas Jump Start MongoDB SoCal 2020: MongoDB Atlas Jump Start
MongoDB SoCal 2020: MongoDB Atlas Jump Start
 
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
MongoDB .local San Francisco 2020: Powering the new age data demands [Infosys]
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
MongoDB .local San Francisco 2020: Using MongoDB Services in Kubernetes: any ...
 
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
MongoDB .local San Francisco 2020: Go on a Data Safari with MongoDB Charts!
 
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your MindsetMongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
MongoDB .local San Francisco 2020: From SQL to NoSQL -- Changing Your Mindset
 
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas JumpstartMongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
MongoDB .local San Francisco 2020: MongoDB Atlas Jumpstart
 
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
MongoDB .local San Francisco 2020: Tips and Tricks++ for Querying and Indexin...
 
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
MongoDB .local San Francisco 2020: Aggregation Pipeline Power++
 
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
MongoDB .local San Francisco 2020: A Complete Methodology of Data Modeling fo...
 
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep DiveMongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
MongoDB .local San Francisco 2020: MongoDB Atlas Data Lake Technical Deep Dive
 
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & GolangMongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
MongoDB .local San Francisco 2020: Developing Alexa Skills with MongoDB & Golang
 
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
MongoDB .local Paris 2020: Realm : l'ingrédient secret pour de meilleures app...
 
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
MongoDB .local Paris 2020: Upply @MongoDB : Upply : Quand le Machine Learning...
 

Último

Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night StandCall Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...only4webmaster01
 
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...amitlee9823
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...gajnagarg
 
Call Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...gajnagarg
 
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...amitlee9823
 
Discover Why Less is More in B2B Research
Discover Why Less is More in B2B ResearchDiscover Why Less is More in B2B Research
Discover Why Less is More in B2B Researchmichael115558
 
Aspirational Block Program Block Syaldey District - Almora
Aspirational Block Program Block Syaldey District - AlmoraAspirational Block Program Block Syaldey District - Almora
Aspirational Block Program Block Syaldey District - AlmoraGovindSinghDasila
 
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...karishmasinghjnh
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...amitlee9823
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...ZurliaSoop
 
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Standamitlee9823
 
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...amitlee9823
 
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...SUHANI PANDEY
 
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...amitlee9823
 
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...amitlee9823
 

Último (20)

Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night StandCall Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Shivaji Nagar ☎ 7737669865 🥵 Book Your One night Stand
 
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 9155563397 👗 Top Class Call Girl Service B...
 
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men  🔝Mathura🔝   Escorts...
➥🔝 7737669865 🔝▻ Mathura Call-girls in Women Seeking Men 🔝Mathura🔝 Escorts...
 
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
Just Call Vip call girls Erode Escorts ☎️9352988975 Two shot with one girl (E...
 
Call Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Nandini Layout ☎ 7737669865 🥵 Book Your One night Stand
 
Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...
Just Call Vip call girls Mysore Escorts ☎️9352988975 Two shot with one girl (...
 
Predicting Loan Approval: A Data Science Project
Predicting Loan Approval: A Data Science ProjectPredicting Loan Approval: A Data Science Project
Predicting Loan Approval: A Data Science Project
 
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men  🔝Dindigul🔝   Escor...
➥🔝 7737669865 🔝▻ Dindigul Call-girls in Women Seeking Men 🔝Dindigul🔝 Escor...
 
Discover Why Less is More in B2B Research
Discover Why Less is More in B2B ResearchDiscover Why Less is More in B2B Research
Discover Why Less is More in B2B Research
 
Aspirational Block Program Block Syaldey District - Almora
Aspirational Block Program Block Syaldey District - AlmoraAspirational Block Program Block Syaldey District - Almora
Aspirational Block Program Block Syaldey District - Almora
 
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
👉 Amritsar Call Girl 👉📞 6367187148 👉📞 Just📲 Call Ruhi Call Girl Phone No Amri...
 
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
Call Girls Bannerghatta Road Just Call 👗 7737669865 👗 Top Class Call Girl Ser...
 
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
(NEHA) Call Girls Katra Call Now 8617697112 Katra Escorts 24x7
 
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
Jual Obat Aborsi Surabaya ( Asli No.1 ) 085657271886 Obat Penggugur Kandungan...
 
Abortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get CytotecAbortion pills in Jeddah | +966572737505 | Get Cytotec
Abortion pills in Jeddah | +966572737505 | Get Cytotec
 
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night StandCall Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
Call Girls In Hsr Layout ☎ 7737669865 🥵 Book Your One night Stand
 
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
Call Girls Indiranagar Just Call 👗 7737669865 👗 Top Class Call Girl Service B...
 
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
VIP Model Call Girls Hinjewadi ( Pune ) Call ON 8005736733 Starting From 5K t...
 
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men  🔝Sambalpur🔝   Esc...
➥🔝 7737669865 🔝▻ Sambalpur Call-girls in Women Seeking Men 🔝Sambalpur🔝 Esc...
 
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men  🔝mahisagar🔝   Esc...
➥🔝 7737669865 🔝▻ mahisagar Call-girls in Women Seeking Men 🔝mahisagar🔝 Esc...
 

MongoDB Europe 2016 - Building WiredTiger

  • 1. And now for something completely different...
  • 3. Keith Bostic MongoDB WiredTiger team keith.bostic@mongodb.com
  • 4. #MDBE16 You are here: database layers Middleware Networking Query APIs Storage Engine
  • 5. #MDBE16 Storage engines are performance critical Middleware Networking Query APIs mmapV1 Storage Engine RocksDB Storage Engine WiredTiger Storage Engine ACID transactional guarantees
  • 6. #MDBE16 WiredTiger •  From (some of) the folks that brought you Berkeley DB •  High performance data engine •  scalable throughput with low latency •  MongoDB’s default storage engine •  a general-purpose workhorse
  • 7. Next Ø  Hardware (is the problem) •  Hazard pointers •  Skiplists •  Ticket locks
  • 8. #MDBE16 Modern servers have many CPUs/cores core 3 core 2 core 1 core N
  • 9. #MDBE16 Each core has multiple memory caches core 3 core 2 core 1 core N two or more caches two or more caches two or more caches two or more caches
  • 10. #MDBE16 Cache coherence: cores “snoop” on writes core 3 core 2 core 1 core N two or more caches two or more caches two or more caches Main Memory two or more caches
  • 11. #MDBE16 Traditional data engines struggle with this architecture •  Writing “shared” memory is slow •  but databases exist to manage shared access to data! •  Snoopy cache-coherence scales poorly
  • 12. #MDBE16 Programmers solve with locking •  Locks are complex objects •  get exclusive access to the lock state •  review and update the lock state •  “publish” (ensure every CPU sees the changes) •  release exclusive access
  • 13. #MDBE16 Locking is slow •  Every operation requires exclusive access •  even shared (“read”) locks require a lock/unlock cycle •  thread stall is inevitable •  Locks require notification of every CPU •  Locks require exclusive access to the memory bus
  • 14. #MDBE16 Locking is expensive •  A lock per object is too much memory •  POSIX locks cache-aligned, up to 128B •  grouping objects under locks makes contention worse •  More complexity to make locks “fair” and avoid starvation •  add thread queues •  wake-up the next thread waiting for the lock
  • 15. #MDBE16 We need to find something else If we can’t use locks, what do we use instead? Today we’re going to talk about ways to get rid of locks.
  • 16. #MDBE16 WiredTiger is written in C •  Java or C++ are better choices for system programming •  automatic memory management vs. malloc/free •  exception handling vs. explicit error paths •  widespread availability of reusable components •  Giving up programmer productivity
  • 17. #MDBE16 C is “portable assembler” •  Marshall typed values to/from unaligned memory •  streaming compression, encryption, checksums •  unstructured I/O to/from stable storage •  Light-weight access to shared data •  use the underlying machine primitives that make up locks •  algorithms/structures based on those primitives
  • 18. You may have seen this last year:
  • 19. Next •  Hardware Ø  Hazard pointers •  Skiplists •  Ticket locks
  • 20. #MDBE16 Pages in the WiredTiger cache page 2 page 6 page 8 page 9 Lots and lots (and lots) of pages MongoDB worker threads read from disk WiredTiger server threads evict to disk
  • 21. #MDBE16 A reasonable page-locking implementation •  MongoDB worker threads read, modify pages •  WiredTiger server threads evict pages from the cache •  Allocate a lock per page •  MongoDB worker threads share pages •  WiredTiger eviction threads require exclusive access
  • 22. #MDBE16 Page locking in the WiredTiger cache page 2 page 6 page 8 page 9 eviction lock lock lock lock writer reader thread stall on read locks! vulnerable to starvation too much memory
  • 23. #MDBE16 Introducing memory barriers •  Memory barriers •  order reads, writes or both across a line of code •  compiler won’t cache values or reorder across a barrier •  Locks imply memory barriers
  • 24. #MDBE16 Something faster •  Hazard pointers: a technique for avoiding locks •  MongoDB worker threads •  “log” intention to access a page •  publish: a memory barrier to ensure global CPU visibility •  Write to a per-thread memory location •  write won’t collide with other worker threads
  • 25. #MDBE16 What about eviction starvation? •  Add a per-page “blocker” •  MongoDB worker won’t proceed if the page is blocked •  Cheap: •  it’s only a bit of information •  a read-only operation for workers
  • 26. #MDBE16 Worker threads •  Publish intent to access the page •  Memory barrier to ensure global CPU visibility •  If the page not blocked, it’s accessible •  Clear intent to access when done
  • 27. #MDBE16 Hazard pointers for workers page 2 page 6 page 8 page 9 flag writer reader flag flag flag page 9 page 2 page 6 page 2 page 9
  • 28. #MDBE16 Eviction server •  Block future worker thread access •  Memory barrier to ensure global CPU visibility •  Review worker thread access intentions •  can either wait or quit •  Unblock worker thread access when done
  • 29. #MDBE16 Hazard pointers for workers and eviction page 2 page 6 page 8 page 9 flag flag flag flag writer reader page 9 page 2 page 6 page 2 page 9 eviction
  • 30. #MDBE16 Something faster: hazard pointers Replaces two lock/unlock pairs for each page access ... with a single memory barrier instruction. •  Transfers work to the eviction server •  MongoDB worker latency is what we care about •  Memory costs •  per-worker-thread list •  per-page blocking flag
  • 31. Next •  Hardware •  Hazard pointers Ø  Skiplists •  Ticket locks
  • 32. #MDBE16 Introducing atomic instructions •  Atomic increment or decrement •  read a value •  change it and store it back without the possibility of racing •  Based on compare-and-swap (CAS) instruction •  read value •  update value if the value is unchanged •  but fail if the value has changed
  • 33. #MDBE16 Atomic prepend to singly-linked list Update head if (and only if), head’s value is unchanged head NEW new.next = head compare_and_swap(head, new.next, new)
  • 34. #MDBE16 How WiredTiger uses skiplists •  WiredTiger pages start with a disk image •  a compact representation we don’t want to modify •  Inserts and updates for the disk image stored in skiplists
  • 35. #MDBE16 Skiplists start with a linked list Singly-linked list with sorted values: 7, 10, 13, 18, 21, 24 7 10 211813 24
  • 36. #MDBE16 Skiplists: add additional linked lists Each higher level “skips” over more of the list 1:7 3:7 2:7 1:10 1:211:181:13 1:24 2:13 2:21 3:21 2:24
  • 37. #MDBE16 Search for 18 search starts at the top-level 1:7 3:7 2:7 1:10 1:211:181:13 1:24 2:13 2:21 3:21 2:24
  • 38. #MDBE16 Search for 18 search starts at the top-level 1:7 3:7 2:7 1:10 1:211:181:13 1:24 2:13 2:21 3:21 2:24
  • 39. #MDBE16 Search for 18 search starts at the top-level 1:7 3:7 2:7 1:10 1:211:181:13 1:24 2:13 2:21 3:21 2:24
  • 40. #MDBE16 Search for 18 search starts at the top-level 1:7 3:7 2:7 1:10 1:211:181:13 1:24 2:13 2:21 3:21 2:24
  • 41. #MDBE16 Search for 18 search starts at the top-level 1:7 3:7 2:7 1:10 1:211:181:13 1:24 2:13 2:21 3:21 2:24
  • 42. #MDBE16 Search for 18 search starts at the top-level 1:7 3:7 2:7 1:10 1:211:181:13 1:24 2:13 2:21 3:21 2:24
  • 43. #MDBE16 Skiplists, the great Replaces a lock/unlock pair over the entire skiplist with one atomic memory instruction per object level •  Insert without locking •  Search without locking, while inserting •  Forward & backward traversal without locking, while inserting
  • 44. #MDBE16 Skiplists, the good •  Simpler code than a Btree •  WiredTiger binary search ~200 lines of code •  a typical skiplist search < 20 •  Fast search •  a Btree guarantees search in logarithmic time •  skiplists don’t offer a guarantee, but are usually close
  • 45. #MDBE16 Skiplists, the not-so-good •  Cache-unfriendly •  every indirection a CPU cache miss •  Memory-unfriendly •  needs more memory for a data set than a Btree •  Removal requires locking •  WiredTiger is an MVCC engine (multiple values per key) •  removal less important to WiredTiger
  • 46. Next •  Hardware •  Hazard pointers •  Skiplists Ø  Ticket locks
  • 47. #MDBE16 Ticket locks •  WiredTiger still needs to lock objects •  but we can make locks faster •  Ticket locks •  customers take a unique ticket number •  customers served in ticket order
  • 48. #MDBE16 Ticket locks Please Take a Number 42 43414039 Now Serving
  • 49. #MDBE16 Ticket locks •  Two incrementing counters: ticket: the next available ticket number serving: the ticket number now being served •  Thread takes a ticket number •  Thread increments “next available” •  Thread waits for “serving” to match its ticket number •  When thread finishes, increments “serving”
  • 50. #MDBE16 Ticket locks serialize threads 40 Now Serving 39 Thread A 39 40 39 40 41 Thread B
  • 51. #MDBE16 Ticket locks are almost what we need •  Ticket locks avoid starvation and are “fair” •  Smaller memory footprint •  Can be made significantly faster than POSIX locks •  remember our compare-and-swap instructions! •  But POSIX locks are shared between readers
  • 52. #MDBE16 Ticket locks: shared vs. exclusive •  Three incrementing counters: ticket: the next available ticket number readers: the next reader to be served writers: the next writer to be served
  • 53. #MDBE16 Readers run in parallel 40 Writers Readers 39 Thread A 39 40 41 41 39 40 41 42 39 40 41 42 Thread B Thread C
  • 54. #MDBE16 Multiple variable updates without locking •  Updating multiple counters would require locking ... but we can write the bus width atomically •  Encode the entire lock state in a single 8B value lock { uint16_t readers; uint16_t writers; uint16_t ticket; // 64K simultaneous threads uint16_t unused; }
  • 55. #MDBE16 Ticket locks Replaces two higher-level lock/unlock calls ... with two atomic instructions.
  • 56. #MDBE16 That’s a (very) fast introduction.... •  Hazard pointers •  Skiplists •  Ticket locks Open Source implementations are available in WiredTiger, including Public Domain ticket locks.
  • 57. #MDBE16 WiredTiger distribution •  Standalone application database toolkit library •  key-value store (NoSQL) •  row-store, column-store and LSM engines •  schema layer includes data types and indexes •  Another MongoDB Open Source contribution •  WiredTiger available for other applications •  https://github.com/wiredtiger