2012-04-19 14 views
8

he construido una aplicación y que actualmente cuenta con una mesa bastante estándar del usuario, de modo que:DynamoDB y tabla de sesión del usuario

id int, varchar de correo electrónico, contraseña varchar

Si tuviera que cambiar a este DynamoDB entonces, ¿cómo crearía esta tabla?

Si utilizo una clave hash con la dirección de correo electrónico, entonces no podría ofrecer la posibilidad de actualizar su correo electrónico y si usaba un hash para almacenar la identificación, entonces necesitaría usar una exploración que es caro y está restringido por un límite de 1Mb.

¿Algún consejo, por favor? Gracias, Marca

+0

Esto parece ser un duplicado de http://stackoverflow.com/q/12920884/268898 –

Respuesta

5

¿Dice que sería costoso usar ID como hash porque necesita filtrar por el campo de correo electrónico?

Si necesita filtrar sus consultas por una columna que no es clave, a menudo termina de crear un índice para ello.

DynamoDB no tiene incorporado de índice secundario, pero es bastante fácil de implementar su propia solución.

La mesa principal podría utilizar ID como de hash, como usted ha señalado, y una mesa de differente serviría como índice, que podría ser:

varchar email, int id 

Ser correo electrónico la clave hash para el mesa secundaria Si se le permite tener varios usuarios con el mismo correo electrónico, entonces podría usar ID como rango, para facilitar las cosas, de lo contrario una columna simple cabría.

+1

Es cierto que puede crear su propio índice secundario de esta manera, pero tenga en cuenta que ** su código es responsable de manteniéndolo sincronizado con la tabla principal **. Además, las operaciones para actualizar la tabla y la tabla de índice no serán atómicas. Eso puede o no ser un problema dependiendo de cuán concurrentes sean sus patrones de acceso. – bkirkbri

+4

DynamoDB ahora tiene Índices Secundarios Globales que se pueden usar para esto (http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/GSI.html) –

+0

@JeffWalkerCodeRanger No veo cómo los GSI pueden ayudar a resolver esto . ¿Puedes explicar? – rob

1

Tener una tabla diferente para la indexación dará como resultado un alto mantenimiento. Encontré un modelo redundante de mi ex CTO.

para su mesa: USUARIO

RDBMS:

ID, contraseña de correo electrónico

1, senthil3569 @ stack.com, pide

DynamoDB:

K EY, identificación, correo electrónico, contraseña

1, 1, [email protected], pide

senthil3569 @ stack.com, 1, [email protected], pide

lugar de almacenar un registro, está almacenando de forma redundante para recuperar usando columnas no indexadas.

Espero que la solución sea clara.

+2

¿Cómo esta solución requiere menos mantenimiento que la que tiene una mesa secundaria? De nuevo tiene 2 registros y no se pueden actualizar en una transacción, incluso si están en la misma tabla. – ivant

Cuestiones relacionadas