SlideShare ist ein Scribd-Unternehmen logo
1 von 47
2
Problem statement:
I inherited a MongoDB database server with
60 collections and 100 or so indexes.
The business users are complaining about
slow report completion times.
What can I do to improve performance ?
3
Scope:
System tuning-
Memory
Process
Disk
Network
Application tuning-
Application architecture
Statement design
Data model design
Indexing, Query optimization
(Relational, so that we may compare/contrast)
4
What you will
leave with in 60
minutes:
• Detail command processing stages
• Can apply the 5 rules to a Rule Based query optimizer
• Apply 3 Index Negation guidelines
• Repair common query design problems-
• Psuedo order by clause
• OR topped queries
• (And topped queries, non-compound)
• Drop and analyze query plans
• Articulate/control FJS, & ESR query processing
patterns
5
Queries 1 & 2:
SELECT * FROM phonebook
WHERE lastName LIKE “?son”;
SELECT * FROM phonebook
WHERE firstName = “Jennifer”;
6
Query 3:
CREATE TABLE t1 (col1, col_2, .. 80 more columns);
CREATE INDEX i1 ON t1 (col_gender);
SELECT * FROM t1
WHERE col_gender = “F” AND col_age > 50;
7
Negation of an index
1.Non-initial substring
2.Non-anchored compound/composite key
3.(Poor) selectivity of a filter
Partial negation of an index-
CREATE INDEX i1 ON t2 (col1, col2);
//
SELECT * FROM t1
WHERE col1 > 100 AND col2 = “x”;
Exception to all above-
Covered query/key-only
8
(n) Stage database server back end
9
Query Optimizers
Rule Cost ?
10
5 Rules to a rule based optimizer
1.Outer table joins
2.(Non-outer) table joins
3.Filter criteria (predicates)
4.Table size
5.Table cardinality
SELECT *
FROM orderHeader, orderLineItems
WHERE
oh.orderNumber =
oi.orderNumber;
SELECT *
FROM persons, OUTER automobiles
WHERE
p.personId = a.personId;
11
Query 4: final/larger example using SQL
12
Example 4:
query
13
Query 4: First predicate
14
Collection access method: collection scan versus index scan
15
Query 4: Join and predicate
16
Query 4: Optimal plan
17
FJS versus ESR: MongoDB
SELECT *
FROM collection
WHERE
col1 = ‘x’ and col2 > ‘y’
ORDER BY col3;
Filter -> Join -> Sort (FJS)
Equality -> Sort -> Range (ESR)
18
Problem statement:
I inherited a MongoDB database server with
60 collections and 100 or so indexes.
The business users are complaining about
slow report completion times.
What can I do to improve performance ?
19
Skills/tools we need:
• Which server
• Which logfile
• Server profiling Level
• Which queries
• Cloud/Ops Manager !!
• mtools
• Text processing
• Drop the query plan
• Analyze the query plan
• Which indexes get used
• Other
20
Sample data set: zips.json
> db.zips.findOne()
{
"_id" : ObjectId("570 .. 1c1f2"),
"city" : "ACMAR",
"zip" : "35004",
"loc" : {
"y" : 33.584132,
"x" : 86.51557
},
"pop" : 6055,
"state" : "AL"
}
> db.zips.count()
29470
>db.zips.find( { "state" : "WI", "pop" : { "$lt"
: 50 } } ).sort( { "city" : 1 } )
21
Query 5: Dumping the query plan
db.zips.find( { "state" : "WI",
"pop" : { "$lt" : 50 } } ).sort(
{ "city" : 1 }
).explain("executionStats")
"winningPlan" : {
"stage" : "SORT", "sortPattern" : { "city" : 1 },
"inputStage" : {
"stage" : "COLLSCAN",
"filter" : {
"$and" : [ "state" : { "$eq" : "WI" "pop" : { "$lt" : 50
"rejectedPlans" : [ ]
"executionStats" : {
"nReturned" : 4,
"executionTimeMillis" : 16,
"totalKeysExamined" : 0,
"totalDocsExamined" : 29470,
22
Query 5: get indexes
> db.zips.getIndexes()
[ {
"v" : 1, "key" : { "_id" : 1 },
"name" : "_id_",
"ns" : "test_db.zips"
} ]
db.zips.createIndex( { "state" : 1 , "pop" : 1 } )
23
Query 5: attempt 2
winningPlan" : {
"stage" : "SORT", "sortPattern" : { "city" : 1 },
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "state" : 1, "pop" : 1 },
"indexBounds" : {
"state" : [ "["WI", "WI"]" ],
"pop" : [ "[-inf.0, 50.0)" ]
"executionStats" : {
"nReturned" : 4,
"executionTimeMillis" : 1,
"totalKeysExamined" : 4,
"totalDocsExamined" : 4,
24
Query 5:
attempt 3
db.zips.createIndex( { "state" : 1 , "city" : 1 , "pop" : 1 } )
"winningPlan" : {
"stage" : "SORT", "sortPattern" : { "city" : 1
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "state" : 1, "pop" : 1
"rejectedPlans" : [
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "state" : 1, "city" : 1, "pop" : 1 },
"indexBounds" : {
"state" : [ "["WI", "WI"]" ],
"city" : [ "[MinKey, MaxKey]" ],
"pop" : [ "[-inf.0, 50.0)" ]
25
Query 6: (pseudo order by clause)
db.zips.find( { "state" : "CO" }
).sort( { "pop" : 1 } )
SELECT * FROM t1
WHERE col1 = ‘x’
ORDER BY col2;
SELECT * FROM t1
WHERE col1 = ‘x’
ORDER BY col1, col2;
SELECT * FROM t1
WHERE col1 = ‘x’
ORDER BY ‘x’, col2;
26
Query 6: query plan
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "state" : 1, "city" : 1, "pop" : 1 },
"indexBounds" : {
"state" : [ "["CO", "CO"]" ],
"city" : [ "[MinKey, MaxKey]" ],
"pop" : [ "[MinKey, MaxKey]" ]
"executionStats" : {
"nReturned" : 416,
"executionTimeMillis" : 1,
"totalKeysExamined" : 416,
"totalDocsExamined" : 416,
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "state" : 1, "pop" : 1 },
"indexBounds" : {
"state" : [ "["CO", "CO"]" ],
"pop" : [ "[MinKey, MaxKey]" ]
"rejectedPlans" : [
"stage" : "SORT",
"sortPattern" : { "pop" : 1 },
"inputStage" : {
27
Review the indexes we have so far
> db.zips.getIndexes()
_id
db.zips.createIndex( { "state" : 1 , "pop" : 1 } )
db.zips.createIndex( { "state" : 1 , "city" : 1 , "pop" : 1 } )
28
Query 7: OR topped query
db.zips.find( { "$or" : [ { "state" : "UT" }, { "pop" : 2 } ] } )
"winningPlan" : {
"inputStage" : {
"stage" : "COLLSCAN",
"filter" : {
"$or" : [
"pop" : { "$eq" : 2 }
"state" : { "$eq" : "UT" }
"rejectedPlans" : [ ]
"executionStats" : {
"nReturned" : 215,
"executionTimeMillis" : 22,
"totalKeysExamined" : 0,
"totalDocsExamined" : 29470,
SELECT * FROM t1
WHERE
order_date = TODAY
OR
ship_weight < 10;
29
Query 7: solution
"stage" : "IXSCAN",
"keyPattern" : { "pop" : 1 },
"indexBounds" : {
"pop" : [ "[2.0, 2.0]" ]
"rejectedPlans" : [ ]
"executionStats" : {
"nReturned" : 215,
"executionTimeMillis" : 2,
"totalKeysExamined" : 215,
"totalDocsExamined" : 215,
db.zips.createIndex( { "pop" : 1 } )
"winningPlan" : {
"inputStage" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "OR",
"inputStages" : [
"stage" : "IXSCAN",
"keyPattern" : { "state" : 1, "pop" : 1 },
"indexBounds" : {
"state" : [ "["UT", "UT"]" ],
"pop" : [ "[MinKey, MaxKey]" ]
30
Topics not previously
covered
• How to tell which indexes are being used
• How to tell if an index is unique
• Smoke tests
• Covered queries
• MongoDB index types
• When do winning query plans get evacuated
• Index intersection
• Building indexes (online/offline)
• Sharding and queries, query plans
• Capped collections, tailable cursors
• Optimizer hints
• Memory limits
• Query rewrite (aggregation pipeline optimization)
• Which server
• Which logfile
• (Server profiling Level)
• Which queries
• mtools
• Text processing
31
Resources:
• The parent to this preso,
https://github.com/farrell0/MongoDB-Developers-Notebook
• An excellent query primer (110 pages)
http://www.redbooks.ibm.com/abstracts/sg247138.html?Open
(Chapters 10 and 11.)
• University.MongoDB.com
• https://www.mongodb.com/consulting-test#performance_evaluation
• zips.json
http://media.mongodb.org/zips.json
• Call Dave Lutz, at home, .. .. On Sunday (early)
(512)555/1212
32
Backup Slides
How to tell which indexes are being used
db.zips.aggregate( [ { "$indexStats" : {} } ] ).pretty()
{ "name" : "pop_1",
"key" : { "pop" : 1 },
"host" : "rhhost00.grid:27017",
"accesses" : {
"ops" : NumberLong(15),
"since" : ISODate("2016-04-19T07:13:44.546Z") } }
{ "name" : "state_1_city_1_pop_1",
"key" : { "state" : 1, "city" : 1, "pop" : 1 },
"host" : "rhhost00.grid:27017",
"accesses" : {
"ops" : NumberLong(0),
"since" : ISODate("2016-04-19T06:49:11.765Z") } }
How to tell if an index is unique
db.t1.createIndex( { "k1" : 1 },
{ "unique" : true })
{
"createdCollectionAutomatically" : true,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
> db.t1.getIndexes()
[ { "v" : 1,
"key" : { "_id" : 1 },
"name" : "_id_",
"ns" : "test_db.t1“ },
{ "v" : 1,
"unique" : true,
"key" : { "k1" : 1 },
"name" : "k1_1",
"ns" : "test_db.t1“ }
]
Smoke tests
Every night, gather a set of statistics about your hard disk fullness,
and about the performance of a set of queries that are strategic to
the application.
For queries we wish to record-
• The number of documents returned
• The winning query plan
• Elapsed time, disk and memory consumed
• Other
Covered queries
> db.zips.find( { "pop" : { "$lt" : 200 } },
{ "_id" : 0, "pop" : 1 } ).sort(
{ "pop" : -1 } ).explain()
"winningPlan" : {
"stage" : "PROJECTION",
"transformBy" : {
"_id" : 0,
"pop" : 1 },
"inputStage" : {
"stage" : "IXSCAN",
"keyPattern" : { "pop" : 1 },
"indexBounds" : {
"pop" : [ "(200.0, -inf.0]" ]
"rejectedPlans" : [ ]
}
When does the winning plan get evacuated
In short, the cached query plan is re-evaluated if:
• The collection receives 1000 or more writes
• An index is added or dropped
• A reindex operation is performed
• mongod is restarted
• You run a query with explain
Index intersection
db.zips.find( { "$or" : [ { "state" : "UT" }, { "pop" : 2 } ] } )
db.zips.find( { "city" : "EAST TROY", "zip" : 53120 } )
Building indexes
db.zips.createIndex( { “zip” : 1 }, { “background” : true } )
Capped collections
db.createCollection("my_collection",
{ capped : true, size : 5242880,
max : 5000 } )
from pymongo import Connection
import time
db = Connection().my_db
coll = db.my_collection
cursor = coll.find(tailable=True)
while cursor.alive:
try:
doc = cursor.next()
print doc
except StopIteration:
time.sleep(1)
Memory limits: 32 MB, 100 MB
"executionStages" : {
"stage" : "SORT",
"nReturned" : 1,
"executionTimeMillisEstimate" : 60,
…
"sortPattern" : { "City" : 1 },
"memUsage" : 120,
"memLimit" : 33554432,
db.zips.aggregate([
{ "$group" :
{ "_id" : "$state",
//
"totalPop" : { "$sum" : "$pop" },
"cityCount" : { "$sum" : 1 }
}
} ,
{ "$sort" : { "_id" : 1 } }
],
{ "allowDiskUse" : true }
)
42
mtools: mplotquery
43
But first:
Y/N I have more than 24 months
experience with SQL
Y/N I have more than 6 months
experience with MongoDB
Y/N I have dropped a MongoDB
explain plan, understood it,
made changes, and was happy
Y/N Puppies scare me
44
Two more examples: Queries 8 and 9
find() aggregate()
• optimizer hints
• $lookup()
45
Query 8: automatic query rewrite
> db.zips.aggregate(
... [
... { "$sort" :
... { "state" : 1 }
... },
... {
... "$match" :
... { "state" : { "$gt" : "M" } }
... }
... ],
... { "explain" : true } )
46
Query 8: Explain plan
"stages" : [
"$cursor" : {
"sort" : { "state" : 1 },
"winningPlan" : {
"stage" : "FETCH",
"inputStage" : {
"stage" : "IXSCAN",
"indexName" : "state_1_city_1",
"indexBounds" : {
"state" : [ "("M", {})" ],
"city" : [ "[MinKey, MaxKey]" ]
"rejectedPlans" : [ ]
47
Query 9: Optimizer hints
> db.zips.find( { "city" : "EAST TROY" }).hint(
{ "zip" : 1} ).explain("executionStats")
"winningPlan" : {
"stage" : "FETCH",
"filter" : { "city" : { "$eq" : "EAST TROY" } },
"inputStage" : {
"stage" : "IXSCAN", "keyPattern" : { "zip" : 1 },
"indexBounds" : { "zip" : [ "[MinKey, MaxKey]" ] }
"rejectedPlans" : [ ]
"executionStats" : {
"nReturned" : 1,
"executionTimeMillis" : 28,
"totalKeysExamined" : 29470,
"totalDocsExamined" : 29470,

Weitere ähnliche Inhalte

Was ist angesagt?

Indexing Strategies to Help You Scale
Indexing Strategies to Help You ScaleIndexing Strategies to Help You Scale
Indexing Strategies to Help You ScaleMongoDB
 
2011 Mongo FR - Indexing in MongoDB
2011 Mongo FR - Indexing in MongoDB2011 Mongo FR - Indexing in MongoDB
2011 Mongo FR - Indexing in MongoDBantoinegirbal
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBantoinegirbal
 
Indexing and Performance Tuning
Indexing and Performance TuningIndexing and Performance Tuning
Indexing and Performance TuningMongoDB
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkMongoDB
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineJason Terpko
 
MongoDB Europe 2016 - Debugging MongoDB Performance
MongoDB Europe 2016 - Debugging MongoDB PerformanceMongoDB Europe 2016 - Debugging MongoDB Performance
MongoDB Europe 2016 - Debugging MongoDB PerformanceMongoDB
 
Getting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSGetting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSMongoDB
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDBNosh Petigara
 
Indexing & Query Optimization
Indexing & Query OptimizationIndexing & Query Optimization
Indexing & Query OptimizationMongoDB
 
Indexing and Query Optimization
Indexing and Query OptimizationIndexing and Query Optimization
Indexing and Query OptimizationMongoDB
 
Indexing and Query Optimizer (Aaron Staple)
Indexing and Query Optimizer (Aaron Staple)Indexing and Query Optimizer (Aaron Staple)
Indexing and Query Optimizer (Aaron Staple)MongoSF
 
Reducing Development Time with MongoDB vs. SQL
Reducing Development Time with MongoDB vs. SQLReducing Development Time with MongoDB vs. SQL
Reducing Development Time with MongoDB vs. SQLMongoDB
 
Webinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and JavaWebinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and JavaMongoDB
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation Amit Ghosh
 
Choosing a Shard key
Choosing a Shard keyChoosing a Shard key
Choosing a Shard keyMongoDB
 
MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know Norberto Leite
 

Was ist angesagt? (20)

Indexing Strategies to Help You Scale
Indexing Strategies to Help You ScaleIndexing Strategies to Help You Scale
Indexing Strategies to Help You Scale
 
2011 Mongo FR - Indexing in MongoDB
2011 Mongo FR - Indexing in MongoDB2011 Mongo FR - Indexing in MongoDB
2011 Mongo FR - Indexing in MongoDB
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Indexing and Performance Tuning
Indexing and Performance TuningIndexing and Performance Tuning
Indexing and Performance Tuning
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation Framework
 
MongoDB-SESSION03
MongoDB-SESSION03MongoDB-SESSION03
MongoDB-SESSION03
 
Indexing
IndexingIndexing
Indexing
 
MongoDB - Aggregation Pipeline
MongoDB - Aggregation PipelineMongoDB - Aggregation Pipeline
MongoDB - Aggregation Pipeline
 
MongoDB Europe 2016 - Debugging MongoDB Performance
MongoDB Europe 2016 - Debugging MongoDB PerformanceMongoDB Europe 2016 - Debugging MongoDB Performance
MongoDB Europe 2016 - Debugging MongoDB Performance
 
Introduction to solr
Introduction to solrIntroduction to solr
Introduction to solr
 
Getting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSGetting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJS
 
Introduction to MongoDB
Introduction to MongoDBIntroduction to MongoDB
Introduction to MongoDB
 
Indexing & Query Optimization
Indexing & Query OptimizationIndexing & Query Optimization
Indexing & Query Optimization
 
Indexing and Query Optimization
Indexing and Query OptimizationIndexing and Query Optimization
Indexing and Query Optimization
 
Indexing and Query Optimizer (Aaron Staple)
Indexing and Query Optimizer (Aaron Staple)Indexing and Query Optimizer (Aaron Staple)
Indexing and Query Optimizer (Aaron Staple)
 
Reducing Development Time with MongoDB vs. SQL
Reducing Development Time with MongoDB vs. SQLReducing Development Time with MongoDB vs. SQL
Reducing Development Time with MongoDB vs. SQL
 
Webinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and JavaWebinar: Building Your First App with MongoDB and Java
Webinar: Building Your First App with MongoDB and Java
 
MongoDB Aggregation
MongoDB Aggregation MongoDB Aggregation
MongoDB Aggregation
 
Choosing a Shard key
Choosing a Shard keyChoosing a Shard key
Choosing a Shard key
 
MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know MongoDB + Java - Everything you need to know
MongoDB + Java - Everything you need to know
 

Ähnlich wie Webinar: Index Tuning and Evaluation

Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19
Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19
Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19Henrik Ingo
 
Webinar: What's new in the .NET Driver
Webinar: What's new in the .NET DriverWebinar: What's new in the .NET Driver
Webinar: What's new in the .NET DriverMongoDB
 
Introduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-finalIntroduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-finalM Malai
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerMydbops
 
High Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudHigh Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudMongoDB
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformationLars Marius Garshol
 
Storage Methods for Nonstandard Data Patterns
Storage Methods for Nonstandard Data PatternsStorage Methods for Nonstandard Data Patterns
Storage Methods for Nonstandard Data PatternsBob Burgess
 
Write Faster SQL with Trino.pdf
Write Faster SQL with Trino.pdfWrite Faster SQL with Trino.pdf
Write Faster SQL with Trino.pdfEric Xiao
 
9b. Document-Oriented Databases lab
9b. Document-Oriented Databases lab9b. Document-Oriented Databases lab
9b. Document-Oriented Databases labFabio Fumarola
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analyticsMongoDB
 
Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework MongoDB
 
Data Processing and Aggregation with MongoDB
Data Processing and Aggregation with MongoDB Data Processing and Aggregation with MongoDB
Data Processing and Aggregation with MongoDB MongoDB
 
ElasticSearch AJUG 2013
ElasticSearch AJUG 2013ElasticSearch AJUG 2013
ElasticSearch AJUG 2013Roy Russo
 
MySQL Performance Monitoring
MySQL Performance MonitoringMySQL Performance Monitoring
MySQL Performance Monitoringspil-engineering
 
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & AggregationWebinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & AggregationMongoDB
 
Advanced query parsing techniques
Advanced query parsing techniquesAdvanced query parsing techniques
Advanced query parsing techniqueslucenerevolution
 
Scaling MongoDB
Scaling MongoDBScaling MongoDB
Scaling MongoDBMongoDB
 

Ähnlich wie Webinar: Index Tuning and Evaluation (20)

Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19
Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19
Whats new in mongoDB 2.4 at Copenhagen user group 2013-06-19
 
Webinar: What's new in the .NET Driver
Webinar: What's new in the .NET DriverWebinar: What's new in the .NET Driver
Webinar: What's new in the .NET Driver
 
Introduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-finalIntroduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-final
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizer
 
High Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal CloudHigh Performance, Scalable MongoDB in a Bare Metal Cloud
High Performance, Scalable MongoDB in a Bare Metal Cloud
 
JSLT: JSON querying and transformation
JSLT: JSON querying and transformationJSLT: JSON querying and transformation
JSLT: JSON querying and transformation
 
Mug17 gurgaon
Mug17 gurgaonMug17 gurgaon
Mug17 gurgaon
 
Storage Methods for Nonstandard Data Patterns
Storage Methods for Nonstandard Data PatternsStorage Methods for Nonstandard Data Patterns
Storage Methods for Nonstandard Data Patterns
 
Write Faster SQL with Trino.pdf
Write Faster SQL with Trino.pdfWrite Faster SQL with Trino.pdf
Write Faster SQL with Trino.pdf
 
9b. Document-Oriented Databases lab
9b. Document-Oriented Databases lab9b. Document-Oriented Databases lab
9b. Document-Oriented Databases lab
 
Mongo indexes
Mongo indexesMongo indexes
Mongo indexes
 
1403 app dev series - session 5 - analytics
1403   app dev series - session 5 - analytics1403   app dev series - session 5 - analytics
1403 app dev series - session 5 - analytics
 
Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework Beyond the Basics 2: Aggregation Framework
Beyond the Basics 2: Aggregation Framework
 
Data Processing and Aggregation with MongoDB
Data Processing and Aggregation with MongoDB Data Processing and Aggregation with MongoDB
Data Processing and Aggregation with MongoDB
 
ElasticSearch AJUG 2013
ElasticSearch AJUG 2013ElasticSearch AJUG 2013
ElasticSearch AJUG 2013
 
MySQL Performance Monitoring
MySQL Performance MonitoringMySQL Performance Monitoring
MySQL Performance Monitoring
 
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & AggregationWebinar: Applikationsentwicklung mit MongoDB: Teil 5: Reporting & Aggregation
Webinar: Applikationsentwicklung mit MongoDB : Teil 5: Reporting & Aggregation
 
Advanced Relevancy Ranking
Advanced Relevancy RankingAdvanced Relevancy Ranking
Advanced Relevancy Ranking
 
Advanced query parsing techniques
Advanced query parsing techniquesAdvanced query parsing techniques
Advanced query parsing techniques
 
Scaling MongoDB
Scaling MongoDBScaling MongoDB
Scaling MongoDB
 

Mehr von 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
 

Mehr von 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...
 

Kürzlich hochgeladen

"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
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
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
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr BaganFwdays
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 
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
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfLoriGlavin3
 

Kürzlich hochgeladen (20)

"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
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
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
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan"ML in Production",Oleksandr Bagan
"ML in Production",Oleksandr Bagan
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 
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
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
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
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Moving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdfMoving Beyond Passwords: FIDO Paris Seminar.pdf
Moving Beyond Passwords: FIDO Paris Seminar.pdf
 

Webinar: Index Tuning and Evaluation

  • 1.
  • 2. 2 Problem statement: I inherited a MongoDB database server with 60 collections and 100 or so indexes. The business users are complaining about slow report completion times. What can I do to improve performance ?
  • 3. 3 Scope: System tuning- Memory Process Disk Network Application tuning- Application architecture Statement design Data model design Indexing, Query optimization (Relational, so that we may compare/contrast)
  • 4. 4 What you will leave with in 60 minutes: • Detail command processing stages • Can apply the 5 rules to a Rule Based query optimizer • Apply 3 Index Negation guidelines • Repair common query design problems- • Psuedo order by clause • OR topped queries • (And topped queries, non-compound) • Drop and analyze query plans • Articulate/control FJS, & ESR query processing patterns
  • 5. 5 Queries 1 & 2: SELECT * FROM phonebook WHERE lastName LIKE “?son”; SELECT * FROM phonebook WHERE firstName = “Jennifer”;
  • 6. 6 Query 3: CREATE TABLE t1 (col1, col_2, .. 80 more columns); CREATE INDEX i1 ON t1 (col_gender); SELECT * FROM t1 WHERE col_gender = “F” AND col_age > 50;
  • 7. 7 Negation of an index 1.Non-initial substring 2.Non-anchored compound/composite key 3.(Poor) selectivity of a filter Partial negation of an index- CREATE INDEX i1 ON t2 (col1, col2); // SELECT * FROM t1 WHERE col1 > 100 AND col2 = “x”; Exception to all above- Covered query/key-only
  • 8. 8 (n) Stage database server back end
  • 10. 10 5 Rules to a rule based optimizer 1.Outer table joins 2.(Non-outer) table joins 3.Filter criteria (predicates) 4.Table size 5.Table cardinality SELECT * FROM orderHeader, orderLineItems WHERE oh.orderNumber = oi.orderNumber; SELECT * FROM persons, OUTER automobiles WHERE p.personId = a.personId;
  • 11. 11 Query 4: final/larger example using SQL
  • 13. 13 Query 4: First predicate
  • 14. 14 Collection access method: collection scan versus index scan
  • 15. 15 Query 4: Join and predicate
  • 17. 17 FJS versus ESR: MongoDB SELECT * FROM collection WHERE col1 = ‘x’ and col2 > ‘y’ ORDER BY col3; Filter -> Join -> Sort (FJS) Equality -> Sort -> Range (ESR)
  • 18. 18 Problem statement: I inherited a MongoDB database server with 60 collections and 100 or so indexes. The business users are complaining about slow report completion times. What can I do to improve performance ?
  • 19. 19 Skills/tools we need: • Which server • Which logfile • Server profiling Level • Which queries • Cloud/Ops Manager !! • mtools • Text processing • Drop the query plan • Analyze the query plan • Which indexes get used • Other
  • 20. 20 Sample data set: zips.json > db.zips.findOne() { "_id" : ObjectId("570 .. 1c1f2"), "city" : "ACMAR", "zip" : "35004", "loc" : { "y" : 33.584132, "x" : 86.51557 }, "pop" : 6055, "state" : "AL" } > db.zips.count() 29470 >db.zips.find( { "state" : "WI", "pop" : { "$lt" : 50 } } ).sort( { "city" : 1 } )
  • 21. 21 Query 5: Dumping the query plan db.zips.find( { "state" : "WI", "pop" : { "$lt" : 50 } } ).sort( { "city" : 1 } ).explain("executionStats") "winningPlan" : { "stage" : "SORT", "sortPattern" : { "city" : 1 }, "inputStage" : { "stage" : "COLLSCAN", "filter" : { "$and" : [ "state" : { "$eq" : "WI" "pop" : { "$lt" : 50 "rejectedPlans" : [ ] "executionStats" : { "nReturned" : 4, "executionTimeMillis" : 16, "totalKeysExamined" : 0, "totalDocsExamined" : 29470,
  • 22. 22 Query 5: get indexes > db.zips.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test_db.zips" } ] db.zips.createIndex( { "state" : 1 , "pop" : 1 } )
  • 23. 23 Query 5: attempt 2 winningPlan" : { "stage" : "SORT", "sortPattern" : { "city" : 1 }, "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "state" : 1, "pop" : 1 }, "indexBounds" : { "state" : [ "["WI", "WI"]" ], "pop" : [ "[-inf.0, 50.0)" ] "executionStats" : { "nReturned" : 4, "executionTimeMillis" : 1, "totalKeysExamined" : 4, "totalDocsExamined" : 4,
  • 24. 24 Query 5: attempt 3 db.zips.createIndex( { "state" : 1 , "city" : 1 , "pop" : 1 } ) "winningPlan" : { "stage" : "SORT", "sortPattern" : { "city" : 1 "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "state" : 1, "pop" : 1 "rejectedPlans" : [ "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "state" : 1, "city" : 1, "pop" : 1 }, "indexBounds" : { "state" : [ "["WI", "WI"]" ], "city" : [ "[MinKey, MaxKey]" ], "pop" : [ "[-inf.0, 50.0)" ]
  • 25. 25 Query 6: (pseudo order by clause) db.zips.find( { "state" : "CO" } ).sort( { "pop" : 1 } ) SELECT * FROM t1 WHERE col1 = ‘x’ ORDER BY col2; SELECT * FROM t1 WHERE col1 = ‘x’ ORDER BY col1, col2; SELECT * FROM t1 WHERE col1 = ‘x’ ORDER BY ‘x’, col2;
  • 26. 26 Query 6: query plan "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "state" : 1, "city" : 1, "pop" : 1 }, "indexBounds" : { "state" : [ "["CO", "CO"]" ], "city" : [ "[MinKey, MaxKey]" ], "pop" : [ "[MinKey, MaxKey]" ] "executionStats" : { "nReturned" : 416, "executionTimeMillis" : 1, "totalKeysExamined" : 416, "totalDocsExamined" : 416, "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "state" : 1, "pop" : 1 }, "indexBounds" : { "state" : [ "["CO", "CO"]" ], "pop" : [ "[MinKey, MaxKey]" ] "rejectedPlans" : [ "stage" : "SORT", "sortPattern" : { "pop" : 1 }, "inputStage" : {
  • 27. 27 Review the indexes we have so far > db.zips.getIndexes() _id db.zips.createIndex( { "state" : 1 , "pop" : 1 } ) db.zips.createIndex( { "state" : 1 , "city" : 1 , "pop" : 1 } )
  • 28. 28 Query 7: OR topped query db.zips.find( { "$or" : [ { "state" : "UT" }, { "pop" : 2 } ] } ) "winningPlan" : { "inputStage" : { "stage" : "COLLSCAN", "filter" : { "$or" : [ "pop" : { "$eq" : 2 } "state" : { "$eq" : "UT" } "rejectedPlans" : [ ] "executionStats" : { "nReturned" : 215, "executionTimeMillis" : 22, "totalKeysExamined" : 0, "totalDocsExamined" : 29470, SELECT * FROM t1 WHERE order_date = TODAY OR ship_weight < 10;
  • 29. 29 Query 7: solution "stage" : "IXSCAN", "keyPattern" : { "pop" : 1 }, "indexBounds" : { "pop" : [ "[2.0, 2.0]" ] "rejectedPlans" : [ ] "executionStats" : { "nReturned" : 215, "executionTimeMillis" : 2, "totalKeysExamined" : 215, "totalDocsExamined" : 215, db.zips.createIndex( { "pop" : 1 } ) "winningPlan" : { "inputStage" : { "stage" : "FETCH", "inputStage" : { "stage" : "OR", "inputStages" : [ "stage" : "IXSCAN", "keyPattern" : { "state" : 1, "pop" : 1 }, "indexBounds" : { "state" : [ "["UT", "UT"]" ], "pop" : [ "[MinKey, MaxKey]" ]
  • 30. 30 Topics not previously covered • How to tell which indexes are being used • How to tell if an index is unique • Smoke tests • Covered queries • MongoDB index types • When do winning query plans get evacuated • Index intersection • Building indexes (online/offline) • Sharding and queries, query plans • Capped collections, tailable cursors • Optimizer hints • Memory limits • Query rewrite (aggregation pipeline optimization) • Which server • Which logfile • (Server profiling Level) • Which queries • mtools • Text processing
  • 31. 31 Resources: • The parent to this preso, https://github.com/farrell0/MongoDB-Developers-Notebook • An excellent query primer (110 pages) http://www.redbooks.ibm.com/abstracts/sg247138.html?Open (Chapters 10 and 11.) • University.MongoDB.com • https://www.mongodb.com/consulting-test#performance_evaluation • zips.json http://media.mongodb.org/zips.json • Call Dave Lutz, at home, .. .. On Sunday (early) (512)555/1212
  • 33. How to tell which indexes are being used db.zips.aggregate( [ { "$indexStats" : {} } ] ).pretty() { "name" : "pop_1", "key" : { "pop" : 1 }, "host" : "rhhost00.grid:27017", "accesses" : { "ops" : NumberLong(15), "since" : ISODate("2016-04-19T07:13:44.546Z") } } { "name" : "state_1_city_1_pop_1", "key" : { "state" : 1, "city" : 1, "pop" : 1 }, "host" : "rhhost00.grid:27017", "accesses" : { "ops" : NumberLong(0), "since" : ISODate("2016-04-19T06:49:11.765Z") } }
  • 34. How to tell if an index is unique db.t1.createIndex( { "k1" : 1 }, { "unique" : true }) { "createdCollectionAutomatically" : true, "numIndexesBefore" : 1, "numIndexesAfter" : 2, "ok" : 1 } > db.t1.getIndexes() [ { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "test_db.t1“ }, { "v" : 1, "unique" : true, "key" : { "k1" : 1 }, "name" : "k1_1", "ns" : "test_db.t1“ } ]
  • 35. Smoke tests Every night, gather a set of statistics about your hard disk fullness, and about the performance of a set of queries that are strategic to the application. For queries we wish to record- • The number of documents returned • The winning query plan • Elapsed time, disk and memory consumed • Other
  • 36. Covered queries > db.zips.find( { "pop" : { "$lt" : 200 } }, { "_id" : 0, "pop" : 1 } ).sort( { "pop" : -1 } ).explain() "winningPlan" : { "stage" : "PROJECTION", "transformBy" : { "_id" : 0, "pop" : 1 }, "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "pop" : 1 }, "indexBounds" : { "pop" : [ "(200.0, -inf.0]" ] "rejectedPlans" : [ ] }
  • 37. When does the winning plan get evacuated In short, the cached query plan is re-evaluated if: • The collection receives 1000 or more writes • An index is added or dropped • A reindex operation is performed • mongod is restarted • You run a query with explain
  • 38. Index intersection db.zips.find( { "$or" : [ { "state" : "UT" }, { "pop" : 2 } ] } ) db.zips.find( { "city" : "EAST TROY", "zip" : 53120 } )
  • 39. Building indexes db.zips.createIndex( { “zip” : 1 }, { “background” : true } )
  • 40. Capped collections db.createCollection("my_collection", { capped : true, size : 5242880, max : 5000 } ) from pymongo import Connection import time db = Connection().my_db coll = db.my_collection cursor = coll.find(tailable=True) while cursor.alive: try: doc = cursor.next() print doc except StopIteration: time.sleep(1)
  • 41. Memory limits: 32 MB, 100 MB "executionStages" : { "stage" : "SORT", "nReturned" : 1, "executionTimeMillisEstimate" : 60, … "sortPattern" : { "City" : 1 }, "memUsage" : 120, "memLimit" : 33554432, db.zips.aggregate([ { "$group" : { "_id" : "$state", // "totalPop" : { "$sum" : "$pop" }, "cityCount" : { "$sum" : 1 } } } , { "$sort" : { "_id" : 1 } } ], { "allowDiskUse" : true } )
  • 43. 43 But first: Y/N I have more than 24 months experience with SQL Y/N I have more than 6 months experience with MongoDB Y/N I have dropped a MongoDB explain plan, understood it, made changes, and was happy Y/N Puppies scare me
  • 44. 44 Two more examples: Queries 8 and 9 find() aggregate() • optimizer hints • $lookup()
  • 45. 45 Query 8: automatic query rewrite > db.zips.aggregate( ... [ ... { "$sort" : ... { "state" : 1 } ... }, ... { ... "$match" : ... { "state" : { "$gt" : "M" } } ... } ... ], ... { "explain" : true } )
  • 46. 46 Query 8: Explain plan "stages" : [ "$cursor" : { "sort" : { "state" : 1 }, "winningPlan" : { "stage" : "FETCH", "inputStage" : { "stage" : "IXSCAN", "indexName" : "state_1_city_1", "indexBounds" : { "state" : [ "("M", {})" ], "city" : [ "[MinKey, MaxKey]" ] "rejectedPlans" : [ ]
  • 47. 47 Query 9: Optimizer hints > db.zips.find( { "city" : "EAST TROY" }).hint( { "zip" : 1} ).explain("executionStats") "winningPlan" : { "stage" : "FETCH", "filter" : { "city" : { "$eq" : "EAST TROY" } }, "inputStage" : { "stage" : "IXSCAN", "keyPattern" : { "zip" : 1 }, "indexBounds" : { "zip" : [ "[MinKey, MaxKey]" ] } "rejectedPlans" : [ ] "executionStats" : { "nReturned" : 1, "executionTimeMillis" : 28, "totalKeysExamined" : 29470, "totalDocsExamined" : 29470,