SlideShare una empresa de Scribd logo
1 de 23
¿Cómo funciona la
replicación en
MongoDB?
Gonzalo Ortiz Jaureguizar
Software Engineer at 8Kdata
@gortizja
Acerca de 8Kdata
Investigación y desarrollo en bases de datos
Desarrolladores de ToroDB.
Una base de datos NoSQL sobre SQL.
Compatible a nivel de protocolo con MongoDB
Disponible con licencia AGPLv3 en Github
http://www.8kdata.com/torodb/
Conceptos y
definiciones
Replicación
Mantener la misma información en múltiples nodos
Single-master vs Multi-master
Nodo
Proceso que participa en la replicación. En MongoDB los nodos son
procesos Mongod corriendo en la misma o distintas máquinas.
Replica Set
Conjunto de nodos que participan en la replicación
Conceptos y definiciones
Más conceptos y definiciones
Consistencia (Consistency):
Que cada nodo vea la misma información en cada instante
Consistencia eventual
➢ Los nodos no ven la misma información durante una pequeña
ventana de tiempo.
Disponibilidad (Availability):
Cada petición tiene una respuesta indicando si ha sido fructuosa.
Tolerancia a particiones (Partition tolerance):
Teorema CAP
“Es imposible en un sistema
distribuido garantizar, a la vez,
consistencia, disponibilidad y
tolerancia a particiones”
Ejemplos:
C&A: RBDMs
C&P: MongoDB*
A&P: DynamoDB
¿Por qué replicar los datos?
Rendimiento en lectura.
Al estar los datos en varios nodos, pueden distribuirse las lecturas
entre ellos.
Especialmente importante en datos distribuidos mundialmente.
Tolerancia a particiones de red.
Tolerancia a pérdida de datos por fallo de nodos.
Si, por ejemplo, falla el disco duro de un nodo, los datos siguen estando
en los demás.
Nodos para tareas específicas (reportes, backups…).
Por ejemplo… ¡ToroDB!
Replicación en
MongoDB
Varios nodos forman un replica set.
Cada nodo conoce las direcciones de los
demás.
Cada nodo tiene un estado/rol. Los
principales son primario y secundario.
Cuando todo va
bien
Las escrituras del cliente se aplican
siempre en el nodo primario.
El nodo primario almacena los cambios en
su oplog.
Los nodos secundarios leen de manera
constante del oplog, aplicando los
cambios que encuentran.
Cuando todo va
bien
Las escrituras del cliente se aplican
siempre en el nodo primario.
El nodo primario almacena los cambios en
su oplog.
Los nodos secundarios leen de manera
constante del oplog, aplicando los
cambios que encuentran.
Se puede leer de los secundarios, pero es
una lectura potencialmente inconsistente
debido al retardo de replicación.
Canales de
comunicación
Canal de datos
Cada nodo secundario
escoge un nodo del cual
replicar los datos
Canal de feedback
Cada nodo secundario
informa de su progreso al
nodo del cual replica
Heartbeat
Cada dos segundos, cada
Cuando las cosas
van menos bien
Cuando alguno de los nodos secundarios
no reciben noticias del maestro en 10 segs,
comienzan una votación para promocionar
a primario.
Los nodos pueden votar favorable o
desfavorablemente (por ejemplo, si el
candidato va más retrasado o si el votante
considera que el primario está sano).
Si el candidato obtiene el voto favorable de
la mayoría, es promocionado a maestro.
Todo bien...
¿Todo controlado?
Todo bien...
¿Todo controlado?
Cuando las cosas
van aún peor:
Rollbacks
Los rollbacks ocurren cuando:
1. El nodo primario (amarillo)
acepta peticiones sin replicarlas
a la mayoría
2. El nodo primario se cae
3. Un nodo secundario promociona
a primario (rosa)
4. El nuevo primario acepta
escrituras
5. El antiguo primario vuelve a ser
Cuando las cosas
van aún peor:
Rollbacks
Un rollback implica perder escrituras
que se suponían guardadas.
Para evitar rollbacks es necesario
asegurarse que cada escritura ha sido
replicada a la mayoría de los nodos
antes de confirmarla al cliente.
Para ello el cliente debe usar la opción
w: majority*.
* Esto es especialmente importante en
MongoDB 3.2 (ticket SERVER-18453)
En MongoDB Todas las acciones
ejecutadas por clientes tienen un tiempo
máximo de ejecución.
Cuando se hace una escritura con w:
majority se ha de esperar a que la mayoría
de los nodos confirmen que han replicado
el cambio.
Si la confirmación llega a la vez que el
timeout de la ejecución, el cliente puede
ver que la operación ha fallado cuando, en
realidad, se ha escrito.*
*Probado en 2.4.3
Cuando las cosas
van aún peor:
Falsos negativos
Cuando todo se
complica: Dirty
and stale reads
Las lecturas sucias y rancias ocurren
cuando se lee de un nodo que se cree
primario pero que no lo es.
Dirty read
Leer datos que luego sufrirán
un rollback.
Stale read:
Leer datos que no están
actualizados, pues han
sido modificados en el
verdadero primario.
Cuando todo se
complica: Dirty
and stale reads
Leer datos incorrectos puede suponer
inconsistencias difíciles de detectar en la
capa de aplicación.
Estas inconsistencias ocurren incluso
cuando se escribe con w: majority.
Las lecturas sucias (dirty reads) pueden
evitarse modificando las lecturas con
level: majority*.
Las lecturas rancias (stale reads) no
pueden evitarse (AFAIK)
* Solo si todos los nodos son MongoDB 3.2
Conclusiones
MongoDB puede facilitar
enormemente el desarrollo de
aplicaciones.
Permite alcanzar un gran
rendimiento si se relajan las
condiciones de persistencia y
coherencia.
Es fácil relajar las relajar estas
condiciones inconscientemente.
Incluso forzando las condiciones
más restrictivas, puede producir
incoherencias
Conclusiones
MongoDB puede facilitar
enormemente el desarrollo de
aplicaciones.
Permite alcanzar un gran
rendimiento si se relajan las
condiciones de persistencia y
coherencia.
Es fácil relajar las relajar estas
condiciones inconscientemente.
Incluso forzando las condiciones
más restrictivas, puede producir
incoherencias
Agradecimientos a...
MongoDB Inc
Por su software
¡Por su documentación!
➢ De las cuales se han usado varios diagramas.
Especialmente a Spencer T Brody.
➢ Cuya charla en MongoDB World 2016 inspira esta.
Kyle Kingsbury, o Aphyr
¿Cómo funciona la replicación en mongo db?

