tutorial query from example dynamodb create aws all database nosql data-modeling amazon-dynamodb

database - query - Cómo modelar Estudiante/Clases con DynamoDB(NoSQL)



get all items from dynamodb table (2)

Una sugerencia muy simple (sin teclas de rango) sería tener dos tablas: una por tipo de consulta. Esto no es inusual en las bases de datos NoSQL.

En tu caso, tendríamos:

  • Una tabla Student con el atributo StudentId como (tipo hash) clave principal. Cada elemento podría tener un atributo llamado Attends , cuyo valor era una lista de Ids en las clases.
  • Una tabla Class con atributo ClassId como (tipo hash) clave principal. Cada elemento podría tener un atributo llamado AttendedBy , cuyo valor era una lista de Ids en los estudiantes.

Realizar sus consultas sería simple. La actualización de la base de datos con una relación "atiende" entre un alumno y una clase requiere dos escrituras separadas, una para cada tabla.

Otro diseño tendría una tabla. Attends con una clave principal de hash y rango. Cada registro representaría la asistencia de un alumno a una clase. El atributo hash podría ser el Id de la clase y la clave de rango podría ser el Id del alumno. Los datos suplementarios sobre la clase y el estudiante residirían en otras tablas, entonces.

Estoy tratando de hacer lo que quiero con DynamoDB y NoSQL.

¿Cuál es el mejor enfoque (¿correcto?) Para modelar una tabla de estudiantes y tablas de clase con respecto al hecho de que necesito tener una relación de estudiante-en-clase. Estoy teniendo en cuenta que no hay un segundo índice disponible en DynamoDB.

El modelo debe responder las siguientes preguntas:

¿Qué estudiantes están en una clase específica?

¿Qué clases toma un estudiante?

Gracias


Para unir dos tablas de Amazon DynamoDB

El siguiente ejemplo asigna dos tablas Hive a los datos almacenados en Amazon DynamoDB. Luego llama a una combinación a través de esas dos tablas. La unión se calcula en el clúster y se devuelve. La unión no tiene lugar en Amazon DynamoDB. Este ejemplo devuelve una lista de clientes y sus compras para los clientes que han realizado más de dos pedidos.

CREATE EXTERNAL TABLE hive_purchases(customerId bigint, total_cost double, items_purchased array<String>) STORED BY ''org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'' TBLPROPERTIES ("dynamodb.table.name" = "Purchases", "dynamodb.column.mapping" = "customerId:CustomerId,total_cost:Cost,items_purchased:Items"); CREATE EXTERNAL TABLE hive_customers(customerId bigint, customerName string, customerAddress array<String>) STORED BY ''org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler'' TBLPROPERTIES ("dynamodb.table.name" = "Customers", "dynamodb.column.mapping" = "customerId:CustomerId,customerName:Name,customerAddress:Address"); Select c.customerId, c.customerName, count(*) as count from hive_customers c JOIN hive_purchases p ON c.customerId=p.customerId GROUP BY c.customerId, c.customerName HAVING count > 2;