nodejs node node.js mongodb aerospike nosql

node.js - node - express js



¿Alguien ha trabajado con Aerospike? ¿Cómo se compara con MongoDB? (4)

¿Alguien puede decir si Aerospike es tan bueno como dicen ser? Soy un poco escéptico ya que es una empresa comercial. Por lo que tengo entendido, acaban de lanzar una versión de código abierto, pero las afirmaciones en su sitio web aún podrían exagerarse.

Estoy especialmente interesado en cómo se compara Aerospike con MongoDB.


He usado Aerospike, MongoDB y Redis y he probado muchas otras bases de datos NoSQL. Yo diría que Aerospike es muy bueno en lo que hace, pero es diferente de MongoDB. Todo depende de lo que planea usar una base de datos para. Puedo darte un ejemplo de para qué estoy usando mis diferentes bases de datos. También puedo repasar las diferencias entre ellos y discutir los beneficios de Aerospike.

MongoDB

Estoy usando MongoDB como una alternativa de SQL. En mi base de datos MongoDB tengo muchos campos diferentes. Muchas veces los campos cambian y aleatoriamente tendré que consultar en varios campos. Es una base de datos muy desestructurada y MongoDB es increíble en eso. También he usado MongoDB como una tienda estándar de valores-clave. Funciona bien, pero he logrado que MongoDB funcione de manera subóptima tanto en escala de transacción como en escala de tamaño de base de datos. Es cierto que la base de datos podría haber sido optimizada un poco mejor, pero me resulta muy difícil encontrar documentación sobre cómo configurar correctamente MongoDB en diferentes situaciones.

Redis

Redis es una tienda pura de valores-clave. El mayor problema de Redis es que es puramente en la memoria (utilizará el disco como copia de seguridad pero no puede almacenar más información que la que tiene disponible). Es extremadamente rápido para lo que se usa. Personalmente lo uso para una pequeña base de datos transaccional: hago funciones muy simples en claves como contar cuántas veces sucedió un evento para un determinado usuario. También realizo búsquedas rápidas en memoria que necesito mapear a diferentes valores. Redis es una gran herramienta para un pequeño conjunto de datos y es extremadamente rápido. La configuración es muy fácil también.

Aerospike

Yo personalmente uso Aerospike para reemplazar a Redis cuando es hora de escalar. Desde mi entendimiento, se puede usar para más. Al igual que Redis, Aerospike es una tienda de valores clave. Creo que la edición de código abierto también admite índices secundarios que Redis no tiene (no he usado índices secundarios en la producción, pero he hecho pocas pruebas en ellos).

La mejor característica de Aerospike es su capacidad de escalar. El mayor problema que necesitaba resolver al examinar Aerospike era escalar mi sistema para manejar grandes conjuntos de datos sin dejar de ser extremadamente rápido. El proyecto que utilizo Aerospike tiene requisitos muy estrictos de velocidad. Usualmente hago 3-4 búsquedas de bases de datos más otros procesos y necesito tener tiempos de transacción de menos de 50 ms. Algunas búsquedas están en conjuntos de datos que son 300GB +. No pude encontrar una solución para guardar esta información y hacerla accesible en un tiempo razonable. Redis obviamente no funcionará a menos que tenga una máquina que tenga 300GB + de RAM. MongoDB comenzó a funcionar extremadamente mal en un tamaño mucho más bajo que 300 GB. Así que le di una oportunidad a Aerospike, y fue capaz de manejar todo muy bien. Lo mejor de Aerospike: a medida que mi conjunto de datos ha crecido, no he tenido que hacer mucho más que levantar una nueva caja cuando sea necesario. La velocidad se ha mantenido constante.

También encuentro la documentación de Aerospikes muy buena. No es demasiado difícil de configurar y es bastante fácil encontrar respuestas para cualquier problema que surja.

Conclusión

