Download SQL_vs_NoSQL

Document related concepts
Transcript
HERRAMIENTAS SQL vs NO SQL
SQL (Structured Query Language) bases de datos han sido un mecanismo de
almacenamiento de datos principal durante más de cuatro décadas. Su uso estalló a
finales de 1990 con el auge de las aplicaciones web y las opciones de código abierto como
MySQL, PostgreSQL y SQLite.
Bases de datos NoSQL han existido desde la década de 1960, pero han sido recientemente
ganando tracción con opciones populares como MongoDB, CouchDB, Redis y Apache
Cassandra.
Los ejemplos se aplican a los sistemas de bases de datos MySQL populares SQL y NoSQL
MongoDB. Otras bases de datos SQL / NoSQL son similares, pero habrá pequeñas
diferencias en características y sintaxis.
SQL vs NoSQL
MITO: NoSQL reemplaza SQL
Eso sería como decir que los barcos fueron reemplazados por los coches porque son una
tecnología más nueva. SQL y NoSQL hacen lo mismo: almacenar datos. Ellos toman
diferentes enfoques, que pueden ayudar u obstaculizar su proyecto.
A pesar de sentirse más reciente y el acaparamiento de los titulares recientes, NoSQL no
es un reemplazo para SQL - es una alternativa.
Algunas bases de datos SQL están adoptando características NoSQL y viceversa. Las
opciones pueden llegar a ser cada vez más difusa, y las bases de datos híbridos NewSQL
podrían proporcionar algunas opciones interesantes en el futuro.
La elección de una combinación de tecnología inusual o una mezcla de SQL y NoSQL es
posible.
Tablas SQL vs Documentos NoSQL
Bases de datos SQL proporcionan una tienda de tablas de datos relacionados. Por
ejemplo, si ejecuta una tienda de libros en línea, la información del libro se puede agregar
a una tabla llamada Book:
ISBN
Título
autor
formato
precio
9780992461225
JavaScript: principiante a Ninja
Darren Jones
ebook
29,00
9780994182654
Jump Start Git
Shaumik Daityari
ebook
29,00
Cada fila es un registro libro diferente. El diseño es rígido; no puede utilizar la misma tabla
para almacenar información diferente o insertar una cadena en la que se espera que un
número.
Las bases de datos NoSQL guardan JSON como campo-valor en documentos pares, por
ejemplo:
{
ISBN: 9780992461225,
Título: "JavaScript: principiante a Ninja",
autor: "Darren Jones",
formato: "libro electrónico",
Precio: 29.00
}
Documentos similares pueden ser almacenados en una colección, que es análoga a una
tabla de SQL. Sin embargo, puede almacenar cualquier dato que sea en cualquier
documento; la base de datos NoSQL no se quejará. Por ejemplo:
{
ISBN: 9780992461225,
Título: "JavaScript: principiante a Ninja",
autor: "Darren Jones",
año: 2014,
formato: "libro electrónico",
Precio: 29.00,
Descripción: "Aprende JavaScript desde cero!",
nota: "5.5",
Comentado [
{Nombre: "Un lector", texto: ". El mejor libro que he leído JavaScript" },
{Nombre: "JS Experto", texto: "Recomendaciones para novatos y expertos
desarrolladores por igual." }
]
}
Las Tablas SQL crean una plantilla de datos estricta, por lo que es difícil cometer errores.
NoSQL es más flexible y perdonar, pero ser capaz de almacenar los datos en cualquier
lugar que puede conducir a problemas de consistencia.
SQL esquema vs NoSQL schemaless
En una base de datos SQL, es imposible agregar datos hasta que se definen las tablas y los
tipos de campo en lo que se conoce como un esquema. El esquema contiene
opcionalmente otra información, tal como -
claves principales - identificadores únicos, como el ISBN que se aplican a un solo registro
indices - campos comúnmente consultados en un índice para ayudar a la búsqueda rápida
relaciones - vínculos lógicos entre los campos de datos
funcionalidad como disparadores (triggers) y procedimientos almacenados.
El esquema de datos debe ser diseñado e implementado antes de cualquier lógica de
negocio puede ser desarrollado para manipular los datos. Es posible realizar las
actualizaciones más tarde, pero los grandes cambios pueden ser complicados.
En una base de datos NoSQL, los datos se pueden añadir en cualquier lugar, en cualquier
momento. No hay necesidad de especificar un diseño de documentos o incluso una
colección por adelantado. Por ejemplo, en MongoDB la siguiente declaración creará un
nuevo documento en una nueva colección de libros si no se ha creado con anterioridad:
db.book.insert (
ISBN: 9780994182654,
Título: "Jump Start Git",
autor: "Shaumik Daityari",
formato: "libro electrónico",
Precio: 29.00
);
(MongoDB añadirá automáticamente un valor _id única para cada documento en una
colección. Se pueden definir índices, o se pueden hacer más adelante si es necesario.)
Una base de datos NoSQL puede ser más adecuado para proyectos en los que los
requisitos iniciales de datos son difíciles de determinar. Dicho esto, no hay que confundir
la dificultad con la pereza: descuidar el diseño de un buen almacénamiento de datos al
comienzo del proyecto dará lugar a problemas más adelante.
SQL Normalización vs NoSQL Desnormalización
Suponemos que queremos añadir información del editor de nuestra base de datos librería.
Un único editor podría ofrecer más de un título así, en una base de datos SQL, creamos
una nueva tabla editorial:
Identificación
nombre
país
electrónico
SP001
SitePoint
Australia
[email protected]
A continuación, puede agregar un campo PUBLISHER_ID a nuestra mesa libro, que hace
referencia a los registros por publisher.id:
ISBN
título
autor
formato precio
PUBLISHER_ID
9780992461225 JavaScript: principiante Darren Jones
a Ninja
ebook
29,00
SP001
9780994182654 Jump Start Git
ebook
29,00
SP001
Shaumik Daityari
Esto reduce al mínimo la redundancia de datos; no estamos repitiendo la información del
editor de cada libro, sólo la referencia a la misma. Esta técnica se conoce como la
normalización, y tiene beneficios prácticos. Podemos actualizar un único editor sin
cambiar datos de Book.
Podemos utilizar técnicas de normalización en NoSQL. Los documentos en la colección de
libros:
{
ISBN: 9780992461225,
Título: "JavaScript: principiante a Ninja",
autor: "Darren Jones",
formato: "libro electrónico",
Precio: 29.00,
PUBLISHER_ID: "SP001"
}
Referencia a un documento en una colección editorial:
{
id: "SP001"
nombre: "SitePoint",
país: "Australia",
correo electrónico: "[email protected]"
}
Sin embargo, esto no siempre es práctico, por razones que se harán evidentes a
continuación. Podemos optar por desnormalizar nuestro documento y repetir información
del editor de cada libro:
{
ISBN: 9780992461225,
Título: "JavaScript: principiante a Ninja",
autor: "Darren Jones",
formato: "libro electrónico",
Precio: 29.00,
Editorial: {
nombre: "SitePoint",
país: "Australia",
correo electrónico: "[email protected]"
}
}
Esto lleva a las consultas más rápidas, pero la actualización de la información del editor en
varios registros será significativamente más lento.
SQL relacional JOIN vs NoSQL
Las consultas SQL ofrecen una poderosa cláusula JOIN. Podemos obtener datos
relacionados con varias tablas mediante una única sentencia SQL. Por ejemplo:
SELECT Book.title, book.author, publisher.name
FROM libro
LEFT JOIN book.publisher_id ON publisher.id;
Esto devuelve todos los títulos de los libros, los autores y los nombres de editores
asociados (presumiendo se ha establecido una).
NoSQL no tiene equivalente de JOIN, y esto puede impactar aquellos con experiencia SQL.
Si utilizamos colecciones normalizadas como se describió anteriormente, tendríamos que
obtener todos los documentos de libros, recuperar todos los documentos de editores
asociados, y vincular manualmente los dos en nuestra lógica del programa. Esta es una
razón de que desnormalización a menudo es esencial.
SQL vs NoSQL Integridad de los datos
La mayoría de las bases de datos SQL le permiten hacer cumplir las reglas de integridad de
datos mediante restricciones de claves foráneas (a menos que usted todavía está
utilizando el más viejo, motor de almacenamiento MyISAM desaparecida en MySQL).
Nuestra tienda de libros podría > asegurar que todos los libros tienen un código PUBLISHER_ID válido que coincide con
una entrada en la tabla editor, y
>No permitir a los editores ser eliminados si uno o más libros son asignados a ellos.
El esquema hace cumplir estas reglas para la base de datos a seguir. Es imposible para los
desarrolladores o usuarios añadir, editar o eliminar registros, lo que podría resultar en
datos no válidos o registros huérfanos.
Las mismas opciones de integridad de datos no están disponibles en las bases de datos
NoSQL; se puede almacenar lo que quieras independientemente de cualquier otro
documento. Lo ideal sería que un solo documento será la única fuente de toda la
información sobre el objeto.
SQL vs Transacciones NoSQL
En las bases de datos SQL, dos o más cambios se pueden ejecutar en una transacción - una
envoltura de todo o nada que garantiza el éxito o el fracaso. Por ejemplo, presume que
nuestra tienda libro contenía las tablas de pedidos y existencias.
Cuando se ordena un libro, le añadimos un registro a la tabla de orden y disminuye el
recuento de valores en la tabla de valores. Si ejecutamos esos dos actualizaciones de
forma individual, se podría tener éxito y el otro fallar - dejando así nuestras cifras fuera de
sincronía.
La colocación de las mismas actualizaciones en una transacción asegura ya sea tanto éxito
o que ambos fallen.
En una base de datos NoSQL, la modificación de un solo documento es atómica. En otras
palabras, si usted está actualizando tres valores dentro de un documento, o bien los tres
se están actualizando correctamente, o ,se mantienen sin cambios.
Sin embargo, no hay equivalente de transacciones para cambios a varios documentos. Hay
opciones en transacciones similares, pero, en el momento de la escritura, éstos deben ser
procesados manualmente en el código.
SQL vs Sintaxis CRUD NoSQL
Crear, leer,actualizar y eliminar datos, es la base de todos los sistemas de bases de datos.
En escencia:
SQL es un lenguaje declarativo ligero. Es engañosamente poderoso, y se ha convertido en
una norma internacional, aunque la mayoría de los sistemas implementan sutilmente
diferentes sintaxis.
Bases de datos NoSQL utilizan JavaScripty-looking consultas con argumentos JSON-like.
Operaciones básicas son simples, pero anidadas con JSON pueden llegar a ser cada vez
más complicada para más consultas complejas.
Una rápida comparación:
_____________________________________________________________________
insertar un nuevo registro de libros:
SQL
INSERT INTO libro ( 'ISBN','title','author' )
VALUES ( '9780992461256', 'Full Stack JavaScript', 'Colin Ihrig & Adam Bretz' );
NoSQL
db.book.insert ({
ISBN: "9780992461256",
Título: "Full Stack JavaScript",
autor: "Colin Ihrig & Adam Bretz"
});
_____________________________________________________________________
Actualizar un registro de libros:
SQL
UPDATE libro SET precio= 19,99 WHERE ISBN = '9780992461256';
NoSQL
db.book.update (
ISBN: '9780992461256'},
$ Set: {precio: 19,99}}
);
_____________________________________________________________________
Consulta devolver todos los títulos de los libros más de $ 10:
SQL
SELECT titulo FROM libro WHERE precio> 10;
NoSQL
db.book.find (
{Precio: {& gt ;: 10}},
{_id: 0, título: 1}
);
El segundo objeto JSON se conoce como proyección: establece que se devuelven los
campos (_id se devuelve por defecto, así que tiene que ser desarmado).
_____________________________________________________________________
Contar el número de libros SitePoint:
SQL
SELECT COUNT (1) FROM libro WHERE PUBLISHER_ID = 'SP001';
NoSQL
db.book.count ({
"publisher.name": "SitePoint"
});
Esto supone se utilizan documentos no normalizados.
_____________________________________________________________________
Devolver el número de tipos de formato de libro:
SQL
SELECT, COUNT (1) AS `total` FROM libro GROUP BY formato;
NoSQL
db.book.aggregate ([
{$ Grupo:
{
_id: "Formato de $",
Total: {$ suma: 1}
}
}
]);
Esto se conoce como la agregación: un nuevo conjunto de documentos se calcula a partir
de un conjunto original.
_____________________________________________________________________
Eliminar todos los libros SitePoint
SQL
DELETE FROM libro WHERE PUBLISHER_ID = 'SP001';
Alternativamente, es posible eliminar el registro editor y tener esta cascada de registros
de libros asociados si las claves externas se especifican adecuadamente.
NoSQL
db.book.remove ({
"publisher.name": "SitePoint"
});
SQL vs Rendimiento NoSQL
Tal vez la comparación más controvertida, NoSQL es citado regularmente como siendo
más rápido que SQL. Esto no es de sorprender; NoSQL le permite recuperar toda la
información sobre un elemento específico en una sola solicitud. No hay necesidad de
JOINs relacionada o consultas SQL complejas.
Dicho esto, su diseño y datos requeridos del proyecto tendrá mayor impacto. Una base de
datos SQL bien diseñado es casi seguro que de un mejor desempeño que un mal diseño
equivalente NoSQL y viceversa.
SQL vs NoSQL Escala
Como los datos crezcan , puede que le resulte necesario para distribuir la carga entre
varios servidores. Esto puede ser difícil para los sistemas basados en SQL. ¿Cómo se
asignan los datos relacionados? La agrupación es posiblemente la opción más simple;
varios servidores acceden al mismo almacén central, pero incluso esto tiene desafíos.
Modelos de datos más simples de NoSQL pueden hacer el proceso más fácil, y muchos han
sido construidos con la ampliación funcionalidad desde el principio. Eso es una
generalización, por lo que buscan asesoramiento de expertos si se encuentra con esta
situación.
SQL vs NoSQL prácticos
Por último, vamos a considerar los problemas de seguridad y del sistema. Las bases de
datos más populares NoSQL han existido unos pocos años; son más propensos a exhibir
problemas de que los productos de SQL más maduros. Se han reportado muchos
problemas, pero la mayoría se reducen a un solo tema: el conocimiento.
Los desarrolladores y administradores de sistemas tienen menos experiencia con los
sistemas de bases de datos más recientes, por lo que se cometen errores. Optar por
NoSQL porque se siente más fresco, o porque se quiere evitar el diseño del esquema,
inevitablemente, conduce a problemas más adelante.
SQL vs NoSQL Resumen
Bases de datos SQL y NoSQL hacen lo mismo de diferentes maneras. Es posible elegir una
opción y cambiar a otro más adelante, pero un poco de planificación puede ahorrar
tiempo y dinero.
Proyectos en SQL es ideal:
>requisitos de datos lógicos relacionados discretos que se pueden identificar por
adelantado
>La integridad de los datos es esencial
>basada en estándares de tecnología probada con buena experiencia del desarrollador y
apoyo.
Proyectos donde NoSQL es ideal:
>las necesidades de datos no relacionados, indeterminados o en evolución
>objetivos más simples o más flojas del proyecto, capaz de empezar a programar
inmediatamente
>La velocidad y escalabilidad es imprescindible.
En el caso de nuestra tienda de libros, una base de datos SQL parece la opción más
práctica - especialmente cuando introducimos instalaciones de comercio electrónico que
requieren soporte de transacciones robusto.
Bibliografia:
http://www.sitepoint.com/sql-vs-nosql-differences/
Para mas informacion:
https://www.digitalocean.com/community/tutorials/understanding-sql-and-nosqldatabases-and-different-database-models
http://www.campusmvp.es/recursos/post/Fundamentos-de-bases-de-datos-NoSQLMongoDB.aspx
https://www.mongodb.com/es