Más contenido relacionado

La actualidad más candente

Diferencias entre base de datos relacional y no relacional
Diferencias entre base de datos relacional y no relacionalDiferencias entre base de datos relacional y no relacional
Diferencias entre base de datos relacional y no relacionalUPCI
 
Deep Dive into Cassandra
Deep Dive into CassandraDeep Dive into Cassandra
Deep Dive into CassandraBrent Theisen
 
PostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondPostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondChris Travers
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to CassandraGokhan Atil
 
Elementos esenciales de una arquitectura orientada a servicios
Elementos esenciales de una arquitectura orientada a serviciosElementos esenciales de una arquitectura orientada a servicios
Elementos esenciales de una arquitectura orientada a servicioswachu wachu pi
 
Memoria Estatica
Memoria EstaticaMemoria Estatica
Memoria EstaticaJ M
 
Elasticsearch for beginners
Elasticsearch for beginnersElasticsearch for beginners
Elasticsearch for beginnersNeil Baker
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & FeaturesDataStax Academy
 
Concurrencia bases datos 2
Concurrencia bases datos 2Concurrencia bases datos 2
Concurrencia bases datos 2Velmuz Buzz
 
Fuzzy Matching on Apache Spark with Jennifer Shin
Fuzzy Matching on Apache Spark with Jennifer ShinFuzzy Matching on Apache Spark with Jennifer Shin
Fuzzy Matching on Apache Spark with Jennifer ShinDatabricks
 
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)Amy W. Tang
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HAharoonm
 
