AWS MySQL RDS frente a AWS DynamoDB [cerrado]

109

He estado usando MySQL durante un tiempo y me siento cómodo con su estructura y consultas SQL, etc.

Actualmente estoy construyendo un nuevo sistema en AWS y he estado buscando DynamoDB. Actualmente solo sé un poco al respecto.

¿Es uno mejor que el otro?

¿Cuáles son las ventajas de DynamoDB?

¿Cómo es la transición de las consultas de MySQL, etc. a esta base de datos de estilo plano?

Adán
fuente

Respuestas:

66

Puede leer la explicación de AWS al respecto aquí. .

En resumen, si tiene principalmente consultas de búsqueda (y no consultas de unión), DynamoDB (y otras bases de datos NoSQL) es mejor. Si necesita manejar muchos datos , estará limitado al usar MySQL (y otros RDBMS).

No puede reutilizar sus consultas MySQL ni su esquema de datos, pero si se esfuerza por aprender NoSQL, agregará una herramienta importante a su caja de herramientas. Hay muchos casos en los que DynamoDB ofrece la solución más sencilla.

Chico
fuente
262

Realmente DynamoDB y MySQL son manzanas y naranjas. DynamoDB es una capa de almacenamiento NoSQL, mientras que MySQL se usa para almacenamiento relacional. Debe elegir qué usar según las necesidades reales de su aplicación. De hecho, algunas aplicaciones podrían funcionar bien con ambos.

Si, por ejemplo, está almacenando datos que no se prestan bien a un esquema relacional (estructuras de árbol, representaciones JSON sin esquema, etc.) que se pueden comparar con una sola clave o una combinación de clave / rango, entonces DynamoDB ( o alguna otra tienda NoSQL) probablemente sea su mejor opción.

Si tiene un esquema bien definido para sus datos que puede encajar bien en una estructura relacional y necesita la flexibilidad para consultar los datos de varias formas diferentes (agregando índices según sea necesario, por supuesto), entonces RDS podría ser una mejor solución .

El principal beneficio de usar DynamoDB como un almacén NoSQL es que obtiene un rendimiento de lectura / escritura garantizado en cualquier nivel que necesite sin tener que preocuparse por administrar un almacén de datos en clúster. Entonces, si su aplicación requiere 1000 lecturas / escrituras por segundo, puede simplemente aprovisionar su tabla de DynamoDB para ese nivel de rendimiento y no tener que preocuparse realmente por la infraestructura subyacente.

RDS tiene el mismo beneficio de no tener que preocuparse por la infraestructura en sí, sin embargo, si termina necesitando hacer una cantidad significativa de escrituras hasta el punto en que el tamaño de instancia más grande ya no se mantendrá al día, se quedará sin opciones (puede escalar horizontalmente para lecturas usando réplicas de lectura).

Nota actualizada: DynamoDb ahora admite la indexación secundaria global, por lo que ahora tiene la capacidad de realizar búsquedas optimizadas en campos de datos que no sean el hash o la combinación de claves de rango y hash.

Mike Brant
fuente
10
Si pudiera votar su respuesta por 100, lo haría.
Salil
Algunos tipos de problemas en un modelo de información tienden bien a un tipo de implementación NoSQL. Cuando se encuentre con estos problemas, hágase una pregunta si tendría sentido tener una base de datos NoSQL. Algunas de estas entidades son: Registros, los datos de series de tiempo, las redes sociales, gestión de contenidos, etc. Catálogo de Productos
user398039
150

Acabamos de migrar todas nuestras tablas de DynamoDB a RDS MySQL.

Si bien el uso de DynamoDB para tareas específicas puede tener sentido, construir un nuevo sistema sobre DynamoDB es realmente una mala idea. Planes mejor diseñados, etc., siempre necesita esa flexibilidad adicional de su base de datos.

Estas son nuestras razones por las que nos mudamos de DynamoDB:

  1. Indexación: cambiar o agregar claves sobre la marcha es imposible sin crear una nueva tabla.
  2. Consultas: la consulta de datos es extremadamente limitada. Especialmente si desea consultar datos no indexados. Por supuesto, las uniones son imposibles, por lo que debe administrar relaciones de datos complejas en su capa de código / caché.
  3. Copia de seguridad: un procedimiento de copia de seguridad tan tedioso es una sorpresa decepcionante en comparación con la elegante copia de seguridad de RDS
  4. GUI: mala experiencia de usuario, búsqueda limitada, sin diversión.
  5. Velocidad: el tiempo de respuesta es problemático en comparación con RDS. Te encuentras construyendo un elaborado mecanismo de almacenamiento en caché para compensarlo en lugares en los que te habrías conformado con el almacenamiento en caché interno de RDS.
  6. Integridad de los datos: si bien el concepto de estructura de datos fluida suena bien para empezar, algunos de sus datos están mejor "grabados en piedra". La escritura fuerte es una bendición cuando un pequeño error intenta destruir su base de datos. Con DynamoDB todo es posible y, de hecho, todo lo que puede salir mal, lo hace.

Ahora usamos DynamoDB como respaldo para algunos sistemas y estoy seguro de que lo usaremos en el futuro para tareas específicas y bien definidas. No es una base de datos mala, simplemente no es la base de datos para servir al 100% de su sistema central.

En cuanto a las ventajas, diría que escalabilidad y durabilidad. Se escala de manera increíble y transparente y (algo así) siempre está activo. Estas son características realmente geniales, pero no compensan de ninguna manera los aspectos negativos.

Yami Glick
fuente
11
Pros / contras muy específicos. Gran respuesta
stevendesu
10
Algo de esto está desactualizado. Por ejemplo, 1 ya no es cierto.
mbroshi
2
Respuesta muy bien documentada. Sin embargo, algunas de estas preocupaciones pueden ser específicas de casos de uso poco frecuentes. Número 2 - "Las uniones son, por supuesto, imposibles" - Las estructuras de datos de DynamoDB no deberían tener ninguna relación - punto. La tabla debe estar completamente desnormalizada. Eso significa que algunos atributos se duplican. Para tales casos, use un disparador dínamo o escrituras condicionales. Si los usuarios no pueden lidiar con la latencia para escrituras condicionales, coloque una cola SQS entre la aplicación y dynamo. Además, el punto número 6 está mal llamada hasta el punto que se pone en duda la "integridad" de DynamoDB - que podría no ser la intención ...
reparte
1
Dynamo todavía carece de flexibilidad al realizar consultas. Aunque GSI es de gran ayuda, podemos modelar mejor nuestros datos con el esquema RDBMS.
Pavan
1
Agregaría que las capacidades de consulta dentro de DynamoDB tienen algunas "trampas". Por ejemplo, si su clave principal consiste solo en un hash, una consulta de Dynamo solo puede devolver 1 entrada, no puede proporcionar un rango a una clave de solo hash en el momento de la consulta, ni puede realizar consultas sin conocer el hash específico del artículo que estás buscando. BatchGet acepta solo 100 get en la solicitud, 1 MB de tamaño de respuesta total o 1 MB de tamaño de consulta total, lo que ocurra primero. La exploración le ofrece una búsqueda flexible, pero es muy ineficaz y costosa, y devuelve la tabla completa antes de filtrar.
Brooks
12

Al usar DynamoDB, también debe saber que los elementos / registros en DynamoDB están limitados a 400 KB (consulte Límites de DynamoDB ). Para muchos casos de uso, esto no funcionará. Entonces, DynamoDB será bueno para algunas cosas, pero no para todas. Lo mismo ocurre con muchas de las otras bases de datos NoSQL.

Ali
fuente