Migrar de DynamoDB a Bigtable

Bigtable y DynamoDB son almacenes de pares clave-valor distribuidos que pueden admitir millones de consultas por segundo (CPS), proporcionar almacenamiento que se escala hasta petabytes de datos y tolerar fallos de nodos.

Este documento está dirigido a los desarrolladores de DynamoDB y a los administradores de bases de datos que quieran migrar a Bigtable. También es útil cuando quieres diseñar aplicaciones para usarlas con Bigtable como almacén de datos.

Para empezar, usa una herramienta de migración proporcionada por Google que te ayude a migrar de DynamoDB a Bigtable. En esta página se describe la herramienta de migración, se comparan los dos sistemas de bases de datos y se explica la arquitectura subyacente y los detalles de interacción que son diferentes y que es importante conocer antes de realizar la migración.

Empezar a usar la herramienta de migración de DynamoDB a Bigtable

Google Cloud Professional Services Google Cloud proporciona una herramienta de migración de código abierto para agilizar la migración de datos de DynamoDB a Bigtable. La herramienta automatiza el proceso de importar tus datos a Google Cloud y, a continuación, cargarlos en Bigtable.

Con esta herramienta, puedes exportar tu tabla de DynamoDB y, a continuación, transferirla a Cloud Storage. La herramienta lee los archivos exportados de tu segmento de Cloud Storage y usa una plantilla de Dataflow para transformar los datos de forma que sean compatibles con Bigtable. Esta transformación incluye la asignación de atributos de DynamoDB a filas de Bigtable. A continuación, el trabajo de Dataflow escribe los datos transformados en tu tabla de Bigtable.

Para obtener más información o empezar, consulta la utilidad de migración de DynamoDB a Bigtable.

Ruta de migración de DynamoDB a Bigtable.

Comparación entre DynamoDB y Bigtable

En esta sección se analizan las similitudes y las diferencias entre DynamoDB y Bigtable.

Plano de control

En DynamoDB y Bigtable, el plano de control te permite configurar tu capacidad y configurar y gestionar recursos. DynamoDB es un producto sin servidor y el nivel más alto de interacción con DynamoDB es el nivel de tabla. En el modo de capacidad aprovisionada, es donde aprovisionas tus unidades de solicitud de lectura y escritura, seleccionas tus regiones y la replicación, y gestionas las copias de seguridad. Bigtable no es un producto sin servidor. Debes crear una instancia con uno o varios clústeres, cuya capacidad se determina en función del número de nodos que tengan. Para obtener más información sobre estos recursos, consulta el artículo Instancias, clústeres y nodos.

En la siguiente tabla se comparan los recursos del plano de control de DynamoDB y Bigtable.

DynamoDB Bigtable
Tabla: conjunto de elementos con una clave principal definida. Las tablas tienen ajustes para copias de seguridad, replicación y capacidad. Instancia: grupo de clústeres de Bigtable en diferentes Google Cloud zonas o regiones entre los que se produce la replicación y el enrutamiento de conexiones. Las políticas de replicación se definen a nivel de instancia.

Clúster: grupo de nodos de la misma zona geográfica, idealmente ubicados en el mismo lugar que el servidor de aplicaciones por motivos de latencia y replicación.Google Cloud La capacidad se gestiona ajustando el número de nodos de cada clúster.

Tabla: organización lógica de valores indexada por la clave de fila.

Las copias de seguridad se controlan a nivel de tabla.
Unidad de capacidad de lectura (RCU) y unidad de capacidad de escritura (WCU): unidades que permiten lecturas o escrituras por segundo con un tamaño de carga útil fijo. Se te cobra por las unidades de lectura o escritura de cada operación con tamaños de carga útil más grandes.Las operaciones

UpdateItem consumen la capacidad de escritura utilizada para el elemento actualizado de mayor tamaño, ya sea antes o después de la actualización, aunque esta implique un subconjunto de los atributos del elemento.
Nodo: recurso de computación virtual responsable de leer y escribir datos. El número de nodos de un clúster se traduce en límites de rendimiento para lecturas, escrituras y análisis. Puedes ajustar el número de nodos en función de la combinación de tus objetivos de latencia, el recuento de solicitudes y el tamaño de la carga útil.

