# Amazon DynamoDB

Amazon DynamoDB és un servei de base de dades NoSQL gestionat per Amazon Web Services (AWS). Admet estructures de dades clau-valor i document i està dissenyat per gestionar una àmplia gamma d'aplicacions que requereixen escalabilitat i rendiment.

## Història

Werner Vogels, CTO d'Amazon.com, va proporcionar una motivació per al projecte en el seu anunci de 2012. Amazon va començar com una xarxa descentralitzada de serveis. Originalment, els serveis tenien accés directe a les bases de dades dels altres. Quan això es va convertir en un coll d'ampolla per a les operacions d'enginyeria, els serveis es van allunyar d'aquest patró d'accés directe a favor de les API públiques. Tot i així, els sistemes de gestió de bases de dades relacionals de tercers van lluitar per gestionar la base de clients d'Amazon. Això va culminar durant la temporada de vacances de 2004, quan diverses tecnologies van fallar amb un gran trànsit.
Les bases de dades tradicionals solen dividir les dades en peces més petites per estalviar espai, però combinar aquestes peces durant les cerques pot fer que les consultes siguin més lentes. Molts dels serveis d'Amazon exigien principalment lectures de claus primàries a les seves dades i, amb la velocitat com a prioritat màxima, reunir aquestes peces era extremadament complicat.
Content amb una eficiència d'emmagatzematge compromesa, la resposta d'Amazon va ser Dynamo: una botiga de valor-clau d'alta disponibilitat creada per a ús intern. Dinamo, semblava, era tot el que necessitaven els seus enginyers, però l'adopció es va retardar. Els desenvolupadors d'Amazon van optar per patrons de disseny "només funciona" amb S3 i SimpleDB. Tot i que aquests sistemes tenien defectes de disseny notables, no exigien la sobrecàrrega d'aprovisionament de maquinari ni d'escalat i torna a particionar les dades. La següent iteració d'Amazon de la tecnologia NoSQL, DynamoDB, va automatitzar aquestes operacions de gestió de bases de dades.

## Visió general

DynamoDB organitza les dades en taules, que són similars als fulls de càlcul. Cada taula conté elements (files) i cada element està format per atributs (columnes). Cada element té un identificador únic anomenat clau primària, que ajuda a localitzar-lo dins de la taula.

### Taules DynamoDB

Una taula DynamoDB és una agrupació lògica d'elements, que representen les dades emmagatzemades en aquesta taula. Donada la naturalesa NoSQL de DynamoDB, les taules no requereixen que tots els elements d'una taula s'ajustin a algun esquema predefinit.

### Elements de DynamoDB

Un element a DynamoDB és un conjunt d'atributs que es poden identificar de manera única en una taula. Un atribut és una entitat de dades atòmiques que en si mateixa és un parell clau-valor. La clau és sempre de tipus String, mentre que el valor pot ser d'un dels diversos tipus de dades.
Un element s'identifica de manera única en una taula mitjançant un subconjunt dels seus atributs anomenats claus.

#### Claus a DynamoDB

Una clau primària és un conjunt d'atributs que identifiquen de manera única els elements d'una taula de DynamoDB. La creació d'una taula DynamoDB requereix la definició d'una clau primària. Cada element d'una taula de DynamoDB ha de tenir tots els atributs que constitueixen la clau primària, i cap element d'una taula no pot tenir la mateixa clau primària. Les claus primàries a Dynamo DB poden consistir en un o dos atributs.
Quan una clau primària només està formada per un atribut, s'anomena clau de partició. Les claus de partició determinen la ubicació física de l'element associat. En aquest cas, no hi ha dos elements d'una taula que tinguin la mateixa clau de partició.
Quan una clau primària està formada per dos atributs, el primer s'anomena "clau de partició" i el segon s'anomena "clau d'ordenació". Com abans, la clau de partició decideix la ubicació física de les dades, però la clau d'ordenació decideix la posició lògica relativa del registre de l'element associat dins d'aquesta ubicació física. En aquest cas, dos elements d'una taula poden tenir la mateixa clau de partició, però cap element d'una partició pot tenir la mateixa clau d'ordenació. En altres paraules, es garanteix que una combinació determinada de clau de partició i clau d'ordenació té com a màxim un element associat a una taula de DynamoDB.

### Tipus de dades de DynamoDB

DynamoDB admet tipus de dades numèrics, String, Boolean, Document i Set.

### Índexs DynamoDB

La clau primària d'una taula és l'índex primari o predeterminat d'una taula DynamoDB.
A més, una taula DynamoDB pot tenir índexs secundaris. Un índex secundari es defineix en un atribut que és diferent de la clau de partició o la clau d'ordenació com a índex primari.
Quan un índex secundari té la mateixa clau de partició que l'índex primari però una clau d'ordenació diferent, s'anomena índex secundari local.
Quan l'índex primari i l'índex secundari tenen una clau de partició diferent, l'índex secundari es coneix com a índex secundari global.

## Patrons arquitectònics en el modelatge de dades DynamoDB

