¿Qué son las bases de datos nosql?
1. CouchDB
Idioma: Erlang
Características: consistencia de base de datos, fácil de usar
Licencia: Apache
Protocolo: HTTP/REST
Replicación de datos bidireccional,
Procesamiento continuo o temporal,
Procesamiento con verificación de conflictos,
Por lo tanto , se utiliza la replicación maestro-maestro (consulte la Nota del editor 2)
MVCC: las operaciones de escritura no bloquean las operaciones de lectura
Se pueden guardar versiones anteriores de archivos
Diseño (confiable) solo contra fallas
Requiere compresión de datos de vez en cuando
Vista: mapeo/reducción incrustados
Vista formateada: visualización de lista
Admite la verificación de documentos del lado del servidor
Admite autenticación
Actualizaciones en tiempo real basadas en cambios
Admite el procesamiento de archivos adjuntos
Por lo tanto , CouchApps (aplicaciones js independientes)
requiere la biblioteca jQuery
Mejor escenario de aplicación: adecuado para pequeños cambios de datos, ejecución de consultas predefinidas y aplicaciones de estadísticas de datos. Adecuado para aplicaciones que requieren soporte de versión de datos.
Por ejemplo: CRM, sistema CMS. La replicación maestro-maestro es muy útil para implementaciones en múltiples sitios.
(Nota del editor 2: replicación maestro-maestro: es un método de sincronización de bases de datos que permite compartir datos entre un grupo de computadoras, y cualquier miembro del grupo puede compartir datos dentro del grupo. Actualizado )
2. Redis
Idioma: C/C++
Características: Extremadamente rápido
Licencia: BSD
Protocolo: similar a Telnet
Hay una base de datos en memoria compatible con el almacenamiento en el disco duro,
Pero desde la versión 2.0, los datos se pueden intercambiar al disco duro (nota, las versiones posteriores a la 2.4 no admiten esta función)
Replicación maestro-esclavo (consulte la Nota del editor 3)
Aunque se utilizan datos simples o tablas hash indexadas por valores clave, las complejas. También se admiten operaciones, como ZREVRANGEBYSCORE.
INCR & co (adecuado para calcular valores límite o datos estadísticos)
Admite conjuntos (también admite union/diff/inter)
Admite listas ( también admite Admite colas de bloqueo de operaciones emergentes)
Admite tablas hash (objetos con múltiples campos)
Admite conjuntos de clasificación (tablas de puntuación alta, adecuadas para consultas de rango)
p>
Redis admite transacciones
Admite la configuración de datos en datos caducados (similar al diseño de búfer rápido)
Pub/Sub permite a los usuarios implementar mecanismos de mensajes
Mejor escenario de aplicación: Adecuado para aplicaciones donde los datos cambian rápidamente y se puede cumplir con el tamaño de la base de datos (adecuado para la capacidad de la memoria).
Por ejemplo: precios de acciones, análisis de datos, recopilación de datos en tiempo real, comunicación en tiempo real.
(Nota del editor 3: Replicación maestro-esclavo: si solo un servidor maneja todas las solicitudes de replicación al mismo tiempo, esto se denomina
Replicación maestro-esclavo, que generalmente se usa cuando es necesario Proporcionar cluster de servidores de alta disponibilidad)
3. MongoDB
Lenguaje utilizado: C++
Características: Conserva algunas características amigables de SQL (consulta, índice).
Licencia: AGPL (Iniciador: Apache)
Protocolo: Personalizado, binario (BSON)
Replicación maestro/esclavo (admite recuperación automática de errores, use copia de conjuntos) )
Mecanismo de fragmentación incorporado
Admite consulta de expresiones de JavaScript
Puede ejecutar cualquier función de JavaScript en el lado del servidor
Mejor actualización soporte in situ que CouchDB
Usa mapeo de memoria a archivo para el almacenamiento de datos
Preocupación por el rendimiento sobre los requisitos de funcionalidad
Sugerencia Es mejor activar la función de diario (parámetro –diario)
En un sistema operativo de 32 bits, el tamaño de la base de datos está limitado a aproximadamente 2,5 Gb
Una base de datos vacía ocupa aproximadamente 192 Mb
Utilice GridFS para almacenar grandes datos o metadatos (no un sistema de archivos real)
Mejores escenarios de aplicación: adecuado para soporte de consultas dinámicas; es necesario utilizar índices en lugar de funciones de mapa/reducción; es necesario tener conocimientos; de bases de datos grandes Requisitos de rendimiento; aplicaciones que necesitan usar
CouchDB pero llenan la memoria porque los datos cambian con demasiada frecuencia.
Por ejemplo: originalmente planeaste usar MySQL o PostgreSQL, pero tus propias columnas predefinidas te disuadieron.
4. Riak
Idiomas utilizados: Erlang y C, y algo de Javascript
Características: Tolerante a fallos
Licencia: Apache
Protocolo: HTTP/REST o binario personalizado
Distribución y replicación ajustables (N, R, W)
Usa JavaScript o Erlang antes o después de la operación -verificación de operaciones y soporte de seguridad.
Use JavaScript o Erlang para Map/reduce
Conexión y recorrido de conexión: se puede usar como una base de datos gráfica
Índice: ingrese metadatos para búsqueda (versión 1.0 próximamente) Soporte)
Soporte de objetos de Big Data (Luwak)
Disponible en versiones "Open Source" y "Enterprise"
Búsqueda de texto completo, indexación , búsqueda a través de la consulta del servidor Riak (versión beta)
Admite replicación multisitio Masterless y monitoreo SNMP con licencia comercial
Mejor escenario de aplicación: adecuado para aquellos que desean utilizar un sistema similar a Cassandra Base de datos (similar a Dynamo) pero no puede manejarla
Situaciones de hinchazón y complejidad. Es adecuado para situaciones en las que planea realizar una replicación en varios sitios pero necesita la escalabilidad, disponibilidad y manejo de errores de un solo sitio.
Por ejemplo: recopilación de datos de ventas, sistema de control de fábrica; requisitos estrictos sobre el tiempo de inactividad se pueden utilizar como un servidor web fácil de actualizar.
5. Membase
Idiomas utilizados: Erlang y C
Características: Compatible con Memcache, pero también con capacidad de persistencia y soporte de clúster
Licencia: Apache 2.0
Protocolo: caché distribuida y extensiones
Muy rápido (más de 200 k/s), datos indexados por valor clave
Almacenamiento persistente en disco duro
Todos los nodos son únicos (replicación maestro-maestro)
Las unidades de caché similares al caché distribuido también son compatibles con la memoria
Escribir datos Reducir IO eliminando datos duplicados
Proporciona una muy buena interfaz web de administración de clústeres
Actualiza el software sin detener el servicio de base de datos
Admite grupo de conexiones y múltiples proxy de conexión para multiplexación
Mejor escenario de aplicación: adecuado para aplicaciones que requieren acceso a datos de baja latencia, soporte de alta concurrencia y alta disponibilidad
Por ejemplo: acceso a datos de baja latencia, como aplicaciones orientadas a publicidad, web altamente concurrente aplicaciones como juegos en línea (como Zynga)
6. Neo4j
Idioma utilizado: Java
Características: Base de datos de gráficos basada en relaciones
Licencia: GPL, algunas características AGPL/Licencia comercial
Protocolo: HTTP/REST (o integrado en Java)
Disponible para uso independiente o integrado en aplicaciones Java
Los nodos y bordes del gráfico pueden tener metadatos
Muy buena función de administración web incorporada
Se usa de muchas maneras Los algoritmos admiten la búsqueda de rutas
Usar valores clave y relaciones para la indexación
Optimizar para operaciones de lectura
Soportar transacciones (usando la API de Java)
Usar lenguaje transversal de gráficos Gremlin
Soporta scripts Groovy
Soporta copia de seguridad en línea, monitoreo avanzado y alta confiabilidad. Soporta licencia AGPL/comercial
Mejor escenario de aplicación: adecuado para gráficos y otros datos.
Esta es la diferencia más significativa entre Neo4j y otras bases de datos nosql
Por ejemplo: relaciones sociales, redes de transporte público, mapas y topología de red
7. Idioma: Java
Características: Mejor soporte para tablas grandes y Dynamo
Licencia: Apache
Protocolo: personalizado, binario (ahorrativo)
Distribución y replicación ajustables (N, R, W)
Admite consultas de columnas con un cierto rango de valores clave
Similar a tablas grandes Función: Columna, una colección de columnas con una determinada característica
Las operaciones de escritura son más rápidas que las operaciones de lectura
Asignar/reducir tanto como sea posible según la plataforma distribuida Apache
Admito un sesgo contra Cassandra , en parte debido a su hinchazón y complejidad, pero también debido a problemas de Java (configuración, excepciones, etc.)
Mejor caso de uso: cuando se usan más escrituras que lecturas Operaciones (registro) Si cada componente del sistema tuviera que hacerlo estar escrito en Java (nadie fue despedido por elegir el software Apache)
Por ejemplo: banca, finanzas (aunque para las transacciones financieras no son necesarias, pero estas industrias tendrán mayores requisitos de bases de datos que los que tienen) escribir es más rápido que la lectura, por lo que una característica natural es el análisis de datos en tiempo real
8. p>
Características: Admite miles de millones de filas y millones de columnas
Licencia: Apache
Protocolo: HTTP/REST (admite Thrift, consulte la Nota del editor 4)
Modelado a partir de BigTable
Uso de arquitectura distribuida Map/reduce
Optimización de consultas en tiempo real
Puerta de enlace Thrift de alto rendimiento
Predecir operaciones de consulta escaneando y filtrando en el lado del servidor
Compatible con XML, Protobuf y HTTP binario
Módulos de origen y receptor en cascada, colmena y pig
Shell basado en Jruby (JIRB)
Responsivo a cambios de configuración y actualizaciones menores Revertir de nuevo
Sin punto único de falla
Rendimiento de acceso aleatorio comparable a MySQL
p>
Mejor escenario de aplicación: Adecuado para aquellos que prefieren BigTable :) y necesitan dónde se puede acceder a big data de forma aleatoria y en tiempo real.
Por ejemplo: base de datos de mensajes de Facebook (próximamente aparecerán casos de uso más generales)
Nota del editor 4: Thrift
es un lenguaje de definición de interfaz que proporciona otros idiomas brindar servicios de definición y creación, desarrollados por Facebook y de código abierto.
Por supuesto, todos los sistemas tienen más que solo las características enumeradas anteriormente. Aquí solo enumero algunas de las características importantes según mi propio punto de vista. Al mismo tiempo, el avance tecnológico es rápido, por lo que el contenido anterior definitivamente deberá actualizarse constantemente. Haré todo lo posible para actualizar esta lista.