Los nodos SSD ofrecen el mismo rendimiento para las lecturas y las escrituras, a diferencia de la diferencia significativa entre RCU y WCU. Para obtener más información, consulta la sección Rendimiento de las cargas de trabajo típicas.
Partición: bloque de filas contiguas respaldado por unidades de estado sólido (SSD) ubicadas junto a los nodos.

Cada partición está sujeta a un límite de 1000 WCUs, 3000 RCUs y 10 GB de datos.
Tabla: un bloque de filas contiguas respaldado por el medio de almacenamiento que elijas (SSD o HDD).

Las tablas se fragmentan en tablets para equilibrar la carga de trabajo. Las tablets no se almacenan en nodos de Bigtable, sino en el sistema de archivos distribuido de Google, que permite redistribuir los datos rápidamente al escalar y que proporciona una mayor durabilidad al mantener varias copias.
Tablas globales: una forma de aumentar la disponibilidad y la durabilidad de tus datos propagando automáticamente los cambios de datos en varias regiones. Replicación: una forma de aumentar la disponibilidad y la durabilidad de tus datos propagando automáticamente los cambios de datos en varias regiones o en varias zonas de la misma región.
No aplicable (N/A) Perfil de aplicación: ajustes que indican a Bigtable cómo enrutar una llamada a la API de un cliente al clúster adecuado de la instancia. También puede usar un perfil de aplicación como etiqueta para segmentar las métricas de atribución.

Replicación geográfica

La replicación se usa para cumplir los requisitos de los clientes en los siguientes casos:

  • Alta disponibilidad para garantizar la continuidad de la actividad empresarial en caso de que se produzca un fallo en una zona o región.
  • Colocar los datos de tu servicio cerca de los usuarios finales para ofrecerlos con baja latencia en cualquier parte del mundo.
  • Aislamiento de cargas de trabajo cuando necesites implementar una carga de trabajo por lotes en un clúster y depender de la replicación en los clústeres de servicio.

Bigtable admite clústeres replicados en tantas zonas como estén disponibles en hasta 8 Google Cloud regiones en las que Bigtable esté disponible. La mayoría de las regiones tienen tres zonas. Para obtener más información, consulta Regiones y zonas.

Bigtable replica automáticamente los datos en todos los clústeres de una topología multiprimario, lo que significa que puedes leer y escribir en cualquier clúster. La replicación de Bigtable acaba siendo coherente. Para obtener más información, consulta la descripción general de la replicación.

DynamoDB ofrece tablas globales para admitir la replicación de tablas en varias regiones. Las tablas globales son de varios primarios y se replican automáticamente en todas las regiones. La replicación acaba siendo coherente.

En la siguiente tabla se enumeran los conceptos de replicación y se describe su disponibilidad en DynamoDB y Bigtable.

Propiedad DynamoDB Bigtable
Replicación multiprimaria Sí.

Puedes leer y escribir en cualquier tabla global.
Sí.

Puedes leer y escribir en cualquier clúster de Bigtable.
Modelo de coherencia Coherencia final.

Coherencia inmediata (read-your-writes) a nivel regional para tablas globales.
Coherencia final.

Coherencia inmediata (read-your-writes) a nivel de clúster para todas las tablas, siempre que envíe tanto lecturas como escrituras al mismo clúster.
Latencia de replicación No hay ningún acuerdo de nivel de servicio.

segundos
Sin acuerdo de nivel de servicio.

segundos
Granularidad de la configuración Nivel de la tabla. Nivel de instancia.

Una instancia puede contener varias tablas.
Implementación Crea una tabla global con una réplica de la tabla en cada región seleccionada.

Nivel regional.

Replicación automática en todas las réplicas convirtiendo una tabla en una tabla global.

Las tablas deben tener habilitado DynamoDB Streams, con el stream que contenga tanto las imágenes nuevas como las antiguas del elemento.

Elimina una región para quitar la tabla global de esa región.
Crea una instancia con más de un clúster.
La replicación es automática entre los clústeres de esa instancia.

Nivel de zona.