Designing Structured Streaming Pipelines—How to Architect Things Right
Designing Structured Streaming Pipelines—How to Architect Things RightDesigning Structured Streaming Pipelines—How to Architect Things Right
Designing Structured Streaming Pipelines—How to Architect Things RightDatabricks
 

La actualidad más candente (20)

Diferencias entre base de datos relacional y no relacional
Diferencias entre base de datos relacional y no relacionalDiferencias entre base de datos relacional y no relacional
Diferencias entre base de datos relacional y no relacional
 
Deep Dive into Cassandra
Deep Dive into CassandraDeep Dive into Cassandra
Deep Dive into Cassandra
 
DB1 Unidad 5: SQL Avanzado
DB1 Unidad 5: SQL AvanzadoDB1 Unidad 5: SQL Avanzado
DB1 Unidad 5: SQL Avanzado
 
PostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and BeyondPostgreSQL at 20TB and Beyond
PostgreSQL at 20TB and Beyond
 
Introduction to Cassandra
Introduction to CassandraIntroduction to Cassandra
Introduction to Cassandra
 
Elasticsearch
ElasticsearchElasticsearch
Elasticsearch
 
Elementos esenciales de una arquitectura orientada a servicios
Elementos esenciales de una arquitectura orientada a serviciosElementos esenciales de una arquitectura orientada a servicios
Elementos esenciales de una arquitectura orientada a servicios
 
Memoria Estatica
Memoria EstaticaMemoria Estatica
Memoria Estatica
 
Transacciones en SQL SERVER
Transacciones en SQL SERVERTransacciones en SQL SERVER
Transacciones en SQL SERVER
 
Elasticsearch for beginners
Elasticsearch for beginnersElasticsearch for beginners
Elasticsearch for beginners
 
MyRocks Deep Dive
MyRocks Deep DiveMyRocks Deep Dive
MyRocks Deep Dive
 
Cassandra Introduction & Features
Cassandra Introduction & FeaturesCassandra Introduction & Features
Cassandra Introduction & Features
 
Algoritmos
AlgoritmosAlgoritmos
Algoritmos
 
Concurrencia bases datos 2
Concurrencia bases datos 2Concurrencia bases datos 2
Concurrencia bases datos 2
 
Fuzzy Matching on Apache Spark with Jennifer Shin
Fuzzy Matching on Apache Spark with Jennifer ShinFuzzy Matching on Apache Spark with Jennifer Shin
Fuzzy Matching on Apache Spark with Jennifer Shin
 
Transaccion
TransaccionTransaccion
Transaccion
 
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
Espresso: LinkedIn's Distributed Data Serving Platform (Paper)
 
PostgreSQL HA
PostgreSQL   HAPostgreSQL   HA
PostgreSQL HA
 
Designing Structured Streaming Pipelines—How to Architect Things Right
Designing Structured Streaming Pipelines—How to Architect Things RightDesigning Structured Streaming Pipelines—How to Architect Things Right
Designing Structured Streaming Pipelines—How to Architect Things Right
 
Couch db
Couch dbCouch db
Couch db
 

Destacado

How Bengaluru became the Biotech Capital of India
How Bengaluru became the Biotech Capital of IndiaHow Bengaluru became the Biotech Capital of India
How Bengaluru became the Biotech Capital of IndiaKiran Shaw
 
Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...
Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...
Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...Rondoniadinamica Jornal Eletrônico
 
Robot In OpenGL Using Line Function
Robot In OpenGL Using Line Function Robot In OpenGL Using Line Function
Robot In OpenGL Using Line Function Jannat Jamshed
 
Manifestaciones culturales
Manifestaciones culturalesManifestaciones culturales
Manifestaciones culturalesamjomach
 
Andrea conoce a Facundo
Andrea conoce a Facundo Andrea conoce a Facundo
Andrea conoce a Facundo josefinaconca
 
Presentación 15 16-terminal
Presentación 15 16-terminalPresentación 15 16-terminal
Presentación 15 16-terminalPaula Gómez
 