Els patrons de modelització de dades de DynamoDB són enfocaments arquitectònics utilitzats a Amazon DynamoDB, un servei de bases de dades NoSQL dissenyat per a sistemes distribuïts. Aquests patrons aborden diversos reptes d'organització de dades i inclouen el "Disseny de taula única", que consolida les dades relacionades alhora que s'adhereix al límit de mida d'element de 400 KB de DynamoDB; "Disseny de taules múltiples", que separa les dades en taules diferents basades en patrons d'accés i diferències de models de dades; i el disseny híbrid, que combina ambdós enfocaments per equilibrar la flexibilitat i l'eficiència.
Els patrons addicionals descrits a la documentació d'AWS inclouen "Event Sourcing", on els canvis de dades s'emmagatzemen com a esdeveniments immutables, que permeten la reconstrucció històrica de l'estat; "Vistes materialitzades", que simplifiquen les consultes analítiques mitjançant agregacions precalculades, sovint implementades mitjançant DynamoDB Streams, processament a nivell d'aplicació o actualitzacions periòdiques per lots mitjançant funcions Lambda; i "Disseny de sèries temporals", optimitzat per a càrregues de treball com ara registres i mètriques, normalment utilitzant una clau de partició per a la identificació d'entitats i una clau d'ordenació que representa les marques de temps per consultar de manera eficient conjunts de dades basats en el temps.
Cada patró aborda requisits tècnics específics. El "Disseny de taula única" pot optimitzar l'eficiència de la consulta col·locant les dades relacionades sota la mateixa clau de partició per reduir la latència d'accés. El "Disseny de taules múltiples" permet separar les preocupacions aïllant les dades en taules específiques amb un propòsit específic amb patrons d'accés diferents. "Event Sourcing" conserva un registre històric dels canvis d'estat, sovint implementat amb emmagatzematge de dades immutable. Les "Vistes materialitzades" simplifiquen les consultes analítiques complexes mitjançant estratègies de pre-agregació adaptades als patrons d'accés. El "Disseny de sèries temporals" utilitza estratègies de partició i ordenació per emmagatzemar i consultar de manera eficient grans volums de dades temporals.

## Referències

* ↑ «What is Amazon DynamoDB?» (en anglès).
* ↑ Vogels, Werner. «Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications» (en anglès). All Things Distributed blog, 18-01-2012. [Consulta: 21 gener 2012].
* ↑ «How Amazon's DynamoDB helped reinvent databases» (en anglès americà). Network World. [Consulta: 30 novembre 2023].
* ↑ brockmeier 1, joe. «Amazon Takes Another Pass at NoSQL with DynamoDB» (en anglès americà). ReadWrite, 18-01-2012. [Consulta: 30 novembre 2023].
* ↑ DeCandia, Giuseppe; Hastorun, Deniz; Jampani, Madan; Kakulapati, Gunavardhan; Lakshman, Avinash SIGOPS Oper. Syst. Rev., 41, 6, 10-2007, pàg. 205–220. DOI: 10.1145/1323293.1294281. ISSN: 0163-5980.
* ↑ Vogels, Werner. «Amazon DynamoDB – a Fast and Scalable NoSQL Database Service Designed for Internet Scale Applications» (en anglès). All Things Distributed blog, 18-01-2012. [Consulta: 21 gener 2012].
* ↑ «Core components of Amazon DynamoDB - Amazon DynamoDB» (en anglès). docs.aws.amazon.com. [Consulta: 28 maig 2023].
* ↑ «Core components of Amazon DynamoDB - Amazon DynamoDB» (en anglès). docs.aws.amazon.com. [Consulta: 28 maig 2023].
* ↑ «Core components of Amazon DynamoDB - Amazon DynamoDB» (en anglès). docs.aws.amazon.com. [Consulta: 28 maig 2023].
* ↑ «Supported data types and naming rules in Amazon DynamoDB - Amazon DynamoDB» (en anglès). docs.aws.amazon.com. [Consulta: 28 maig 2023].
* ↑ «Core components of Amazon DynamoDB - Amazon DynamoDB» (en anglès). docs.aws.amazon.com. [Consulta: 28 maig 2023].
* ↑ «Creating a single-table design with Amazon DynamoDB» (en anglès).
* ↑ «Single-table vs. multi-table design in Amazon DynamoDB» (en anglès).
* ↑ «Data Modeling foundations in DynamoDB» (en anglès).
* ↑ «Best practices for handling time series data in DynamoDB» (en anglès).
* ↑ «AWS Prescriptive Guidance Enabling data persistence in microservices» (en anglès).
* ↑ «Build a CQRS event store with Amazon DynamoDB» (en anglès).
* ↑ «Creating a single-table design with Amazon DynamoDB» (en anglès).
* ↑ «Single-table vs. multi-table design in Amazon DynamoDB» (en anglès).
* ↑ «Data Modeling foundations in DynamoDB» (en anglès).
* ↑ «Best practices for handling time series data in DynamoDB» (en anglès).
* ↑ «AWS Prescriptive Guidance Enabling data persistence in microservices» (en anglès).
* ↑ «Build a CQRS event store with Amazon DynamoDB» (en anglès).