amazon web services - usar - Amazon-DynamoDB Fuertes lecturas consistentes, ¿son las últimas y cómo?
dynamodb aws que es (3)
Puede encontrar la respuesta a su pregunta aquí: http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/APISummary.html
Cuando emite una solicitud de lectura muy coherente, Amazon DynamoDB devuelve una respuesta con los datos más actualizados que reflejan las actualizaciones de todas las operaciones de escritura relacionadas anteriores a las que Amazon DynamoDB respondió con éxito.
En su ejemplo, si la solicitud updateItem
para actualizar el valor de v0
a v1
fue exitosa, la solicitud de lectura consistente y posterior devolverá v1
.
Espero que esto ayude.
En un intento de usar Dynamodb para uno de los proyectos, tengo una duda con respecto al modelo de consistencia fuerte de dynamodb. De las preguntas frecuentes
Lecturas muy coherentes: además de la consistencia eventual, Amazon DynamoDB también le brinda la flexibilidad y el control para solicitar una lectura coherente si su aplicación, o un elemento de su aplicación, lo requiere. Una lectura muy consistente devuelve un resultado que refleja todas las escrituras que recibieron una respuesta exitosa antes de la lectura.
De la definición anterior, lo que obtengo es que una lectura consistente y sólida devolverá el último valor de escritura.
Tomando un ejemplo: Digamos que el Cliente 1 emite un comando de escritura en la Clave K1 para actualizar el valor de V0 a V1. Después de unos pocos milisegundos, el Cliente 2 emite un comando de lectura para la Clave K1, luego, en caso de una consistencia fuerte, se devolverá V1 siempre, sin embargo, en caso de una eventual coherencia, se puede devolver V1 o V0. ¿Mi entendimiento es correcto?
Si es así, ¿qué pasaría si la operación de escritura fue exitosa pero los datos no se actualizan en todas las réplicas y emitimos una lectura muy coherente, cómo garantizará devolver el último valor de escritura en este caso?
El siguiente enlace AWS DynamoDB lee después de la coherencia de escritura: ¿cómo funciona teóricamente? ¿Intenta explicar la arquitectura detrás de esto, pero no sabe si es así como funciona? La siguiente pregunta que me viene a la mente después de pasar por este enlace es: ¿Está DynamoDb basado en Single Master, arquitectura múltiple de esclavos, donde las escrituras y las lecturas consistentes son a través de la réplica maestra y las lecturas normales a través de otras?
Respuesta corta: escribir con éxito en modo muy consistente requiere que su escritura tenga éxito en la mayoría de los servidores que pueden contener el registro, por lo tanto, cualquier lectura consistente futura siempre verá los mismos datos, porque una lectura consistente debe leer la mayoría de los servidores que pueden Contiene el registro deseado. Si no realiza una lectura muy coherente, el sistema solicitará el registro al servidor, y es posible que los datos no estén actualizados.
Imagina tres servidores. Servidor 1, servidor 2 y servidor 3. Para escribir un registro fuertemente consistente, elija dos servidores como mínimo y escriba los datos. Vamos a elegir 1 y 2.
Ahora quieres leer los datos consistentemente. Elija una mayoría de servidores. Digamos que elegimos 2 y 3.
El servidor 2 tiene los nuevos datos, y esto es lo que devuelve el sistema.
Eventualmente, las lecturas consistentes podrían provenir del servidor 1, 2 o 3. Esto significa que si el servidor 3 se elige al azar, su nueva escritura no aparecerá hasta que se produzca la replicación.
Si falla un solo servidor, sus datos siguen siendo seguros, pero si fallan dos de cada tres servidores, su nueva escritura puede perderse hasta que los servidores sin conexión se restauren.
Más explicación: DynamoDB (asumiendo que es similar a la base de datos descrita en el documento de Dynamo que lanzó Amazon) usa una topología de anillo, donde los datos se propagan a muchos servidores. Se garantiza una consistencia sólida porque consulta directamente a todos los servidores relevantes y obtiene los datos actuales de ellos. No hay maestro en el anillo, no hay esclavos en el anillo. Un registro dado se asignará a un número de hosts idénticos en el anillo, y todos esos servidores contendrán ese registro. No hay esclavo que pueda quedarse atrás, y no hay maestro que pueda fallar.
Siéntase libre de leer cualquiera de los muchos artículos sobre el tema. Hay disponible una base de datos similar llamada Apache Cassandra que también utiliza replicación en anillo.
http://www.read.seas.harvard.edu/~kohler/class/cs239-w08/decandia07dynamo.pdf
Descargo de responsabilidad: lo siguiente no se puede verificar en base a la documentación pública de DynamoDB, pero probablemente están muy cerca de la verdad
A partir de la teoría, DynamoDB utiliza quorums , donde V es el número total de nodos de réplica, Vr
es el número de nodos de réplica que pide una operación de lectura y Vw es el número de nodos de réplica donde se realiza cada escritura. El quórum de lectura ( Vr
) se puede aprovechar para asegurarse de que el cliente obtenga el último valor, mientras que el quórum de escritura ( Vw
) se puede aprovechar para asegurarse de que las escrituras no crean conflictos.
Según el hecho de que no hay conflictos de escritura en DynamoDB (ya que estos deberían ser reconciliados con el cliente, por lo tanto, se exponen en la API), concluimos que DynamoDB está utilizando un Vw que respeta la segunda ley ( Vw > V/2
), probablemente solo V/2+1
para reducir la latencia de escritura.
Ahora con respecto a los quórumes de lectura, DynamoDB proporciona 2 tipos diferentes de lectura. La lectura fuertemente consistente usa un quórum de lectura que respeta la primera ley ( Vr + Vw > V
), probablemente solo V/2
si asumimos V/2+1
para escrituras como antes. Sin embargo, una lectura finalmente consistente puede usar solo una única réplica aleatoria Vr = 1
, por lo tanto, es mucho más rápida pero no da garantía de coherencia.
Nota: existe la posibilidad de que el quórum de escritura utilizado no respete la segunda ley ( Vw > V/2
), pero eso significaría que DynamoDB resuelve automáticamente dichos conflictos (por ejemplo, seleccionando el último en función de la hora local) sin la reconciliación del cliente . Pero, creo que es muy poco probable que esto sea cierto, ya que no hay tal referencia en la documentación de DynamoDB. Incluso en ese caso, sin embargo, el resto del razonamiento sigue siendo el mismo.