Junior Cert Geography Notes
Junior Cert Geography NotesJunior Cert Geography Notes
Junior Cert Geography NotesNoel Hogan
 
Manifestaciones culturales
Manifestaciones culturalesManifestaciones culturales
Manifestaciones culturalesVM Sahariel
 
Қазақтың ұлттық тағамдары және салт-дәстүрлері
Қазақтың ұлттық тағамдары және салт-дәстүрлеріҚазақтың ұлттық тағамдары және салт-дәстүрлері
Қазақтың ұлттық тағамдары және салт-дәстүрлеріBilim All
 

Destacado (12)

Resultado de educadoras
Resultado de educadorasResultado de educadoras
Resultado de educadoras
 
How Bengaluru became the Biotech Capital of India
How Bengaluru became the Biotech Capital of IndiaHow Bengaluru became the Biotech Capital of India
How Bengaluru became the Biotech Capital of India
 
Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...
Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...
Suspeitas levam TCE a suspender licitação avaliada em mais de R$ 21,3 milhões...
 
Robot In OpenGL Using Line Function
Robot In OpenGL Using Line Function Robot In OpenGL Using Line Function
Robot In OpenGL Using Line Function
 
Manifestaciones culturales
Manifestaciones culturalesManifestaciones culturales
Manifestaciones culturales
 
Autonomía
AutonomíaAutonomía
Autonomía
 
Generosidad
GenerosidadGenerosidad
Generosidad
 
Andrea conoce a Facundo
Andrea conoce a Facundo Andrea conoce a Facundo
Andrea conoce a Facundo
 
Presentación 15 16-terminal
Presentación 15 16-terminalPresentación 15 16-terminal
Presentación 15 16-terminal
 
Junior Cert Geography Notes
Junior Cert Geography NotesJunior Cert Geography Notes
Junior Cert Geography Notes
 
Manifestaciones culturales
Manifestaciones culturalesManifestaciones culturales
Manifestaciones culturales
 
Қазақтың ұлттық тағамдары және салт-дәстүрлері
Қазақтың ұлттық тағамдары және салт-дәстүрлеріҚазақтың ұлттық тағамдары және салт-дәстүрлері
Қазақтың ұлттық тағамдары және салт-дәстүрлері
 

Similar a ¿Cómo funciona la replicación en mongo db?

Replicacion Postgresql
Replicacion PostgresqlReplicacion Postgresql
Replicacion Postgresqljockbrera
 
Xombra diferencias entre_hub_vs._switch
Xombra diferencias entre_hub_vs._switchXombra diferencias entre_hub_vs._switch
Xombra diferencias entre_hub_vs._switchJohanna Moran
 
Protocolos y servicios informaticos
Protocolos y servicios informaticosProtocolos y servicios informaticos
Protocolos y servicios informaticosAlonso Almaraz
 
Bases de datos distribuidas
Bases de datos distribuidasBases de datos distribuidas
Bases de datos distribuidassandrap0
 
Niveles De Aislamiento
Niveles De AislamientoNiveles De Aislamiento
Niveles De Aislamientoguest1db220
 
Ethereum y los contratos inteligentes
Ethereum y los contratos inteligentesEthereum y los contratos inteligentes
Ethereum y los contratos inteligentesVic Perez
 
10 network applications
10 network applications10 network applications
10 network applicationscyberleon95
 
10 network applications
10 network applications10 network applications
10 network applicationsyimfer1
 
10 network applications
10 network applications10 network applications
10 network applicationsJuan Camilo
 
Multithreading a la manera de Delphi
Multithreading a la manera de DelphiMultithreading a la manera de Delphi
Multithreading a la manera de DelphiMayra Mendieta
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUSLuis Zurita
 

Similar a ¿Cómo funciona la replicación en mongo db? (20)

Bd nosql tecnicas III
Bd nosql tecnicas IIIBd nosql tecnicas III
Bd nosql tecnicas III
 
Replicacion Postgresql
Replicacion PostgresqlReplicacion Postgresql
Replicacion Postgresql
 