Entonces, ¿Aerospike es tan bueno como dicen? Personalmente, no he visto nada menos que lo que se ha reclamado. No he tenido que escalar a 1 millón de TPS, pero sí creo que con el hardware suficiente sería posible. También creo que los números muestran una diferencia de velocidad entre Aerospike y MongoDB. Aerospike es una base de datos mucho más "configurada" y "planificada" que MongoDB. Debido a esto, Aerospike será mucho más rápido a escala que MongoDB. Solo tiene que preocuparse por índices únicos (o en el caso de índices secundarios, unos cientos) a diferencia de MongoDB, que puede cambiar dinámicamente. La pregunta que realmente necesita hacerse es qué intenta lograr con su base de datos. Luego, busque en qué base de datos se ajustará mejor a sus necesidades. Si necesita una base de datos de almacenamiento de valores clave escalable, rápida, diría que Aerospike es probablemente lo mejor que hay.

Avíseme si tiene alguna pregunta específica o si necesita algo aclarado. Probablemente podría ayudarte.


He usado MongoDB (2.4) y Aerospike 3 en nuestros sistemas de producción. Estas son las pocas observaciones encontradas por nuestro equipo:

1) El rendimiento de lectura / escritura de Aerospike es inmejorable . Por lo general, Mongo db funciona hasta cierta escala si las solicitudes de lectura están en el lado superior. Si necesita una lectura / escritura simultánea en una proporción de 95/5 por ciento, Mongo se degrada como cualquier cosa. Con Aerospike hemos visto muy poco impacto incluso si esta proporción es 90/10. En AWS hemos logrado 200k TPS usando Aerospike.

2) En latencia de Aerospike es muy bajo. La latencia de lectura fue inferior a milisegundos para el percentil 99 en el lado del servidor. La latencia de escritura fue inferior a milisegundos para el percentil 80 y dentro de 8ms para el percentil 100. Lo mejor fue que obtuvimos un número casi similar en diferentes POC, por lo que el rendimiento es constante.

3) Muy pocos nodos son suficientes en el cluster Aerospike en comparación con otras soluciones. Además, el almacén de datos basado en SSD proporciona números bastante impresionantes, por lo que es muy rentable y con pocos gastos de mantenimiento.

4) Ahora Aerospike es de código abierto, por lo que esperamos un mayor apoyo de la comunidad :-)

Entonces, estamos usando Aerospike para todos los sistemas nuevos e intentando migrar desde MongoDB.


MongoDB y Aerospike no están hechos para la misma administración de datos, ya que SQL no está muerto también.

Hemos hecho sistemas de caché con clústeres fragmentados en Mongodb con la versión TokuMX (2.0.0 basada en Mongodb 2.4.10), el sistema sigue funcionando bien, con solo un 0,1% de consultas que requieren más de 100 ms en 65 millones de consultas por día y aproximadamente 10 millones de actualizaciones por día. Ahora estamos probando Aerospike, que parece ser genial y ahora de código abierto. Solo hay un problema con esta versión de código abierto

¡NO LO USE EN SERVIDORES DE PRODUCCIÓN!

La administración de seguridad solo está disponible en la distribución Enterprise. Esto significa que

¡NO PUEDE ASEGURAR NADA CON LA CONTRASEÑA Y EL USUARIO!

Ahora, si no le importa, puede usarlo en la producción, pero no recuerda que alguno de sus clientes puede solicitar una auditoría de seguridad y luego deberá pagar mucho.


Velocidad

Aerospike es más rápido. Casi cualquier sistema será rápido con poca carga o con acceso a datos simple, pero Aerospike se ha mantenido constantemente rápido al optimizar las opciones de almacenamiento en memoria y SSD. Mongo es rápido cuando se usa con mucha memoria RAM para el almacenamiento en caché pero, por lo demás, es lento y tiene un bajo rendimiento de escritura.

Confiabilidad

Aerospike es muy estable, aunque con acceso a datos más simple. MongoDB ha sido históricamente problemático con datos persistentes y conmutación por error, pero ahora es mucho mejor. Debido a que Aerospike tiene un mejor rendimiento y una administración más sencilla, genera menos problemas potenciales al escalar.

