2012-07-12 8 views
5

Después de mirar Amazon DynamoDB he intentado averiguar cómo almacenar mis objetos complejos que creo en mi código y deseo que persistan. Entiendo cómo almacenaría estos objetos en una base de datos relacional como MySql, pero ¿cómo los almacenaría en DynamoDB?¿Es una buena idea almacenar un objeto en Amazon Dynamo como Json?

Puedo pensar de una manera ... convertirlos en Json y almacenar la representación de Json del objeto en DynamoDB. Para sacarlos de DynamoDB de nuevo, los ordenaré de nuevo desde Json a mi representación de Object en mi código.

Aquí se muestra un ejemplo:

Para este tipo de objeto: un coche tiene un motor que tiene muchas partes. Cada parte tiene un número de serie, un período de vida y un valor de reemplazo. Ahora puedo convertir el coche en JSON, que sería algo como esto:

{ 
    "engine": { 
     "parts": [ 
      { 
       "serialNumber": "1234", 
       "lifeSpan": 10, 
       "replacementValue": 100 
      }, 
      { 
       "serialNumber": "5678", 
       "lifeSpan": 1, 
       "replacementValue": 200 
      } 
     ] 
    } 
} 

¿Debo guardar lo anterior JSON en Dynamo como Clave: CarName 'Jaguar', Valor [por encima de JSON]? ¿O hay una mejor manera de almacenar el objeto del coche?

Respuesta

1

Entiendo cómo almacenaría estos objetos en una base de datos relacional como MySql, pero ¿cómo los almacenaría en DynamoDB?

La solución convencional para DynamoDB es bastante similar a la de MySQL uno: sólo, cambia una fila de la tabla (MySQL) con un elemento de la tabla (DynamoDB), ambos son estructuras planas, sino un elemento DynamoDB podía tienen atributos diferentes de otros elementos en la tabla, y tienen un 64KB item size limit (nombres de columna/atributo incluidos).

¿Debo guardar lo anterior JSON en Dynamo como Clave: CarName 'Jaguar', Valor [por encima de JSON]? ¿O hay una mejor manera de almacenar el objeto del coche?

No, una vez que su matriz de piezas crece se enfrentará al 64KB item size limit. Puede almacenar una versión comprimida de json para mitigar, pero luego no podrá usar ninguna característica de atributo (por ejemplo, LSI o GSI, updateItem) en dynamodb, ni se integrará perfectamente con otros productos de AWS.

Puede ver la forma en que dyngodb almacena esos objetos, en breve: un elemento de dynamodb, para cada objeto. Un hash para matrices, con N rangos para los elementos de la matriz.

+1

El límite de tamaño de elemento ahora ha aumentado a 400 KB –

0

Puede intentar usar una matriz de cadenas/stringset. De esta forma, puede insertar más elementos uno por uno, desafortunadamente no puede solicitar un solo artículo, necesita obtenerlos todos. Otra opción es una matriz serializada (si está utilizando php) que convierte una buena matriz php en una cadena para almacenamiento en la base de datos.

0

El límite del tamaño del elemento ha sido de hasta 400kb.

http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

Así que no creo limitaciones de tamaño de punto debería ser tan grande de un problema ahora.

Sin embargo, el problema relacionado con la integración con otro servicio de AWS sigue en pie. Por ejemplo, estoy bastante seguro de que no puedes usar cloudsearch en estos json campos mapeados.Especialmente, teniendo en cuenta que podría almacenar punteros a un objeto S3 como datos de campo si los datos eran demasiado grandes.

He utilizado el tipo de mapa en dynamo un poco y es bastante útil/limpio en comparación con el almacenamiento de todos los datos en los campos si puede vivir con los nuevos límites. Si está utilizando node/javascript, la biblioteca de tipos de datos dynampdb es fundamental para hacer que esto funcione bien.

https://www.npmjs.com/package/dynamodb-data-types

Cuestiones relacionadas