sql >> Base de Datos >  >> NoSQL >> MongoDB

¿Alguna razón detallada y específica de por qué MongoDB es mucho más rápido que SQL DB?

Primero, comparemos manzanas con manzanas:Las lecturas y escrituras con MongoDB son como lecturas y escrituras únicas por clave principal en una tabla sin índices no agrupados en un RDBMS.

Entonces, comparemos exactamente eso:http://mysqlha.blogspot.de/2010/09/mysql-versus-mongodb-yet-another-silly.html

Y resulta que la diferencia de velocidad en una comparación justa de exactamente la misma operación primitiva no es grande. De hecho, MySQL es un poco más rápido. Yo diría que son equivalentes.

¿Por qué? Porque en realidad, ambos sistemas están haciendo cosas similares en este punto de referencia en particular. Devolver una sola fila, buscada por clave principal, en realidad no es mucho trabajo. Es una operación muy rápida. Sospecho que los gastos generales de comunicación entre procesos son una gran parte de esto.

Supongo que el código más ajustado en MySQL supera los gastos generales ligeramente menos sistemáticos de MongoDB (sin bloqueos lógicos y probablemente algunas otras cosas pequeñas).

Esto lleva a una conclusión interesante:Puede usar MySQL como una base de datos de documentos y obtener un rendimiento excelente.

Si el entrevistador dijera:"No nos importan los documentos ni los estilos, solo necesitamos una base de datos mucho más rápida, ¿crees que deberíamos usar MySQL o MongoDB?", ¿qué respondería?

Recomendaría ignorar el rendimiento por un momento y observar la fuerza relativa de los dos sistemas. Me vienen a la mente cosas como el escalado (hacia arriba) y la replicación para MongoDB. Para MySQL, hay muchas más características como consultas enriquecidas, modelos de concurrencia, mejores herramientas y madurez, y mucho más.

Básicamente, puede intercambiar funciones por rendimiento. ¿Estás dispuesto a hacer eso? Esa es una elección que no se puede hacer en general. Si opta por el rendimiento a cualquier costo, considere ajustar MySQL primero antes de agregar otra tecnología.

Esto es lo que sucede cuando un cliente recupera una sola fila/documento por clave principal. Apunto las diferencias entre ambos sistemas:

  1. El cliente construye un comando binario (igual)
  2. El cliente lo envía a través de TCP (igual)
  3. El servidor analiza el comando (igual)
  4. El servidor accede al plan de consultas desde la memoria caché (solo SQL, no MongoDB, no HandlerSocket)
  5. El servidor le pide al componente B-Tree que acceda a la fila (igual)
  6. El servidor toma un bloqueo físico de solo lectura en la ruta B-Tree que conduce a la fila (igual)
  7. El servidor realiza un bloqueo lógico en la fila (solo SQL, no MongoDB, no HandlerSocket)
  8. El servidor serializa la fila y la envía a través de TCP (igual)
  9. El cliente lo deserializa (lo mismo)

Solo hay dos pasos adicionales para los RDBMS basados ​​en SQL típicos. Es por eso que realmente no hay una diferencia.