Configuración / Configuración

La agrupación en clúster con Aerospike es mucho más fácil de configurar ya que todos los nodos son iguales y los controladores del cliente manejan las conexiones y la conmutación por error automáticamente. MongoDB puede ser más fácil si está configurando un único servidor, ya que se ejecuta en más plataformas de forma nativa y puede iniciarlo sin ninguna configuración.

MongoDB tiene dos formas principales de clúster, conjuntos de réplicas (para disponibilidad) y fragmentación (para escalabilidad). Teníamos 5 fragmentos y cada fragmento tenía una réplica de 3 servidores. Son 15 servidores para almacenar datos. Luego tuvimos 3 servidores de configuración que mantuvieron la configuración del clúster y tuvimos que agregar 2 procesos de árbitro después de nuestro primer corte importante para tratar de escalar correctamente un esclavo al maestro. Esas son muchas piezas móviles y también hace que sea increíblemente difícil cambiar su diseño en el futuro.

Por el contrario, Aerospike ha requerido mucho menos esfuerzo pero requiere más configuración, la mayoría de los cuales no se pueden cambiar una vez que el clúster ha comenzado, mientras que con MongoDB puede crear y modificar bases de datos en cualquier momento.

Aerospike sí tiene la capacidad de sincronizar múltiples clusters (lo cual es complicado de configurar), por lo que puede tener diferentes centros de datos activos que repliquen datos y acepten escrituras, algo que MongoDB realmente no admite en absoluto.

Acceso a los datos

MongoDB tiene una base de datos / colección / documento donde cada documento es solo json. Aerospike tiene espacio de nombres / conjunto / registro donde cada registro es una colección de "contenedores" de valores-clave, que luego pueden tener estructuras clave / valor anidadas. Los espacios de nombres están preconfigurados y no son dinámicos, y los nombres de las propiedades están limitados a 14 caracteres, lo cual es molesto para trabajar.

Ambos tienen índices secundarios, aunque MongoDB te permite realizar consultas inmediatamente con cualquier cosa, mientras que Aerospike requiere una configuración de índice o scripts personalizados. Ambos tienen marcos de agregación incorporados. Los clientes de Aerospike admiten scripts de LUA, pero MongoDB es compatible con map-reduce y funciones de JavaScript personalizadas.

Realmente depende de lo que necesite su aplicación, pero MongoDB gana en flexibilidad, consultas más fáciles y menos restricciones.

Costo

Ambos son ahora de código abierto y gratuito. Ambos tienen versiones empresariales con características adicionales, pero la licencia es costosa si tiene muchos datos. Aerospike podría ser más económico ya que requiere menos máquinas para el mismo rendimiento.

En general

Para la mayoría de los escenarios, recomendaría Aerospike. La semántica y la flexibilidad de Document-store de MongoDB son geniales, pero es doloroso escalarlo y mantenerlo como una base de datos distribuida. Aerospike es rápido y confiable y puede ejecutarse con menos nodos que sean más fáciles de escalar.

Octubre de 2014: Aerospike ahora ofrece un programa especial para startups calificadas para obtener acceso gratuito a la versión empresarial.

Enero de 2016: MongoDB lanzó MongoDB Cloud Manager, que es un servicio pago de SaaS que puede aprovisionar y administrar sus clusters. Esto resuelve muchos problemas con la configuración de Mongo.

Marzo de 2017: ambas bases de datos han recorrido un largo camino. Aerospike ahora tiene una replicación más rápida y configuraciones de configuración más flexibles sin reiniciar todo el clúster. MongoDB tiene nueva implementación de esquemas, mejor rendimiento e incluso admite combinaciones junto con el servicio administrado MongoDB Atlas para eliminar todos los problemas de escala.

Ahora recomiendo ScyllaDB, que es una base de datos de código abierto compatible con Cassandra con un rendimiento increíble, replicación de múltiples centros de datos y sin límites de uso.