2012-07-12 9 views
5

Dopo aver esaminato Amazon DynamoDB, ho cercato di capire come memorizzare i miei oggetti complessi che creo nel mio codice e voglio persistere. Capisco come memorizzare questi oggetti in un database relazionale come MySql, ma come li conserverei in DynamoDB?È una buona idea memorizzare un oggetto in Amazon Dynamo come Json?

Posso pensare a un modo .... trasformarli in Json e memorizzare la rappresentazione Json dell'oggetto in DynamoDB. Per estrometterli di nuovo da DynamoDB li rimanderei indietro da Json alla mia rappresentazione Object nel mio codice.

Ecco un esempio:

Per questo tipo di oggetto: A Car ha un motore che ha molte parti. Ogni parte ha un numero di serie, una durata di vita e un valore di sostituzione. Ora posso trasformare la macchina in JSON che sarebbe simile a questa:

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

Devo solo conservare quanto sopra JSON in Dynamo come chiave: CarName 'Jaguar', valore [sopra JSON]? O c'è un modo migliore per memorizzare l'oggetto auto?

risposta

1

Capisco come archiviare questi oggetti in un database relazionale come MySql ma come li memorizzerei in DynamoDB?

La soluzione mainstream per DynamoDB è abbastanza simile a MySql uno: basta, cambiare una riga di tabella (mysql) con un elemento di tabella (DynamoDB), entrambi sono strutture piane, ma un elemento DynamoDB potrebbe avere attributi diversi da altri elementi nella tabella e hanno un 64KB item size limit (nome colonna/attributo incluso).

Devo solo conservare quanto sopra JSON in Dynamo come chiave: CarName 'Jaguar', Valore [sopra JSON]? O c'è un modo migliore per memorizzare l'oggetto auto?

No, una volta che il tuo array di componenti cresce, affronterai il 64KB item size limit. È possibile memorizzare una versione compressa di JSON per mitigare, ma in seguito non sarà possibile utilizzare alcuna caratteristica di attributo (ad esempio LSI o GSI,) in dynamodb, né integrarsi perfettamente con altri prodotti AWS.

È possibile dare un'occhiata al modo in cui dyngodb memorizza tali oggetti, a breve: un oggetto dinamodb, per ogni oggetto. Un hash per gli array, con intervalli N per gli elementi dell'array.

+1

Il limite di dimensioni articolo è ora aumentato a 400 KB –

0

Si potrebbe provare a utilizzare un array di stringhe/stringhe. In questo modo puoi spingere più oggetti uno alla volta, sfortunatamente non puoi richiedere solo un oggetto, devi averli tutti. Un'altra opzione è un array serializzato (se si utilizza php) che trasforma un array php in una stringa per l'archiviazione nel DB.

0

Il limite di dimensione dell'articolo è stato fino a 400kb.

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

Quindi non credo che le limitazioni di formato oggetto deve essere il più grande di un problema ora.

Tuttavia, il problema relativo all'integrazione con altri servizi AWS è ancora valido. Ad esempio, sono abbastanza sicuro che non puoi usare cloudsearch su questi campi JSON mappati.In particolare, considerando che è possibile archiviare i puntatori a un oggetto S3 come dati del campo se i dati erano troppo grandi.

Ho usato il tipo di mappa in dynamo un po 'ed è abbastanza maneggevole/pulito rispetto alla memorizzazione di tutti i dati nei campi se si può vivere con i nuovi limiti. Se stai usando node/javascript, la libreria dei tipi di dati dynampdb è fondamentale per far sì che questa roba sia piacevole.

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

Problemi correlati