L'approccio che sto prendendo è quello di utilizzare il timestamp corrente per il tasto hash (o il tasto di intervallo, se si utilizza anche un intervallo). Memorizza il timestamp come un numero intero, che rappresenta il numero di millisecondi dall'inizio di "UNIX epoch" (nel fuso orario UTC). Molte librerie di data/ora possono produrre questo numero per te.
Questo ha il vantaggio che se si desidera avere un campo "tempo di creazione" nella tabella, l'UUID memorizza già queste informazioni. Basta chiamare un altro metodo nella libreria data/ora per convertire il timestamp in un formato leggibile.
(Assicurati di gestire l'eccezione che si verificherà se un secondo elemento viene creato nella stessa tabella con lo stesso timestamp in millisecondi, è sufficiente ricorrere e riprovare l'operazione in quel caso, con un timestamp corrente leggermente successivo).
Ad esempio:
User table
hash-chiave solo: userID (timestamp della creazione di questo utente).
WidgetAttributes table
tasto hash più tasto di selezione.
chiave hash: userID (utilizzare l'ID utente dalla tabella Utente dell'utente a cui appartiene il widget). range-key: attribID (usa il timestamp della creazione di questo attributo-widget).
Ora è possibile eseguire operazioni di "query" sulla tabella WidgetAttributes per ottenere tutti gli attributi del widget per un determinato utente; utilizzando "maggiore di zero" come parametro di query per la chiave di intervallo.
Grazie Non ho dimestichezza con Java in modo dalla vostra risposta è stato davvero utile. Quindi @DynamoDBAutoGeneratedKey sta semplicemente ottenendo l'API Java per generare un UUID, non la stessa Dynamo, giusto? Sarebbe davvero grandioso se Dynamo avesse un tipo di attributo UUID che genererebbe gli ID dalla loro parte e li restituirà quando aggiungerà nuovi elementi. – Adam
@Adam: Infatti, '@ DynamoDBAutoGeneratedKey' è semplicemente un'annotazione personalizzata fornita dall'SDK Java, che genera il codice generato in fase di compilazione e a sua volta eseguito all'interno dell'applicazione Java per generare l'UUID in fase di runtime - questo non ha nulla a che fare con DynamoDB come tale. E sono d'accordo, un tipo di dati UUID DynamoDB nativo sarebbe abbastanza conveniente - speriamo che il team di AWS possa espandere la funzionalità di DynamoDB nel tempo, sono ben noti per rispondere alla domanda dei clienti e innovare di conseguenza! –