Añadir y quitar clústeres de una instancia de Bigtable.
Opciones de replicación Por tabla. Por instancia.
Enrutamiento y disponibilidad del tráfico El tráfico se dirige a la réplica geográfica más cercana.

En caso de fallo, aplicas una lógica empresarial personalizada para determinar cuándo redirigir las solicitudes a otras regiones.
Usa perfiles de aplicación para configurar políticas de enrutamiento del tráfico de clústeres.

Usa el enrutamiento de varios clústeres para enrutar el tráfico automáticamente al clúster correcto más cercano.

En caso de fallo, Bigtable admite la conmutación por error automática entre clústeres para la alta disponibilidad.
Escalado La capacidad de escritura en unidades de solicitud de escritura replicadas (R-WRU) se sincroniza entre las réplicas.

La capacidad de lectura en unidades de capacidad de lectura replicadas (R-RCU) es por réplica.
Puedes escalar clústeres de forma independiente añadiendo o quitando nodos de cada clúster replicado según sea necesario.
Coste Las WRUs de lectura y escritura cuestan un 50% más que las WRUs normales. Se te factura por los nodos y el almacenamiento de cada clúster.
No hay costes de replicación de red para la replicación regional entre zonas.
Los costes se generan cuando la replicación se realiza entre regiones o continentes.
Acuerdo de nivel de servicio 99,999 % 99,999%

Plano de datos

En la siguiente tabla se comparan los conceptos del modelo de datos de DynamoDB y Bigtable. Cada fila de la tabla describe funciones análogas. Por ejemplo, un elemento de DynamoDB es similar a una fila de Bigtable.

DynamoDB Bigtable
Artículo: grupo de atributos que se puede identificar de forma única entre todos los demás artículos por su clave principal. El tamaño máximo permitido es de 400 KB. Fila: una sola entidad identificada por la clave de fila. El tamaño máximo permitido es de 256 MB.
N/A Familia de columnas: espacio de nombres especificado por el usuario que agrupa columnas.
Atributo: agrupación de un nombre y un valor. El valor de un atributo puede ser un tipo escalar, un conjunto o un documento. No hay ningún límite explícito en el tamaño de los atributos. Sin embargo, como cada elemento tiene un límite de 400 KB, en el caso de los elementos que solo tienen un atributo, este puede ocupar hasta 400 KB menos el tamaño ocupado por el nombre del atributo. Calificador de columna: identificador único de una columna dentro de una familia de columnas. El identificador completo de una columna se expresa como familia-de-columnas:calificador-de-columna. Los calificadores de columna se ordenan lexicográficamente en la familia de columnas.

El tamaño máximo permitido para un calificador de columna es de 16 KB.


Celda: contiene los datos de una fila, una columna y una marca de tiempo concretas. Una celda contiene un valor que puede ser de hasta 100 MB.
Clave principal: identificador único de un elemento de una tabla. Puede ser una clave de partición o una clave compuesta.

Clave de partición: clave principal simple compuesta por un atributo. Determina la partición física en la que se encuentra el elemento. El tamaño máximo permitido es de 2 KB.

Clave de ordenación: clave que determina el orden de las filas de una partición. El tamaño máximo permitido es de 1 KB.

Clave compuesta: clave principal compuesta por dos propiedades: la clave de partición y una clave de ordenación o un atributo de intervalo.
Clave de fila: identificador único de un elemento de una tabla. Normalmente se representa mediante una concatenación de valores y delimitadores. El tamaño máximo permitido es de 4 KB.

Los calificadores de columna se pueden usar para ofrecer un comportamiento equivalente al de la clave de ordenación de DynamoDB.

Las claves compuestas se pueden crear usando claves de fila concatenadas y calificadores de columna.

Para obtener más información, consulta el ejemplo de traducción de esquemas en la sección Diseño de esquemas de este documento.

