2012-01-04 19 views
18

He leído el texto siguiente en un technical blog discutir las ventajas y desventajas de NoSQL¿Por qué NoSQL es mejor para "escalar" que RDBMS?

" Durante años, con el fin de mejorar el rendimiento en servidores de bases de datos, administradores de bases de datos han tenido que comprar servidores más grandes ya que la carga de base de datos aumenta (ampliación) en lugar de distribuir la base de datos en varios "hosts" a medida que aumenta la carga (ampliación). RDBMS normalmente no escala fácilmente, pero las bases de datos NoSQL más nuevas están realmente diseñadas para expandirse fácilmente para aprovechar los nuevos nodos y generalmente se diseñan teniendo en cuenta hardware básico de bajo costo. "

Me confundí sobre la escalabilidad de RDBMS y NoSQL.

Mi confusión son:

  1. Por qué RDBMS son menos capaces de escalar? Y la razón de comprar servidores más grandes en lugar de comprar los más baratos.
  2. ¿Por qué NoSQL es más capaz de escalar?

Respuesta

24

RDBMS tienen ACID (http://en.wikipedia.org/wiki/ACID) y admite transacciones. Escalar "hacia afuera" con RDBMS es más difícil de implementar debido a estos conceptos.

Las soluciones No SQL suelen ofrecer una atomicidad récord, pero no pueden garantizar que una serie de operaciones tenga éxito (transacción).

Se reduce a: para mantener la integridad de los datos y las transacciones de soporte, un RDBMS de múltiples servidores necesitaría un canal de comunicación rápido para sincronizar todas las posibles transacciones y escrituras, mientras se evita/maneja el interbloqueo.

Es por eso que solo suele ver 1 maestro (escritor) y varios esclavos (lectores).

+1

RavenDB [admite transacciones] (http://ravendb.net/documentation/docs-api-transactions), aunque no en el sentido tradicional. – vcsjones

+0

Gracias, tiene sentido para mí. ¿Puedo preguntar si la falta de soporte de la transacción es una desventaja de NoSQL? ¿Y hay algún caso en que el soporte de la transacción no sea tan importante o poco útil para que esta falta de soporte no sea una desventaja? – xiaohan2012

+4

Sería una desventaja si lo necesitaras :(NoSql versus sql es una alternativa de escalabilidad, versus facilidad de administración de transacciones. Entonces, si dices que necesito transacciones e ir a sql, la escalabilidad se vuelve más difícil, si vas a nosql y luego quiere un soporte intensivo para las transacciones, la vida va a ser tuff –

6

Los RDBMS típicos ofrecen garantías sólidas sobre la consistencia. Esto requiere, en cierta medida, la comunicación entre nodos para cada transacción. Esto limita la capacidad de escalar, porque más nodos significa más comunicación

Los sistemas NoSql hacen intercambios diferentes. Por ejemplo, no garantizan que una segunda sesión vea inmediatamente los datos comprometidos por una primera sesión. De este modo, se desacopla la transacción de almacenar algunos datos del proceso de hacer que esos datos estén disponibles para cada usuario. Google "finalmente consistente". Entonces, una transacción única no necesita esperar ninguna (o mucho menos) comunicación entre nodos. Por lo tanto, pueden utilizar una gran cantidad de nodos mucho más fácilmente.

+1

Tales intercambios diferentes también pueden configurarse en sistemas RDBMS, pero no mucha gente lo sabe. Consulte: http://tqdev.com/2016-trading-durability-for-performance-without-nosql – mevdschee

15

Así que he estado tratando de averiguar el verdadero resultado final cuando se trata de NoSQL vs RDBMS yo mismo, y siempre termino con una respuesta que no acaba de cortarlo. En mi búsqueda, existen realmente 2 diferencias principales entre NoSQL y SQL, y solo 1 es una verdadera ventaja.

  1. ÁCIDO BASE vs - NoSQL normalmente deja fuera algunas de las características ACID de SQL, una especie de 'trampa' su camino a un mayor rendimiento al dejar esta capa de abstracción para el programador. Esto ya ha sido cubierto por carteles anteriores.

  2. Escala horizontal - La ventaja real de NoSQL es la escala horizontal, también conocida como fragmentación.Teniendo en cuenta que los 'documentos' de NoSQL son una especie de objeto 'autónomo', los objetos pueden estar en diferentes servidores sin preocuparse por unir filas de varios servidores, como es el caso con el modelo relacional.

Digamos que queremos devolver un objeto como éste:

post { 
    id: 1 
    title: 'My post' 
    content: 'The content' 
    comments: { 
     comment: { 
     id: 1 
     } 
     comment: { 
     id: 2 
     } 
     ... 

    views: { 
     view: { 
     user: 1 
     } 
     view: { 
     user: 2 
     } 
     ... 
    } 
} 

En NoSQL, básicamente se almacena ese objeto como es, y por lo tanto puede residir en un único servidor como una especie de auto objeto contenido, sin necesidad de unirse a los datos de otras tablas que podrían residir en otros servidores de bases de datos.

Sin embargo, con DB relacionales, la publicación debería unirse a los comentarios de la tabla comments, así como a las vistas de la tabla views. Esto no sería un problema en SQL ~ UNTIL ~ el DB está dividido en fragmentos, en cuyo caso 'comment 1' podría estar en un servidor de bases de datos, mientras que 'comment 2' aún en otro servidor de bases de datos. Esto hace que sea mucho más difícil crear el mismo objeto en un RDBMS que se ha escalado horizontalmente que en un DB NoSQL.

¿Algún experto en DB confirmará o sostendrá estos puntos?

+1

¿Qué sucede si hay una sola tabla para almacenar datos de publicaciones, incluidos comentarios y vistas en RDBMS? – Anand

+1

Sí, desnormalizar la base de datos es una solución posible para los problemas de rendimiento de la combinación, obviamente a costa de cualquier desnormalización de datos (redundancia, costos de actualización, tamaño, etc.). Lo que, por cierto, es la idea de un hoyo de soluciones no SQL orientadas a agregados como clave-valor, columna orientada y documento. – jsign

-1

Para un NO SQL, 1.Todo el elemento secundario relacionado con una colección está en el mismo lugar y en el mismo servidor y no hay ninguna operación de combinación para buscar datos de otro servidor.

2. No hay esquema, por lo que no se necesitan bloqueos en ningún servidor y el manejo de las transacciones se deja a los clientes.

Lo anterior 2 ahorra una gran sobrecarga de escala en NO-SQL.

Cuestiones relacionadas