Modelo paso de mensajes
Modelo paso de mensajesModelo paso de mensajes
Modelo paso de mensajes
 
Xombra diferencias entre_hub_vs._switch
Xombra diferencias entre_hub_vs._switchXombra diferencias entre_hub_vs._switch
Xombra diferencias entre_hub_vs._switch
 
Redes u6
Redes u6Redes u6
Redes u6
 
Protocolos y servicios informaticos
Protocolos y servicios informaticosProtocolos y servicios informaticos
Protocolos y servicios informaticos
 
Bases de datos distribuidas
Bases de datos distribuidasBases de datos distribuidas
Bases de datos distribuidas
 
Gestion de transacciones
Gestion de transaccionesGestion de transacciones
Gestion de transacciones
 
Niveles De Aislamiento
Niveles De AislamientoNiveles De Aislamiento
Niveles De Aislamiento
 
Trabajo z
Trabajo zTrabajo z
Trabajo z
 
Uso de hilos
Uso de hilosUso de hilos
Uso de hilos
 
Ethereum y los contratos inteligentes
Ethereum y los contratos inteligentesEthereum y los contratos inteligentes
Ethereum y los contratos inteligentes
 
Atix23
Atix23Atix23
Atix23
 
Atix23
Atix23Atix23
Atix23
 
Auto negociacion
Auto negociacionAuto negociacion
Auto negociacion
 
10 network applications
10 network applications10 network applications
10 network applications
 
10 network applications
10 network applications10 network applications
10 network applications
 
10 network applications
10 network applications10 network applications
10 network applications
 
Multithreading a la manera de Delphi
Multithreading a la manera de DelphiMultithreading a la manera de Delphi
Multithreading a la manera de Delphi
 
PROTOCOLO MODBUS
PROTOCOLO MODBUSPROTOCOLO MODBUS
PROTOCOLO MODBUS
 