Tiempo de vida: las marcas de tiempo de cada elemento determinan cuándo deja de ser necesario un elemento. Después de la fecha y la hora de la marca de tiempo especificada, el elemento se elimina de la tabla sin consumir capacidad de escritura. Recolección de elementos no utilizados: las marcas de tiempo de cada celda determinan cuándo ya no se necesita un elemento. La recogida de elementos no utilizados elimina los elementos caducados durante un proceso en segundo plano denominado compactación. Las políticas de recolección de elementos no utilizados se definen a nivel de familia de columnas y pueden eliminar elementos no solo en función de su antigüedad, sino también según el número de versiones que quiera conservar el usuario. No es necesario que tengas en cuenta la capacidad de compactación al dimensionar los clústeres.

Operaciones

Las operaciones del plano de datos te permiten crear, leer, actualizar y eliminar datos de una tabla. En la siguiente tabla se comparan operaciones similares del plano de datos de DynamoDB y Bigtable.

DynamoDB Bigtable
CreateTable CreateTable
PutItem
BatchWriteItem
MutateRow
MutateRows
Bigtable trata las operaciones de escritura como upserts.
UpdateItem
  • Escritura condicional
  • Incremento y decremento

Bigtable trata las operaciones de escritura como upserts.
GetItem
BatchGetItem, Query, Scan
`ReadRow`
`ReadRows` (intervalo, prefijo, búsqueda inversa)
Bigtable admite búsquedas eficientes por prefijo de clave de fila, patrón de expresión regular o intervalo de claves de fila hacia delante o hacia atrás.

Tipos de datos

Tanto Bigtable como DynamoDB no tienen esquema. Las columnas se pueden definir en tiempo de escritura sin que se aplique a toda la tabla la existencia de columnas o los tipos de datos. Del mismo modo, el tipo de datos de una columna o un atributo puede variar de una fila o un elemento a otro. Sin embargo, las APIs de DynamoDB y Bigtable gestionan los tipos de datos de formas diferentes.

Cada solicitud de escritura de DynamoDB incluye una definición de tipo para cada atributo, que se devuelve con la respuesta de las solicitudes de lectura.

Bigtable trata todo como bytes y espera que el código del cliente conozca el tipo y la codificación para que el cliente pueda analizar las respuestas correctamente. La excepción son las operaciones de incremento, que interpretan los valores como números enteros con signo de 64 bits en formato big-endian.

En la siguiente tabla se comparan las diferencias en los tipos de datos entre DynamoDB y Bigtable.

DynamoDB Bigtable
Tipos escalares: se devuelven como tokens tipo_de_datos descriptor en la respuesta del servidor. Bytes: los bytes se convierten a los tipos previstos en la aplicación cliente.

Increment interpreta el valor como un número entero con signo de 64 bits en formato big-endian.
Conjunto: colección sin ordenar de elementos únicos. Familia de columnas: puedes usar calificadores de columna como nombres de miembros de conjuntos y, para cada uno, proporcionar un solo byte 0 como valor de celda. Los miembros de un conjunto se ordenan lexicográficamente en su familia de columnas.
Mapa: colección sin ordenar de pares clave-valor con claves únicas. Familia de columnas
Usa el calificador de columna como clave de mapa y el valor de celda como valor. Las claves de mapa se ordenan lexicográficamente.
Lista: colección ordenada de elementos. Calificador de columna
Usa la marca de tiempo de inserción para conseguir el equivalente de list_append y la marca de tiempo de inserción inversa para añadir al principio.

Diseño de esquema

Un aspecto importante que se debe tener en cuenta al diseñar un esquema es cómo se almacenan los datos. Entre las diferencias clave entre Bigtable y DynamoDB se encuentran las siguientes:

  • Actualizaciones de valores únicos
  • Ordenación de datos
  • Gestión de versiones de datos
  • Almacenamiento de valores grandes

Actualizaciones de valores únicos

Las operaciones UpdateItem en DynamoDB consumen la capacidad de escritura del mayor de los tamaños de los elementos "antes" y "después", aunque la actualización implique un subconjunto de los atributos del elemento. Esto significa que, en DynamoDB, puedes colocar columnas que se actualizan con frecuencia en filas independientes, aunque lógicamente pertenezcan a la misma fila que otras columnas.

Bigtable puede actualizar una celda con la misma eficiencia tanto si es la única columna de una fila determinada como si es una de las muchas que hay. Para obtener más información, consulta Escrituras simples.

