Alguien podría escribir un libro de 5000 páginas sobre este tema, pero haré lo mejor que pueda a un alto nivel.
Bases de datos SQL
Los divido en cuatro grupos básicos: tradicional, MPP, columnar y una tecnología emergente llamada NewSQL.
- ¿Cuál es el flujo de JavaScript y AngularJS?
- ¿Las API RESTful todavía se consideran RESTful si dependen del estado de la sesión del navegador y las cookies?
- ¿Son fáciles de aprender los marcos CSS / HTML una vez que conoces el núcleo HTML / CSS?
- ¿Has utilizado el paquete Laravel Entrust en producción? En caso afirmativo, ¿puede compartir sus ventajas y desventajas?
- ¿Qué problemas aún deben resolverse con el sitio web de YouTube?
Tradicional
Estas son las bases de datos habituales que hemos visto durante años. Algunos proveedores pueden incluir MySQL, PostgreSQL, MS SQL Server (producto), Sybase, Oracle Database, etc. Cumplen con los estándares SQL y proporcionan transacciones ACID completas. Es decir, puede realizar una gran cantidad de transformación de datos directamente en la plataforma y se garantiza que diferentes personas que vean los mismos datos verán los mismos valores. También son relacionales en que los datos en diferentes tablas generalmente se unen. Muy a menudo, estas bases de datos se ejecutarán en un solo nodo o en algunos nodos en una cuadrícula (algunas excepciones). Estas bases de datos se usan generalmente para aplicaciones comerciales que procesan transacciones de nivel atómico (granularidad más baja). También se utilizan al procesar y almacenar datos que implican algo de valor físico. Por ejemplo, los sistemas ERP y Supply Chain de su empresa utilizarán estas bases de datos para el almacenamiento de sus datos. También son bastante configurables para servir como buenas soluciones de almacenamiento de datos cuando se ajustan, configuran y modelan correctamente.
MPP (procesamiento masivo en paralelo)
En términos generales, ofrecen la mayoría de las mismas características que las bases de datos tradicionales, pero se escalan a cientos o miles de nodos. Los proveedores en esta área incluyen Oracle Exadata, Teradata, EMC Greenplum e IBM Netezza. Estos se usan comúnmente en grandes empresas como la columna vertebral de sus almacenes de datos. Algunos proveedores también ofrecen enfoques especializados para las bases de datos MPP. Por ejemplo, plataformas como Vertica Database, Actian Matrix y Sybase IQ, proporcionan almacenamiento orientado a columnas (ver más abajo) en una solución MPP. SAP HANA y Exasol son ejemplos de bases de datos MPP que operan principalmente en la memoria.
NewSQL
Nuevamente, muy similar a MPP y tradicional en que son compatibles con ACID y soportan estándares SQL, excepto que estas soluciones tienden a depender en gran medida o totalmente del almacenamiento de datos en memoria. También tienden a escalar horizontalmente. Esto es opuesto a las otras soluciones que utilizan principalmente el disco como mecanismo de almacenamiento. La desventaja aquí es que NewSQL tiende a almacenar menos datos ya que los discos pueden contener más datos que la RAM. Y en realidad, incluso las soluciones MPP tienden a usar una mezcla de disco magnético, estado sólido y memoria. Estos tienden a ser muy populares para las soluciones OLAP, ya que pueden hacer cambios de datos muy rápidamente en grandes conjuntos de datos. Ejemplos de NewSQL son Oracle Timesten y VoltDB. En algunos casos, los proveedores de bases de datos están combinando estas capacidades en su plataforma existente. Oracle Database 12c le permite “anclar” tablas a la memoria.
De columna
Básicamente, como suena, los datos se almacenan en columnas. Si piensa en cómo se almacenan los datos en una base de datos SQL tradicional, tiene una sola fila de datos con diferentes tipos de datos. Simplemente pensando en una tabla de usuario, puede tener una identificación, un nombre, apellido, información de dirección, datos demográficos, etc. Al almacenar estos datos en un disco, es difícil comprimirlos de manera consistente. Cuando los datos se almacenan en columnas en lugar de filas, utilizando el mismo ejemplo de tabla de usuario, todos los ID se almacenan juntos, todos los nombres se almacenan juntos, etc. Esto permite que la base de datos comprima datos en gran medida, ya que ahora tipos similares de datos ahora se almacenan juntos, resultando en menos lecturas físicas del disco cuando se consultan grandes volúmenes de registros.
La desventaja es que cuantas más columnas seleccione, más lenta será su consulta a medida que se tengan que leer más datos del disco. Esto contrasta con el SQL tradicional, donde agregar más columnas a una consulta de selección generalmente tiene un pequeño impacto en el rendimiento de la consulta. Tampoco son adecuados para casos de uso que implican una alta concurrencia de consultas, ya que una sola consulta utilizará una gran cantidad de recursos disponibles. También están diseñados para cargarse por lotes y las operaciones DML son muy lentas. Esto los hace muy inadecuados para cargas de trabajo de tipo OLTP. Ejemplos de bases de datos en columnas son MonetDB, Sybase IQ y Actian Vector. Además, la mayoría de los proveedores de MPP y otros proveedores de bases de datos proporcionan un mecanismo para la compresión en columna.
Almacenes de datos NoSQL
Hay tantos de estos que es difícil clasificarlos en general, pero trato de hacerlo describiendo 5 “tipos” principales: valor-clave, documento, gráfico, búsqueda elástica y series de tiempo. El denominador común de las bases de datos NoSQL es que todas están diseñadas para escalar horizontalmente a través de múltiples servidores utilizando una clave indexada y fragmentada gobernada por un nodo “puerta de enlace”. Casi todos los almacenes de datos NoSQL se basan en este concepto y luego aplican algún nivel de estructuración de datos, indexación o estrategia de almacenamiento para proporcionar ventajas específicas para algunos casos de uso.
Generalmente se usan cuando necesita poder leer y escribir una gran cantidad de datos al mismo tiempo. Esto es diferente de las bases de datos tradicionales en que generalmente solo puede ajustar aquellas para que sean buenas en una u otra (nuevamente, en términos muy amplios). También es importante tener en cuenta que NoSQL hace referencia al hecho de que estas bases de datos no utilizan SQL como lenguaje de consulta y no pretende ser un rechazo del SQL tradicional.
Debe tener en cuenta que sin el cumplimiento de SQL, la mayoría de estas bases de datos no pueden transformar los datos dentro de su motor. Debe extraerlo en otro lugar, escribir un código y luego colocar los datos transformados donde lo necesite. Casi todas las bases de datos NoSQL también carecen de conformidad con ACID y en su lugar dependen de la “coherencia eventual”. En un nivel alto, esto significa que diferentes personas que consultan exactamente los mismos datos pueden ver valores diferentes. Tampoco puede unir datos directamente en estas bases de datos.
Valor clave
Básicamente, proporcionan un método muy simple para almacenar y recuperar datos binarios. Para cada registro, usted define su clave y almacena un valor. Por lo general, las personas crean grandes objetos de programación, los serializan y luego los almacenan. Ejemplos de estos son Oracle (compañía) NoSQL & BerkeleyDB, Dynamo y Riak. También puse a Cassandra en este grupo, pero en realidad, proporciona más estructura dentro de cada valor que solo una tienda binaria abierta. Esto puede ser útil para almacenar algo como el estado de usuario de un videojuego, como su granja de Farmville (especialmente si ese estado es de muchos megabytes +)
Almacén de documentos
Estos son similares a los almacenes de valores clave, excepto que en lugar de que el valor sea un simple objeto binario, hay más estructura detrás de los datos. La mayoría de los datos se almacenan en formato JSON y algunos de ellos usan XML. Nuevamente, para cada clave, recuperará el valor del documento. Los documentos tienden a ser objetos muy grandes y generalmente se accede uno por uno. Ejemplos de esto son MongoDB, CouchDB y BaseX. Estos son útiles para almacenar datos con cierta estructura, como documentos legales o todo su perfil en línea para un sitio web.
Grafico
Algo diferentes a Key-Value y Doc Store, estas bases de datos están diseñadas para crear “gráficos” de datos. Esto básicamente significa que puede definir relaciones muy complejas entre diferentes puntos de datos. También puede atravesar fácilmente los datos definidos por las relaciones, incluso si está a muchos nodos de distancia. Piense en ello como una red social, donde tiene amigos, intereses, registros, me gusta, etc., y desea poder definir las relaciones entre estas cosas y luego consultarlo. Los ejemplos incluyen Neo4j y SPARQL.
Búsqueda elástica
Estos tipos de bases de datos NoSQL tienden a llamar mucho la atención con información errónea sobre cómo se pueden usar. En el sentido más básico, estos datos almacenan “palabras” de índice y proporcionan capacidades de búsqueda similares a escribir algo en Google. Son muy buenos para encontrar cosas basadas en una búsqueda clave en un conjunto de datos distribuido muy grande, una especie de “búsqueda empresarial”. La creación del índice tiene un costo inicial y no están diseñados para operaciones en grandes escaneos de datos (es decir, cargas de trabajo analíticas). Los ejemplos incluyen Apache Solr, Elasticsearch y Kibana.
Series de tiempo
Estos almacenes de datos se basan en el mismo principio básico de una clave indexada y fragmentada. La diferencia, sin embargo, es que una marca de tiempo siempre es parte de una clave concatenada. Los registros se agregan utilizando una operación de “inserción” solamente. El caso de uso principal para este tipo de plataforma es proporcionar un almacén de datos persistente para casos de uso de datos en los que deseará recuperar datos como tendencia. Por ejemplo, un sensor con un ID único que transmite datos constantemente. Los datos de cualquier ID único dado se almacenan en el mismo nodo y se ordenan según su marca de tiempo más reciente. Esto lo hace eficiente para un punto específico en el tiempo o una recuperación de rango de tiempo de datos para una ID específica. Muchos de estos almacenes de datos también proporcionan capacidades adicionales basadas en series de tiempo como resúmenes de resumen, agregaciones basadas en el tiempo y análisis de tendencias visuales. Ejemplos de estos incluyen Druid, InfluxDB y OpenTSDB. También podría hacer un fuerte argumento para poner HBase en esta categoría.
Doy la bienvenida a cualquiera que tenga una gran habilidad en cualquiera de estas tecnologías para sugerir modificaciones si no logro hacer algo bien.
Editar octubre de 2015: Cambié un poco las cosas y agregué algo de contenido para reflejar lo que veo actualmente en el mercado.