¿Cómo funciona la replicación en mongo db?

  • 1. ¿Cómo funciona la replicación en MongoDB? Gonzalo Ortiz Jaureguizar Software Engineer at 8Kdata @gortizja
  • 2. Acerca de 8Kdata Investigación y desarrollo en bases de datos Desarrolladores de ToroDB. Una base de datos NoSQL sobre SQL. Compatible a nivel de protocolo con MongoDB Disponible con licencia AGPLv3 en Github http://www.8kdata.com/torodb/
  • 4. Replicación Mantener la misma información en múltiples nodos Single-master vs Multi-master Nodo Proceso que participa en la replicación. En MongoDB los nodos son procesos Mongod corriendo en la misma o distintas máquinas. Replica Set Conjunto de nodos que participan en la replicación Conceptos y definiciones
  • 5. Más conceptos y definiciones Consistencia (Consistency): Que cada nodo vea la misma información en cada instante Consistencia eventual ➢ Los nodos no ven la misma información durante una pequeña ventana de tiempo. Disponibilidad (Availability): Cada petición tiene una respuesta indicando si ha sido fructuosa. Tolerancia a particiones (Partition tolerance):
  • 6. Teorema CAP “Es imposible en un sistema distribuido garantizar, a la vez, consistencia, disponibilidad y tolerancia a particiones” Ejemplos: C&A: RBDMs C&P: MongoDB* A&P: DynamoDB
  • 7. ¿Por qué replicar los datos? Rendimiento en lectura. Al estar los datos en varios nodos, pueden distribuirse las lecturas entre ellos. Especialmente importante en datos distribuidos mundialmente. Tolerancia a particiones de red. Tolerancia a pérdida de datos por fallo de nodos. Si, por ejemplo, falla el disco duro de un nodo, los datos siguen estando en los demás. Nodos para tareas específicas (reportes, backups…). Por ejemplo… ¡ToroDB!
  • 8. Replicación en MongoDB Varios nodos forman un replica set. Cada nodo conoce las direcciones de los demás. Cada nodo tiene un estado/rol. Los principales son primario y secundario.
  • 9. Cuando todo va bien Las escrituras del cliente se aplican siempre en el nodo primario. El nodo primario almacena los cambios en su oplog. Los nodos secundarios leen de manera constante del oplog, aplicando los cambios que encuentran.
  • 10. Cuando todo va bien Las escrituras del cliente se aplican siempre en el nodo primario. El nodo primario almacena los cambios en su oplog. Los nodos secundarios leen de manera constante del oplog, aplicando los cambios que encuentran. Se puede leer de los secundarios, pero es una lectura potencialmente inconsistente debido al retardo de replicación.
  • 11. Canales de comunicación Canal de datos Cada nodo secundario escoge un nodo del cual replicar los datos Canal de feedback Cada nodo secundario informa de su progreso al nodo del cual replica Heartbeat Cada dos segundos, cada
  • 12. Cuando las cosas van menos bien Cuando alguno de los nodos secundarios no reciben noticias del maestro en 10 segs, comienzan una votación para promocionar a primario. Los nodos pueden votar favorable o desfavorablemente (por ejemplo, si el candidato va más retrasado o si el votante considera que el primario está sano). Si el candidato obtiene el voto favorable de la mayoría, es promocionado a maestro.
  • 15. Cuando las cosas van aún peor: Rollbacks Los rollbacks ocurren cuando: 1. El nodo primario (amarillo) acepta peticiones sin replicarlas a la mayoría 2. El nodo primario se cae 3. Un nodo secundario promociona a primario (rosa) 4. El nuevo primario acepta escrituras 5. El antiguo primario vuelve a ser
  • 16. Cuando las cosas van aún peor: Rollbacks Un rollback implica perder escrituras que se suponían guardadas. Para evitar rollbacks es necesario asegurarse que cada escritura ha sido replicada a la mayoría de los nodos antes de confirmarla al cliente. Para ello el cliente debe usar la opción w: majority*. * Esto es especialmente importante en MongoDB 3.2 (ticket SERVER-18453)
  • 17. En MongoDB Todas las acciones ejecutadas por clientes tienen un tiempo máximo de ejecución. Cuando se hace una escritura con w: majority se ha de esperar a que la mayoría de los nodos confirmen que han replicado el cambio. Si la confirmación llega a la vez que el timeout de la ejecución, el cliente puede ver que la operación ha fallado cuando, en realidad, se ha escrito.* *Probado en 2.4.3 Cuando las cosas van aún peor: Falsos negativos
  • 18. Cuando todo se complica: Dirty and stale reads Las lecturas sucias y rancias ocurren cuando se lee de un nodo que se cree primario pero que no lo es. Dirty read Leer datos que luego sufrirán un rollback. Stale read: Leer datos que no están actualizados, pues han sido modificados en el verdadero primario.
  • 19. Cuando todo se complica: Dirty and stale reads Leer datos incorrectos puede suponer inconsistencias difíciles de detectar en la capa de aplicación. Estas inconsistencias ocurren incluso cuando se escribe con w: majority. Las lecturas sucias (dirty reads) pueden evitarse modificando las lecturas con level: majority*. Las lecturas rancias (stale reads) no pueden evitarse (AFAIK) * Solo si todos los nodos son MongoDB 3.2
  • 20. Conclusiones MongoDB puede facilitar enormemente el desarrollo de aplicaciones. Permite alcanzar un gran rendimiento si se relajan las condiciones de persistencia y coherencia. Es fácil relajar las relajar estas condiciones inconscientemente. Incluso forzando las condiciones más restrictivas, puede producir incoherencias
  • 21. Conclusiones MongoDB puede facilitar enormemente el desarrollo de aplicaciones. Permite alcanzar un gran rendimiento si se relajan las condiciones de persistencia y coherencia. Es fácil relajar las relajar estas condiciones inconscientemente. Incluso forzando las condiciones más restrictivas, puede producir incoherencias
  • 22. Agradecimientos a... MongoDB Inc Por su software ¡Por su documentación! ➢ De las cuales se han usado varios diagramas. Especialmente a Spencer T Brody. ➢ Cuya charla en MongoDB World 2016 inspira esta. Kyle Kingsbury, o Aphyr