Ordenación de datos

DynamoDB cifra y distribuye de forma aleatoria las claves de partición, mientras que Bigtable almacena las filas en orden lexicográfico por clave de fila y deja la tarea de cifrado al usuario.

La distribución aleatoria de claves no es óptima para todos los patrones de acceso. Reduce el riesgo de intervalos de filas activas, pero hace que los patrones de acceso que implican análisis que cruzan los límites de las particiones sean caros e ineficientes. Estas lecturas sin límites son habituales, sobre todo en los casos prácticos que tienen una dimensión temporal.

Para gestionar este tipo de patrón de acceso (es decir, análisis que cruzan los límites de las particiones), se necesita un índice secundario en DynamoDB, pero Bigtable lo gestiona sin necesidad de un índice secundario. Del mismo modo, en DynamoDB, las operaciones de consulta y de análisis están limitadas a 1 MB de datos analizados, por lo que se requiere paginación si se supera este límite. Bigtable no tiene este límite.

A pesar de que las claves de partición se distribuyen de forma aleatoria, DynamoDB puede seguir teniendo particiones activas si una clave de partición elegida no distribuye el tráfico de forma uniforme, lo que afecta negativamente al rendimiento. Para solucionar este problema, DynamoDB recomienda el shard de escritura, que consiste en dividir aleatoriamente las escrituras en varios valores de clave de partición lógica.

Para aplicar este patrón de diseño, debes crear un número aleatorio a partir de un conjunto fijo (por ejemplo, del 1 al 10) y, a continuación, usar este número como clave de partición lógica. Como aleatoriza la clave de partición, las escrituras en la tabla se distribuyen de forma uniforme entre todos los valores de la clave de partición.

Bigtable denomina a este procedimiento salado de claves y puede ser una forma eficaz de evitar las tablets activas.

Gestión de versiones de datos

Cada celda de Bigtable tiene una marca de tiempo y la más reciente siempre es el valor predeterminado de cualquier columna. Un caso de uso habitual de las marcas de tiempo es el control de versiones, que consiste en escribir una celda nueva en una columna que se diferencia de las versiones anteriores de los datos de esa fila y columna por su marca de tiempo.

DynamoDB no tiene este concepto y requiere diseños de esquemas complejos para admitir el control de versiones. Este método consiste en crear dos copias de cada elemento: una copia con el prefijo de número de versión cero, como v0_, al principio de la clave de ordenación, y otra copia con el prefijo de número de versión uno, como v1_. Cada vez que se actualiza el elemento, se usa el siguiente prefijo de versión superior en la clave de ordenación de la versión actualizada y se copia el contenido actualizado en el elemento con el prefijo de versión cero. De esta forma, se puede encontrar la versión más reciente de cualquier elemento usando el prefijo cero. Esta estrategia no solo requiere que se mantenga la lógica del lado de la aplicación, sino que también hace que las escrituras de datos sean muy costosas y lentas, ya que cada escritura requiere una lectura del valor anterior más dos escrituras.

Transacciones de varias filas frente a una gran capacidad de filas

Bigtable no admite transacciones de varias filas. Sin embargo, como te permite almacenar filas mucho más grandes que los elementos en DynamoDB, a menudo puedes conseguir la transaccionalidad deseada diseñando tus esquemas para agrupar los elementos relevantes en una clave de fila compartida. Para ver un ejemplo que ilustra este enfoque, consulta el patrón de diseño de una sola tabla.

Almacenar valores grandes

Como un elemento de DynamoDB, que es análogo a una fila de Bigtable, está limitado a 400 KB, para almacenar valores grandes es necesario dividir el valor en varios elementos o almacenarlo en otros medios, como S3. Ambos enfoques añaden complejidad a tu aplicación. Por el contrario, una celda de Bigtable puede almacenar hasta 100 MB y una fila de Bigtable puede admitir hasta 256 MB.

Ejemplos de traducción de esquemas

En los ejemplos de esta sección se traducen esquemas de DynamoDB a Bigtable teniendo en cuenta las diferencias de diseño de los esquemas de claves.

Migrar esquemas básicos

