Date post: | 27-Nov-2014 |
Category: |
Technology |
Upload: | codemotion |
View: | 661 times |
Download: | 5 times |
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Application Design
FOR MongoDB
Alessandro [email protected]
http://it.linkedin.com/in/alessandropalumbo/http://www.byte-code.com
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB
NoSql
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB
NoSql
OPEN-source
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB
NoSql
OPEN-source
Document-OrientedJSON-style documents
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB
from humongous “huge; enormous”
NoSql
OPEN-source
Document-OrientedJSON-style documents
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
JSON-style documents
{ "_id" : "6c85fa4c-fa64-44e2-89c9-e5eb7f306ed7", "code" : "CRS0001", "name" : "Test", "description" : "Test description", "active" : true, "scheduledDate" : { "from" : ISODate("2013-09-12T00:00:00.000Z"), "to" : ISODate("2013-10-31T00:00:00.000Z") }, "version" : NumberLong(1)}
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
don’t be relationaL
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
don’t be relationaL
no joins
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
don’t be relationaL
no joins
NO FULL transactions
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
don’t be relationaL
no joins
NO FULL transactions
no SCHEMA
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
don’t be relationaL
no joins
NO FULL transactions
no SCHEMA
WE CAN EMBED
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
don’t be relationaL
no joins
NO FULL transactions
no SCHEMA
WE CAN EMBED
DOCUMENT LEVELTRANSACTIONS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
don’t be relationaL
no joins
NO FULL transactions
no SCHEMA
WE CAN EMBED
IS IT REALLY AN ISSUE?
DOCUMENT LEVELTRANSACTIONS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
friendly fire(aka RTFM)
Write
Concern
READ
PREFERENCE
ATOMIC
DOCUMENT
OPERATIONS
AVOID
NATURAL
KEYS ASIDENTIFIERS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DESIGN
DESIGN
FOR
QUERYEMBEDDED
DATA
vsReferences
DBREFS
VS
MANUALREFERENCE
DYNAMIC
SCHEMA
VSstatic
languages
PURE DRIVER
VS
MAPPINGFRAMEWORKS
BE
CAREFUL
WITH DATES
SPLIT DATA
ON
MULTIPLECOLLECTIONS
friendly fire(aka RTFM)
Write
Concern
READ
PREFERENCE
ATOMIC
DOCUMENT
OPERATIONS
AVOID
NATURAL
KEYS ASIDENTIFIERS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DESIGN
DESIGN
FOR
QUERYEMBEDDED
DATA
vsReferences
DBREFS
VS
MANUALREFERENCE
DYNAMIC
SCHEMA
VSstatic
languages
PURE DRIVER
VS
MAPPINGFRAMEWORKS
BE
CAREFUL
WITH DATES
SPLIT DATA
ON
MULTIPLECOLLECTIONS
friendly fire(aka RTFM)
Write
Concern
READ
PREFERENCE
ATOMIC
DOCUMENT
OPERATIONS
AVOID
NATURAL
KEYS ASIDENTIFIERS
PERFORMANCE
PREALLOCATE
FIELDS?
be aware
of
the trees
PREPROCESS
HIGH
RESOLUTIONDATA
TUNING
UPDATES
ANDINSERTS
DOCUMENT
MOVING
SLOWSYOU
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
FRIENDLY FIRE
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
ATOMIC
DOCUMENT
OPERATIONS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
ATOMIC
DOCUMENT
OPERATIONS
OPERATIONS ON MULTIPLE DOCUMENTS ARE NOT ATOMIC
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
ATOMIC
DOCUMENT
OPERATIONS
OPERATIONS ON MULTIPLE DOCUMENTS ARE NOT ATOMIC
NO “ALL OR NOTHING”
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
ATOMIC
DOCUMENT
OPERATIONS
OPERATIONS ON MULTIPLE DOCUMENTS ARE NOT ATOMIC
NO “ALL OR NOTHING”
EMBEDding OR APPLIcaTION TRANSACTIONS CAN be used to handle the issue
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
ATOMIC
DOCUMENT
OPERATIONS
OPERATIONS ON MULTIPLE DOCUMENTS ARE NOT ATOMIC
NO “ALL OR NOTHING”
EMBEDding OR APPLIcaTION TRANSACTIONS CAN be used to handle the issue
RELATIONAL TRANSACTIONS ARE NOT TOTALLY SAFE
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“Describes the guarantee that
MongoDB provides when reporting on the success of a write
operation”
Write
Concern
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“Describes the guarantee that
MongoDB provides when reporting on the success of a write
operation”
Write
Concern
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“Describes the guarantee that
MongoDB provides when reporting on the success of a write
operation”
Write
Concern
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Errors Ignored
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“Describes the guarantee that
MongoDB provides when reporting on the success of a write
operation”
Write
Concern
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Errors Ignored Unacknowledged
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“Describes the guarantee that
MongoDB provides when reporting on the success of a write
operation”
Write
Concern
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Errors Ignored Unacknowledged
Acknowledged (*)
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“Describes the guarantee that
MongoDB provides when reporting on the success of a write
operation”
Write
Concern
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Errors Ignored Unacknowledged
Acknowledged (*) Journaled
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“Describes the guarantee that
MongoDB provides when reporting on the success of a write
operation”
Write
Concern
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Errors Ignored Unacknowledged
Acknowledged (*) Journaled
Replica Acknowledged> 1 , majority , custom using tags
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“IT describes how MongoDB clients
route read operations to members
of a replica set”
Read
Preference
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“IT describes how MongoDB clients
route read operations to members
of a replica set”
Read
Preference
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“IT describes how MongoDB clients
route read operations to members
of a replica set”
Read
Preference
primary (*)
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“IT describes how MongoDB clients
route read operations to members
of a replica set”
Read
Preference
primary (*) primary Preferred
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“IT describes how MongoDB clients
route read operations to members
of a replica set”
Read
Preference
primary (*) primary Preferred
secondary
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“IT describes how MongoDB clients
route read operations to members
of a replica set”
Read
Preference
primary (*) primary Preferred
secondary secondary PREFERRED
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
“IT describes how MongoDB clients
route read operations to members
of a replica set”
Read
Preference
primary (*)
nearest
primary Preferred
secondary secondary PREFERRED
IT IS SET BY THE CLIENT AND CAN BE SET FOR EACH OPERATION
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
All collections have an index on the id field that exists by default. If ID IS NOT PROVIDED the driver or the mongod will create an _id field with an ObjectID value.
AVOID
NATURAL
KEYS ASIDENTIFIERS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
All collections have an index on the id field that exists by default. If ID IS NOT PROVIDED the driver or the mongod will create an _id field with an ObjectID value.
AVOID
NATURAL
KEYS ASIDENTIFIERS
ADD AN UNIQUE INDEX ON THE NATURAL KEY, SOMETIMES THE APPLICATION REALM CAN EVOLVE IN AN UNEXPECTED WAY
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
All collections have an index on the id field that exists by default. If ID IS NOT PROVIDED the driver or the mongod will create an _id field with an ObjectID value.
AVOID
NATURAL
KEYS ASIDENTIFIERS
ADD AN UNIQUE INDEX ON THE NATURAL KEY, SOMETIMES THE APPLICATION REALM CAN EVOLVE IN AN UNEXPECTED WAY
REMEMBER THAT UNIQUE INDEXES FIELDS MUST BE PART OF THE SHARD KEY IF SHARDING IS ENABLED
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
DESIGN
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DOCUMENT DESIGN IS FUNCTIONAL TO THE QUERIES THAT WILL EXISTS IN THE APPLICATION
DESIGN
FOR
QUERY
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DOCUMENT DESIGN IS FUNCTIONAL TO THE QUERIES THAT WILL EXISTS IN THE APPLICATION
DESIGN
FOR
QUERY
REFERENCE OR EMBED DOCUMENTS,
“denormalized” is not always
a bad word
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DOCUMENT DESIGN IS FUNCTIONAL TO THE QUERIES THAT WILL EXISTS IN THE APPLICATION
DESIGN
FOR
QUERY
REFERENCE OR EMBED DOCUMENTS,
“denormalized” is not always
a bad word
your document design will affect what kind of OPERATIONS will be safe or not
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Embedded data models allow applications to store related pieces of information in the same database record
EMBEDDED
DATA
vsReferences
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Embedded data models allow applications to store related pieces of information in the same database record
EMBEDDED
DATA
vsReferences
USUALLY there is a “contains” relation
between the embedding and the embedded object
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Embedded data models allow applications to store related pieces of information in the same database record
EMBEDDED
DATA
vsReferences
The maximum BSON document size is 16 megabytes and embedding may lead to performance issues if not correctly used
USUALLY there is a “contains” relation
between the embedding and the embedded object
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Normalized data models describe relationships using references between documents
EMBEDDED
DATA
vsReferences
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Normalized data models describe relationships using references between documents
EMBEDDED
DATA
vsReferences
References provides more flexibility than embedding but remember that client-side applications will have to lookup for referenced objects with multiple queries
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Normalized data models describe relationships using references between documents
EMBEDDED
DATA
vsReferences
NO Referential integrity is supported, references could point to a not existing object
References provides more flexibility than embedding but remember that client-side applications will have to lookup for referenced objects with multiple queries
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DBRefs are a convention for representing a document, it will hold the collection name, the id, and optionally the db name
DBREFS
VS
MANUALREFERENCE
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DBRefs are a convention for representing a document, it will hold the collection name, the id, and optionally the db name
DBREFS
VS
MANUALREFERENCE
MANUAL REFERENCES are just fields that will hold the id of the related document, without the collection name or the db name
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
DBRefs are a convention for representing a document, it will hold the collection name, the id, and optionally the db name
DBREFS
VS
MANUALREFERENCE
MANUAL REFERENCES are just fields that will hold the id of the related document, without the collection name or the db name
MANUAL REFERENCES are suitable for most of the use cases
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
BE
CAREFUL
WITH DATES
ALWAYS Use bson date when is related to an instant of time or you will never be able to use operators on that fields
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
BSON Date is a 64-bit signed integer that represents the number of milliseconds since the Unix epoch (Jan 1, 1970), Negative values represent dates before 1970.The official BSON specification refers to the BSON Date type as the UTC datetime.
BE
CAREFUL
WITH DATES
ALWAYS Use bson date when is related to an instant of time or you will never be able to use operators on that fields
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
split data on multiple collections to easily partition your data (a.k.a. Multitenancy)
SPLIT DATA
ON
MULTIPLECOLLECTIONS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
split data on multiple collections to easily partition your data (a.k.a. Multitenancy)
SPLIT DATA
ON
MULTIPLECOLLECTIONS
use collections as namespaces for your data
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
split data on multiple collections to easily partition your data (a.k.a. Multitenancy)
SPLIT DATA
ON
MULTIPLECOLLECTIONS
use collections as namespaces for your data
remember once data is partioned it will be more hard to aggregate if needed
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
why use dynamic schema if we are not using a dynamic programming language?
DYNAMIC
SCHEMA
VSstatic
languages
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
why use dynamic schema if we are not using a dynamic programming language?
DYNAMIC
SCHEMA
VSstatic
languages
inheritance is not only a matter of hierarchy, it could be also a matter of composition
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
why use dynamic schema if we are not using a dynamic programming language?
DYNAMIC
SCHEMA
VSstatic
languages
inheritance is not only a matter of hierarchy, it could be also a matter of composition
composition is the key to introduce dynamic schema in a static programming language
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
using the mongo driver directly will give you great powers, but will force you to write a lot of boilerplate code
PURE DRIVER
VS
MAPPINGFRAMEWORKS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
using the mongo driver directly will give you great powers, but will force you to write a lot of boilerplate code
PURE DRIVER
VS
MAPPINGFRAMEWORKS
MAPPING FRAMEWORKS WILL HELP TO WRITE LESS CODE, but you will sacrifice the control on all the aspects of the persistence
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
using the mongo driver directly will give you great powers, but will force you to write a lot of boilerplate code
PURE DRIVER
VS
MAPPINGFRAMEWORKS
MAPPING FRAMEWORKS WILL HELP TO WRITE LESS CODE, but you will sacrifice the control on all the aspects of the persistence
why not take the most from both?
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
PERFORMANCE
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Single Field
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Single Field Compound
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Single Field Compound
Multikey
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Single Field Compound
Multikey Geospatial
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Single Field Compound
Multikey Geospatial
TEXT (BETA)
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Single Field Compound
Multikey Geospatial
TEXT (BETA) Hashed
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
Indexes in MongoDB are defined at the collection level and can be on any field or sub-field of the document
be aware
of
the trees
Indexes are created using a b-tree and can be of different types
Single Field Compound
Multikey Geospatial
TEXT (BETA) Hashed
THEY COULD BE UNIQUE and sparse
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MONGODB handle the space allocation of a RECORD considering also a PADDING FACTOR
DOCUMENT
MOVING
SLOWSYOU
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MONGODB handle the space allocation of a RECORD considering also a PADDING FACTOR
DOCUMENT
MOVING
SLOWSYOU
WHEN AN UPDATED DOCUMENT DOES NOT FIT IN THE RECORD SPACE IT WILL BE MOVED
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MONGODB handle the space allocation of a RECORD considering also a PADDING FACTOR
DOCUMENT
MOVING
SLOWSYOU
WHEN AN UPDATED DOCUMENT DOES NOT FIT IN THE RECORD SPACE IT WILL BE MOVED
DYNAMIC SCHEMA IS THE FIRST CAUSE OF DOCUMENT MOVING
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
FIELDS PREALLOCATION CAN FIX THE DOCUMENT MOVING ISSUES IN SOME USE CASES
PREALLOCATE
FIELDS?
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
FIELDS PREALLOCATION CAN FIX THE DOCUMENT MOVING ISSUES IN SOME USE CASES
PREALLOCATE
FIELDS?
Default values must be used to preallocate, this MUST BE HANDLEDin the application
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
FIELDS PREALLOCATION CAN FIX THE DOCUMENT MOVING ISSUES IN SOME USE CASES
PREALLOCATE
FIELDS?
Default values must be used to preallocate, this MUST BE HANDLEDin the application
NULL is not a default value :-) as it has its own type
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MONGODB let you store the maximum resolution of your data
PREPROCESS
HIGH
RESOLUTIONDATA
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MONGODB let you store the maximum resolution of your data
PREPROCESS
HIGH
RESOLUTIONDATA
MAP REDUCE and aggregation ARE okbut you could also preprocess and have aggregated data that you can use for your queries
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MONGODB let you store the maximum resolution of your data
PREPROCESS
HIGH
RESOLUTIONDATA
MAP REDUCE and aggregation ARE okbut you could also preprocess and have aggregated data that you can use for your queries
MONGODB rocks for business intelligence
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB stores BSON documents as a sequence of fields and values, not as aN hash table
TUNING
UPDATES
ANDINSERTS
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB stores BSON documents as a sequence of fields and values, not as aN hash table
TUNING
UPDATES
ANDINSERTS
WRITING THE FIRST FIELD OF A DOCUMENT (OR A NESTED DOCUMENT) is considerably faster than writing THE LAST
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Alessandro Palumbo - [email protected] - http://www.byte-code.com
MongoDB stores BSON documents as a sequence of fields and values, not as aN hash table
TUNING
UPDATES
ANDINSERTS
WRITING THE FIRST FIELD OF A DOCUMENT (OR A NESTED DOCUMENT) is considerably faster than writing THE LAST
Intra-Document Hierarchy could help to handle the issue
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Any questions?
Saturday, November 30,
Except where otherwise noted, this work is licensed under: http://creativecommons.org/licenses/by/3.0/
Any questions?
Saturday, November 30,