Los catálogos de productos son un buen ejemplo para demostrar el patrón básico de clave-valor. A continuación, se muestra cómo podría ser un esquema de este tipo en DynamoDB.

Clave principal Atributos
Clave de partición Clave de ordenación Descripción Precio Thumbnail
sombreros fedora#brandA Confeccionada con lana premium… 30 https://storage…
sombreros fedoras#brandB Lona resistente al agua y duradera diseñada para... 28 https://storage…
sombreros newsboy#brandB Añade un toque vintage a tu look diario. 25 https://storage…
zapatos zapatillas#marcaA Sal a la calle con estilo y comodidad con… 40 https://storage…
zapatos zapatillas#marcaB Características clásicas con materiales contemporáneos… 50 https://storage…

En esta tabla, la asignación de DynamoDB a Bigtable es sencilla: convierte la clave principal compuesta de DynamoDB en una clave de fila compuesta de Bigtable. Crea una familia de columnas (SKU) que contenga el mismo conjunto de columnas.

SKU
Clave de fila Descripción Precio Thumbnail
hats#fedoras#brandA Confeccionada con lana premium… 30 https://storage…
hats#fedoras#brandB Lona resistente al agua y duradera diseñada para... 28 https://storage…
hats#newsboy#brandB Añade un toque vintage a tu look diario. 25 https://storage…
zapatos#zapatillas#marcaA Sal a la calle con estilo y comodidad con… 40 https://storage…
zapatos#zapatillas#marcaB Características clásicas con materiales contemporáneos… 50 https://storage…

Patrón de diseño de una sola tabla

Un patrón de diseño de una sola tabla reúne lo que serían varias tablas en una base de datos relacional en una sola tabla en DynamoDB. Puedes seguir el enfoque del ejemplo anterior y duplicar este esquema tal cual en Bigtable. Sin embargo, es mejor abordar los problemas del esquema durante el proceso.

En este esquema, la clave de partición contiene el ID único de un vídeo, lo que ayuda a colocar todos los atributos relacionados con ese vídeo en el mismo lugar para que el acceso sea más rápido. Dadas las limitaciones de tamaño de los elementos de DynamoDB, no puedes incluir un número ilimitado de comentarios de texto libre en una sola fila. Por lo tanto, se usa una clave de ordenación con el patrón VideoComment#reverse-timestamp para que cada comentario sea una fila independiente dentro de la partición, ordenada cronológicamente de forma inversa.

Supongamos que un vídeo tiene 500 comentarios y el propietario quiere eliminarlo. Esto significa que también se deben eliminar todos los comentarios y atributos del vídeo. Para hacerlo en DynamoDB, debes analizar todas las claves de esta partición y, a continuación, enviar varias solicitudes de eliminación, iterando en cada una de ellas. DynamoDB admite transacciones de varias filas, pero esta solicitud de eliminación es demasiado grande para realizarla en una sola transacción.

Clave principal Atributos
Clave de partición Clave de ordenación UploadDate Formatos
0123 Vídeo 2023-09-10T15:21:48 {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"}
VideoComment#98765481 Content
Me gusta mucho. Los efectos especiales son increíbles.
VideoComment#86751345 Content
Parece que hay un fallo de audio en el minuto 1:05.
VideoStatsLikes Recuento
3
VideoStatsViews Recuento
156
0124 Vídeo 2023-09-10T17:03:21 {"480": "https://storage…", "720": "https://storage…"}
VideoComment#97531849 Content
He compartido esto con todos mis amigos.
VideoComment#87616471 Content
El estilo me recuerda a un director de cine, pero no sé quién es.
VideoStats ViewCount
45

Modifica este esquema a medida que migras para simplificar el código y hacer que las solicitudes de datos sean más rápidas y económicas. Las filas de Bigtable tienen mucha más capacidad que los elementos de DynamoDB y pueden gestionar un gran número de comentarios. Para gestionar un caso en el que un vídeo recibe millones de comentarios, puedes definir una política de recogida de elementos no utilizados para conservar solo un número fijo de los comentarios más recientes.

Como los contadores se pueden actualizar sin la sobrecarga de actualizar toda la fila, tampoco es necesario dividirlos. Tampoco tienes que usar una columna UploadDate ni calcular una marca de tiempo inversa y convertirla en tu clave de ordenación, ya que las marcas de tiempo de Bigtable te proporcionan los comentarios ordenados cronológicamente de forma inversa automáticamente. Esto simplifica significativamente el esquema y, si se elimina un vídeo, puedes eliminar de forma transaccional la fila del vídeo, incluidos todos los comentarios, en una sola solicitud.

Por último, como las columnas de Bigtable se ordenan lexicográficamente, puedes cambiar el nombre de las columnas para permitir un análisis rápido del intervalo (desde las propiedades del vídeo hasta los N comentarios más recientes) en una sola solicitud de lectura, que es lo que te interesa hacer cuando se carga el vídeo. Después, puedes desplazarte por el resto de los comentarios a medida que el usuario lo haga.

Atributos
Clave de fila Formatos Me gusta Visualizaciones UserComments
0123 {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"} @2023-09-10T15:21:48 3 156 Me gusta mucho. Los efectos especiales son increíbles. @ 2023-09-10T19:01:15
Parece que hay un fallo de audio en el minuto 1:05. @ 2023-09-10T16:30:42
0124 {"480": "https://storage…", "720":"https://storage…"} @2023-09-10T17:03:21 45 El estilo me recuerda a un director de cine, pero no sé quién es. @2023-10-12T07:08:51

Patrón de diseño de lista de adyacencia

Considera una versión ligeramente diferente de este diseño, que DynamoDB suele denominar patrón de diseño de lista de adyacencia.

Clave principal Atributos
Clave de partición Clave de ordenación DateCreated Detalles
Invoice-0123 Invoice-0123 2023-09-10T15:21:48 {"discount": 0.10,
"sales_tax_usd":"8",
"due_date":"2023-10-03.."}
Payment-0680 2023-09-10T15:21:40 {"amount_usd": 120, "bill_to":"John…",
"address":"123 Abc St…"}
Payment-0789 2023-09-10T15:21:31 {"amount_usd": 120, "bill_to":"Jane…",
"address":"13 Xyz St…"}
Invoice-0124 Invoice-0124 2023-09-09T10:11:28 {"discount": 0.20,
"sales_tax_usd":"11",
"due_date":"2023-10-03.."}
Payment-0327 2023-09-09T10:11:10 {"amount_usd": 180, "bill_to":"Bob…",
"address":"321 Cba St…"}
Payment-0275 2023-09-09T10:11:03 {"amount_usd": 70, "bill_to":"Kate…",
"address":"21 Zyx St…"}

En esta tabla, las claves de ordenación no se basan en el tiempo, sino en los IDs de pago, por lo que puede usar otro patrón de columna ancha y hacer que esos IDs sean columnas independientes en Bigtable, con ventajas similares al ejemplo anterior.

Factura Pago
clave de fila Detalles 0680 0789
0123 {"discount": 0.10,
"sales_tax_usd":"8",
"due_date":"2023-10-03.."}
@ 2023-09-10T15:21:48
{"amount_usd": 120, "bill_to":"John…",
"address":"123 Abc St…"} @ 2023-09-10T15:21:40
{"amount_usd": 120, "bill_to":"Jane…",
"address":"13 Xyz St…"}
@ 2023-09-10T15:21:31
clave de fila Detalles 0275 0327
0124 {"discount": 0.20,
"sales_tax_usd":"11",
"due_date":"2023-10-03.."}
@ 2023-09-09T10:11:28
{"amount_usd": 70, "bill_to":"Kate…",
"address":"21 Zyx St…"}
@ 2023-09-09T10:11:03
{"amount_usd": 180, "bill_to":"Bob…",
"address":"321 Cba St…"}
@ 2023-09-09T10:11:10

Como puede ver en los ejemplos anteriores, con el diseño de esquema adecuado, el modelo de columna ancha de Bigtable puede ser muy eficaz y ofrecer muchos casos prácticos que requerirían transacciones de varias filas costosas, indexación secundaria o un comportamiento en cascada al eliminar en otras bases de datos.

Siguientes pasos