Bigtable per gli utenti di DynamoDB
Questo documento è destinato agli sviluppatori e al database DynamoDB amministratori che vogliono eseguire la migrazione o progettare per l'uso con Bigtable come datastore. Prima di leggere Per questo documento, leggi la panoramica di Bigtable.
Bigtable e DynamoDB sono archivi chiave-valore distribuiti che supportano milioni di query al secondo (QPS), forniscono uno spazio di archiviazione scalabile e petabyte di dati e tollerano errori dei nodi.
Sebbene gli insiemi di funzionalità di questi servizi di database siano simili, le loro architetture sottostanti e i dettagli dell'interazione differiscono che è importante comprendere prima di iniziare una migrazione. Questo documento evidenzia le somiglianze e le differenze tra i due sistemi di database.
Piano di controllo
In DynamoDB e Bigtable, il piano di controllo consente di configurare la tua capacità e configurare e gestire le risorse. DynamoDB è un prodotto serverless, mentre il livello più alto di interazione con DynamoDB è il livello della tabella. Nel in modalità di provisioning della capacità, è qui che esegui il provisioning le unità di richiesta, selezionare le regioni e la replica e gestire i backup. Bigtable non è un prodotto serverless, devi creare un'istanza con uno o più cluster, la cui capacità è determinata dal numero di nodi che hanno. Per maggiori dettagli su queste risorse, consulta Istanze, cluster e nodi.
La tabella seguente mette a confronto le risorse del piano di controllo per DynamoDB e Bigtable.
DynamoDB | Bigtable |
---|---|
Tabella : una raccolta di elementi con un'entità principale definita chiave. Le tabelle hanno impostazioni per i backup, replication e capacity. | Istanza: un gruppo di cluster Bigtable
in diverse zone o regioni Google Cloud, tra cui repliche
e il routing della connessione. I criteri di replica vengono impostati
a livello di istanza. Cluster: un gruppo di nodi nella stessa area geografica Zona Google Cloud, idealmente collocata con la tua applicazione per motivi di latenza e replica. La capacità è gestita da modificando il numero di nodi in ogni cluster. Tabella: un'organizzazione logica di valori indicizzati per chiave di riga. I backup vengono controllati a livello di tabella. |
Unità di capacità di lettura (RCU) e unità di capacità di scrittura (WCU):
Unità che consentono letture o scritture al secondo con valore fisso
la dimensione del payload. Ti vengono addebitate unità di lettura o scrittura per
operativa con payload di dimensioni maggiori. Le operazioni UpdateItem consumano la capacità di scrittura utilizzata per l'esecuzione
taglia più grande di un articolo aggiornato, prima o dopo l'aggiornamento,
anche se l'aggiornamento interessa un sottoinsieme degli attributi dell'articolo. |
Nodo: una risorsa di computing virtuale responsabile
per la lettura e la scrittura dei dati. Il numero di nodi di un cluster
si traduce in limiti di velocità effettiva per letture, scritture e scansioni. Puoi
regolare il numero di nodi, a seconda della combinazione
gli obiettivi di latenza, il numero di richieste
e le dimensioni del payload. I nodi SSD offrono la stessa velocità effettiva per le operazioni di lettura e scrittura, a differenza la differenza significativa tra RCU e WCU. Per ulteriori informazioni, consulta Prestazioni per carichi di lavoro tipici. |
Partizione : un blocco di righe contigue, supportato da
Unità a stato solido (SSD) collocate insieme ai nodi. Ogni partizione è soggetta a un limite fisso di 1.000 WCU, 3.000 RCU, e 10 GB di dati. |
Tablet: un blocco di righe contigue, circondato dal simbolo
il mezzo di archiviazione prescelto (SSD o HDD). Lo sharding delle tabelle viene eseguito in tablet per bilanciare il carico di lavoro. I tablet sono non è archiviato sui nodi in Bigtable, ma file system distribuito, che consente una rapida ridistribuzione dei dati durante la scalabilità e offre ulteriore durabilità mantenendo più copie. |
Tabelle globali: un modo per aumentare disponibilità e durabilità dei dati mediante la propagazione automatica delle modifiche ai dati in più regioni. | Replica: un modo per aumentare la disponibilità e durabilità dei dati mediante la propagazione automatica delle modifiche ai dati in più regioni o in più zone all'interno dello stesso regione. |
Non applicabile (N/A) | Profilo applicazione: impostazioni che indicano Bigtable come instradare una chiamata API client il cluster appropriato nell'istanza. Puoi usare anche un profilo dell'app come tag per segmentare le metriche per l'attribuzione. |
Replica geografica
La replica viene utilizzata per soddisfare i requisiti dei clienti per quanto segue:
- Disponibilità elevata per la continuità aziendale in caso di problemi a livello di zona a livello di regione.
- Mettere i dati di servizio vicini agli utenti finali per e a bassa latenza, ovunque si trovino nel mondo.
- Isolamento dei carichi di lavoro quando è necessario implementare un carico di lavoro batch su uno e si affidano alla replica nei cluster di gestione.
Bigtable supporta i cluster replicati in tante zone disponibili in un massimo di 8 regioni Google Cloud in cui Bigtable è disponibile. La maggior parte delle regioni ha tre zone. Bigtable replica automaticamente i dati nei cluster in un topologia multi-primaria, vale a dire che consente di leggere e scrivere su qualsiasi cluster. La replica di Bigtable è alla fine coerente. Per maggiori dettagli, vedi il Panoramica della replica.
DynamoDB fornisce tabelle globali per supportare la replica delle tabelle in più regioni. Le tabelle globali sono multi-principale e la replica automatica tra regioni. La replica è alla fine coerente.
La tabella seguente elenca i concetti di replica e ne descrive la disponibilità in DynamoDB e Bigtable.
Proprietà | DynamoDB | Bigtable |
---|---|---|
Replica multi-primaria | Sì. Puoi leggere e scrivere in qualsiasi tabella globale. |
Sì. Puoi leggere e scrivere su qualsiasi cluster Bigtable. |
Modello di coerenza | Coerenza finale. Coerenza di Read-your-writes a livello di regione per le operazioni globali tabelle. |
Coerenza finale. Coerenza read-your-write a livello di cluster per tutti a condizione che invii operazioni di lettura e scrittura allo stesso cluster. |
Latenza di replica | Nessun accordo sul livello del servizio (SLA). Secondi |
Nessuno SLA (accordo sul livello del servizio). Secondi |
Granularità della configurazione | A livello di tabella. | Livello di istanza. Un'istanza può contenere più tabelle. |
Implementazione | Crea una tabella globale con una replica della tabella in ogni tabella selezionata
regione. Livello regionale. Replica automatica tra le repliche convertendo una tabella in una una tabella globale. Le tabelle devono avere i flussi DynamoDB abilitati, con il flusso contenente sia la nuova che la vecchia immagine dell'articolo. Elimina una regione per rimuovere la tabella globale al suo interno. |
Creare un'istanza con più di un cluster. La replica è automatica tra i cluster dell'istanza. Livello di zona. Aggiungi e rimuovi cluster da Bigtable in esecuzione in un'istanza Compute Engine. |
Opzioni di replica | Per tabella. | Per istanza. |
Routing del traffico e disponibilità | Traffico instradato alla replica geografica più vicina. In caso di errore, viene applicata una logica di business personalizzata per determinare quando reindirizzare le richieste ad altre regioni. |
Utilizza i profili delle applicazioni per configurare
di routing del traffico del cluster. Utilizza il routing multi-cluster per instradare automaticamente il traffico nel cluster integro più vicino. In caso di errore, Bigtable supporta per l'alta disponibilità tra cluster. |
Scalabilità | La capacità di scrittura nelle unità di richiesta di scrittura replicate (R-WRU) è
sincronizzati tra le repliche. La capacità di lettura nelle unità di capacità di lettura replicata (R-RCU) è per replica. |
Puoi scalare i cluster in modo indipendente aggiungendo o rimuovendo nodi a ciascun cluster replicato, come richiesto. |
Costo | Le R-WRU costano il 50% in più rispetto alle normali WRU. | Ti vengono addebitati i costi per i nodi e lo spazio di archiviazione di ciascun cluster. Non sono previsti costi di replica di rete per la replica a livello di regione tra zone diverse. Vengono addebitati costi se la replica avviene in più regioni o continenti. |
SLA (accordo sul livello del servizio) | 99,999% | 99,999% |
Piano dati
La tabella seguente confronta i concetti dei modello dei dati per DynamoDB e Bigtable. Ogni riga della tabella descrive caratteristiche analoghe. Ad esempio, un elemento in DynamoDB è simile a una riga in Bigtable.
DynamoDB | Bigtable |
---|---|
Articolo : un gruppo di attributi univoci identificabile tra tutti gli altri elementi dalla sua chiave primaria. Massima è 400 kB. | Riga : una singola entità identificata dalla chiave di riga. La dimensione massima consentita è 256 MB. |
N/D | Famiglia di colonne:uno spazio dei nomi specificato dall'utente che gruppi. |
Attributo : un raggruppamento di un nome e un valore. Un può essere un tipo scalare, un insieme o un documento. Non sono presenti esplicito limite per le dimensioni degli attributi stessi. Tuttavia, poiché ogni elemento è limitato a 400 kB, per un articolo che ha un solo attributo, può essere fino a 400 kB meno le dimensioni occupate dall'attributo del nome dell'attributo. | Qualificatore di colonna : l'identificatore univoco all'interno di un
famiglia di colonne per una colonna. L'identificatore completo di una colonna è
espresso come colonna-famiglia:colonna-qualificatore. I qualificatori di colonna sono
ordinate in modo grammaticale all'interno della famiglia di colonne. La dimensione massima consentita per un qualificatore di colonna è 16 kB. Cella:una cella contiene i dati di una determinata riga, colonna, e timestamp. Una cella contiene un valore che non può superare i 100 MB. |
Chiave principale : un identificatore univoco di un elemento in una
. Può essere una chiave di partizione o una chiave composita. Chiave di partizione: una chiave primaria semplice, composta da una . Questo determina la partizione fisica in cui l'elemento si trova individuarlo. La dimensione massima consentita è 2 kB. Chiave di ordinamento: una chiave che determina l'ordine delle righe. all'interno di una partizione. La dimensione massima consentita è 1 kB. Chiave composita: una chiave primaria composta da due la chiave di partizione e una chiave di ordinamento o un attributo di intervallo. |
Chiave di riga : un identificatore univoco per un elemento in una tabella.
In genere è rappresentato da una concatenazione di valori e delimitatori.
La dimensione massima consentita è 4 kB. È possibile utilizzare i qualificatori di colonna per pubblicare il comportamento equivalente a quella della chiave di ordinamento di DynamoDB. Le chiavi composte possono essere create utilizzando righe concatenate e dei qualificatori di colonna. Per ulteriori dettagli, vedi l'esempio di traduzione dello schema nella sezione nella sezione dedicata alla progettazione di questo documento. |
Durata : i timestamp per elemento determinano quando un non è più necessario. Dopo la data e l'ora del timestamp, l'elemento viene eliminato dalla tabella senza consumare in scrittura. | Raccolta di rifiuti : i timestamp per cella stabiliscono quando un articolo non è più necessario. Operazioni di eliminazione della garbage collection scadute durante un processo in background chiamato compattazione. Rifiuti I criteri di raccolta sono impostati a livello di famiglia di colonne e possono eliminare articoli non solo in base all'età, ma anche in base al numero di versioni che l'utente desidera mantenere. Non è necessario soddisfare di compattazione durante il dimensionamento dei cluster. |
Operazioni
Le operazioni del piano dati consentono di eseguire la creazione, la lettura, l'aggiornamento e l'eliminazione (CRUD) azioni sui dati di una tabella. La tabella seguente mette a confronto un piano dati simile operazioni per DynamoDB e Bigtable.
DynamoDB | Bigtable |
---|---|
CreateTable |
CreateTable |
PutItem BatchWriteItem |
MutateRow MutateRows Bigtable tratta le operazioni di scrittura come upsert. |
UpdateItem
|
Bigtable tratta le operazioni di scrittura come upsert. |
GetItem BatchGetItem , Query e Scan |
`ReadRow `' ReadRows ' (intervallo, prefisso, scansione inversa)Bigtable supporta un'analisi efficiente per prefisso della chiave di riga, un pattern con espressioni regolari o un intervallo di chiave di riga in avanti o indietro. |
Tipi di dati
Sia Bigtable che DynamoDB sono senza schema. È possibile definire le colonne in fase di scrittura senza applicare l'applicazione forzata a livello di tabella per i dati o l'esistenza delle colonne di testo. Analogamente, un dato tipo di dati di una colonna o di un attributo può differire rispetto a una singola riga o un elemento a un altro. Tuttavia, le API DynamoDB e Bigtable con i tipi di dati in vari modi.
Ogni richiesta di scrittura DynamoDB include una definizione del tipo per ogni attributo, che viene restituito con la risposta per le richieste di lettura.
Bigtable tratta tutto come byte e si aspetta il codice client per conoscere il tipo e la codifica in modo che il client possa analizzare correttamente le risposte. Un'eccezione è incrementa operazioni, che interpretano i valori come numeri interi con segno big-endian a 64 bit.
La tabella seguente confronta le differenze nei tipi di dati tra DynamoDB e Bigtable.
DynamoDB | Bigtable |
---|---|
Tipi scala: restituiti come tipo di dati. descrittori nella risposta del server. | Byte : i byte vengono trasmessi ai tipi previsti nel client.
un'applicazione. Increment interpreta il valore come Numero intero con segno big-endian a 64 bit |
Insieme : una raccolta non ordinata di contenuti unici. elementi. | Famiglia di colonne. Puoi utilizzare i qualificatori di colonna come impostati i nomi dei membri e, per ciascuno, fornire un singolo byte 0 come valore. I membri dell'insieme sono ordinati in ordine grammaticale all'interno della loro colonna famiglia. |
Mappa: una raccolta non ordinata di coppie chiave/valore con chiavi univoche. | Famiglia di colonne Utilizza il qualificatore di colonna come chiave di mappa e valore della cella per il valore. Chiavi della mappa sono in ordine grammaticale. |
Elenco : una raccolta ordinata di elementi. | Qualificatore colonna Utilizza il timestamp di inserimento per ottenere l'equivalente di list_append il comportamento inverso, inverso rispetto all'inserimento del timestamp per l'anteposizione. |
Progettazione dello schema
Una considerazione importante nella progettazione dello schema è il modo in cui vengono archiviati i dati. Tra le le differenze chiave tra Bigtable e DynamoDB sono il modo in cui le seguenti:
- Aggiornamenti a singoli valori
- Ordinamento dei dati
- Controllo delle versioni dei dati
- Archiviazione di valori grandi
Aggiornamenti a singoli valori
Le operazioni UpdateItem
in DynamoDB consumano la capacità di scrittura per il maggiore tra
il "prima" e "dopo" le taglie degli articoli anche se l'aggiornamento riguarda un sottoinsieme del
attributi dell'articolo. Ciò significa che in DynamoDB, potresti inserire aggiornamenti
colonne in righe separate, anche se logicamente appartengono alla stessa riga con
altre colonne.
Bigtable può aggiornare una cella con la stessa efficienza solo colonna in una determinata riga o una tra molte migliaia. Per maggiori dettagli, vedi Scritture semplici.
Ordinamento dei dati
DynamoDB esegue l'hashing e distribuisce in modo casuale le chiavi di partizione, mentre Bigtable archivia le righe in ordine lessicografico per chiave di riga e lascia qualsiasi hashing all'utente.
La distribuzione delle chiavi casuali non è ottimale per tutti i pattern di accesso. Riduce rischio di intervalli di riga diretta, ma crea pattern di accesso che coinvolgono scansioni oltre i confini, costoso e inefficiente. Queste analisi illimitate vengono comuni, in particolare per i casi d'uso che prevedono una dimensione temporale.
Gestione di questo tipo di pattern di accesso: analisi delle partizioni limiti: richiede un indice secondario in DynamoDB, Bigtable gestisce tutto senza bisogno di un indice secondario. Analogamente, in DynamoDB, le operazioni di query e scansione sono limitate a 1 MB di dati scansionati, richiedendo un'impaginazione oltre questo limite. Bigtable non ha tale limite.
Nonostante le sue chiavi di partizione distribuite casualmente, DynamoDB può comunque avere partizioni se una chiave di partizione scelta non distribuisce uniformemente il traffico influisce negativamente sulla velocità effettiva. Per risolvere questo problema, DynamoDB consiglia write-sharding, che consente di suddividere in modo casuale le scritture su più partizioni logiche le coppie chiave-valore.
Per applicare questo pattern di progettazione, devi creare un numero casuale da un (ad esempio, da 1 a 10), quindi utilizzare questo numero come partizione logica chiave. Poiché stai randomizzando la chiave di partizione, le scritture nella tabella vengono distribuiti in modo uniforme tra tutti i valori delle chiavi di partizione.
Bigtable si riferisce a questa procedura come salatura della chiave, e può essere un modo efficace per evitare i tablet caldi.
Controllo delle versioni dei dati
Ogni cella Bigtable ha un timestamp e quello più recente è sempre il valore predefinito per ogni colonna specificata. Un caso d'uso comune per i timestamp sono il controllo delle versioni, ovvero la scrittura di una nuova cella in una colonna differenziate dalle versioni precedenti dei dati per la riga e la colonna in questione timestamp.
DynamoDB non ha un concetto del genere e richiede
progettazioni di schemi complessi
per supportare il controllo delle versioni. Questo approccio comporta la creazione di due copie di ciascun elemento:
una copia con il prefisso zero del numero di versione, ad esempio v0_
, all'inizio
della chiave di ordinamento e un'altra copia con il prefisso del numero di versione di uno, come
v1_
. Ogni volta che l'elemento viene aggiornato, viene utilizzato il prefisso della versione successivo
la chiave di ordinamento della versione aggiornata e copia i contenuti aggiornati nell'elemento
con prefisso zero. In questo modo ti assicuri che la versione più recente di qualsiasi elemento
essere posizionato utilizzando il prefisso zero. Questa strategia non richiede solo
della logica lato applicazione da mantenere, ma rende anche le scritture di dati molto costose e
lenta, perché ogni scrittura richiede una lettura del valore precedente più due
scrive.
Transazioni su più righe e capacità di righe elevata
Bigtable non supporta le transazioni su più righe. Tuttavia, poiché puoi archiviare righe molto più grandi degli elementi DynamoDB, spesso puoi ottenere la transazionalità prevista progettando gli schemi per raggruppare gli elementi pertinenti in una chiave di riga condivisa. Per un un esempio di questo approccio. Consulta Progettazione di una tabella singola .
Archiviazione di valori grandi
Poiché un elemento DynamoDB, analogo a una riga Bigtable, viene limitato a 400 kB, l'archiviazione di valori di grandi dimensioni richiede la suddivisione del valore tra elementi o archiviazione su altri contenuti multimediali, come S3. Entrambi di questi approcci aggiungono complessità alla tua applicazione. Al contrario, un Una cella Bigtable può archiviare fino a 100 MB può supportare fino a 256 MB.
Esempi di traduzione di schemi
Gli esempi in questa sezione traducono gli schemi da DynamoDB in Bigtable tenendo presenti le principali differenze di progettazione dello schema.
Migrazione degli schemi di base
I cataloghi di prodotti sono un buon esempio per dimostrare il pattern di base delle coppie chiave-valore. Di seguito è riportato l'aspetto di uno schema di questo tipo in DynamoDB.
Chiave primaria | Attributi | |||
---|---|---|---|---|
Chiave di partizione | Chiave di ordinamento | Descrizione | Prezzo | Miniatura |
cappelli | fedora#brandA | Realizzato in lana di alta qualità... | 30 | https://storage… |
cappelli | fedora#brandB | Tela resistente e resistente all'acqua realizzata per... | 28 | https://storage… |
cappelli | tribù#brandB | Aggiungi un tocco di fascino vintage al tuo look di tutti i giorni. | 25 | https://storage… |
scarpe | sneakers#brandA | Esci con stile e comfort con... | 40 | https://storage… |
scarpe | sneakers#brandB | Caratteristiche classiche con materiali contemporanei... | 50 | https://storage… |
Per questa tabella, il mapping da DynamoDB a Bigtable diretta: converti la chiave primaria composita di DynamoDB in un Chiave di riga Bigtable. Crei una famiglia di colonne (SKU) che contiene lo stesso insieme di colonne.
SKU | |||
---|---|---|---|
Chiave di riga | Descrizione | Prezzo | Miniatura |
cappelli#fedora#brandA | Realizzato in lana di alta qualità... | 30 | https://storage… |
cappelli#fedora#brandB | Tela resistente e resistente all'acqua realizzata per... | 28 | https://storage… |
cappelli#ragazzo#brandB | Aggiungi un tocco di fascino vintage al tuo look di tutti i giorni. | 25 | https://storage… |
scarpe#sneakers#brandA | Esci con stile e comfort con... | 40 | https://storage… |
scarpe#sneakers#brandB | Caratteristiche classiche con materiali contemporanei... | 50 | https://storage… |
Pattern di progettazione a tabella singola
Un singolo pattern di progettazione di tabella riunisce quelle che sarebbero più tabelle in un database relazionale in un'unica tabella in DynamoDB. Puoi adottare l'approccio nell'esempio precedente e duplica questo schema così com'è Bigtable. Tuttavia, è meglio risolvere i problemi dello schema durante il processo.
In questo schema, la chiave di partizione contiene l'ID univoco di un video, che
aiuta a posizionare tutti gli attributi correlati al video per un accesso più rapido. Dato
Limitazioni delle dimensioni degli articoli di DynamoDB: non puoi inserire un numero illimitato di testo libero
commenti in una singola riga. Di conseguenza, una chiave di ordinamento con il pattern
VideoComment#reverse-timestamp
viene utilizzato per creare una riga separata per ogni commento
all'interno della partizione, in ordine cronologico inverso.
Supponiamo che questo video abbia 500 commenti e che il proprietario voglia rimuoverlo. Ciò significa che dovranno essere eliminati anche tutti i commenti e gli attributi dei video. Per farlo in DynamoDB, devi eseguire la scansione di tutte le chiavi all'interno di questa partizione quindi inviare più richieste di eliminazione, ripetendole. DynamoDB supporta su più righe, ma questa richiesta di eliminazione è troppo grande per essere eseguita in una transazione.
Chiave primaria | Attributi | |||
---|---|---|---|---|
Chiave di partizione | Chiave di ordinamento | UploadDate | Formati | |
0123 | Video | 2023-09-10T15:21:48 | {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage..."} | |
Commento video#98765481 | Contenuti | |||
Mi piace molto. Gli effetti speciali sono incredibili. | ||||
CommentovideoN.86751345 | Contenuti | |||
Sembra che si sia verificato un problema audio alle ore 1:05. | ||||
VideoStatsLikes | Numero | |||
3 | ||||
VideoStatsViews | Numero | |||
156 | ||||
0124 | Video | 2023-09-10T17:03:21 | {"480": "https://storage…", "720": "https://storage…"} | |
Commento video#97531849 | Contenuti | |||
L'ho condiviso con tutti i miei amici. | ||||
Commentovideo#87616471 | Contenuti | |||
Lo stile mi ricorda un regista ma non riesco a capirlo li annotino. | ||||
VideoStats | ViewCount | |||
45 |
Modifica questo schema durante la migrazione in modo da semplificare il codice e rendere le richieste di dati in modo più rapido ed economico. Le righe Bigtable sono molto più grandi rispetto agli elementi DynamoDB e può gestire un numero elevato di commenti. A se un video riceve milioni di commenti, puoi impostare un norme di raccolta dei dati per mantenere solo un numero di commenti più recenti.
Perché i contatori possono essere aggiornati senza l'overhead associato all'aggiornamento dell'intero riga di comando, non devi neanche suddividerle. Non è necessario utilizzare una data di caricamento colonna o di calcolare un timestamp inverso e fare in modo che la chiave di ordinamento perché i timestamp di Bigtable offrono cronologicamente inversi automaticamente i commenti in ordine. Ciò semplifica notevolmente lo schema e, se un video viene rimosso, puoi rimuovere la riga del video a livello transazionale, includendo tutti i commenti, in un'unica richiesta.
Infine, le colonne in Bigtable sono ordinate a livello didattico, come ottimizzazione, puoi rinominare le colonne in modo consente una scansione rapida, dalle proprietà video ai primi N più recenti commenti, in un'unica richiesta di lettura, che è l'azione che è meglio eseguire quando caricamento del video. In seguito, puoi sfogliare il resto dei commenti come l'utente scorre la pagina.
Attributi | ||||
---|---|---|---|---|
Chiave di riga | Formati | Mi piace | Viste | UserComments |
0123 | {"480": "https://storage…", "720": "https://storage…", "1080p": "https://storage…"} @2023-09-10T15:21:48 | 3 | 156 | Mi piace molto. Gli effetti speciali sono incredibili. @
2023-09-10T19:01:15 Sembra che si sia verificato un problema audio alle ore 1:05. @ 2023-09-10T16:30:42 |
0124 | {"480": "https://storage…", "720":"https://storage…"} @2023-09-10T17:03:21 | 45 | Lo stile mi ricorda un regista ma non riesco a capirlo li annotino. @2023-10-12T07:08:51 |
Pattern di progettazione dell'elenco di adiacenti
Considera una versione leggermente diversa di questo design, che spesso DynamoDB si riferisce a come il pattern di progettazione dell'elenco di adiacenti.
Chiave primaria | Attributi | |||
---|---|---|---|---|
Chiave di partizione | Chiave di ordinamento | DateCreated | Dettagli | |
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":"Via Cavour 32..."} |
||
Payment-0275 | 2023-09-09T10:11:03 | {"amount_usd": 70, "bill_to":"Kate…", "address":"Via Cavour 21..."} |
In questa tabella, le chiavi di ordinamento non sono basate sull'ora, ma piuttosto sugli ID pagamento, puoi utilizzare un pattern a colonne larghe diverso e separare questi ID colonne in Bigtable, con vantaggi simili esempio.
Fattura | Pagamento | |||
---|---|---|---|---|
chiave di riga | Dettagli | 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 |
|
chiave di riga | Dettagli | 0275 | 0327 | |
0124 | {"discount": 0.20, "sales_tax_usd":"11", "due_date":"2023-10-03.."} @ 09-09-2023T10:11:28 |
{"amount_usd": 70, "bill_to":"Kate…", "address":"Via Cavour 21..."} @ 09-09-2023T10:11:03 |
{"amount_usd": 180, "bill_to":"Bob…", "address":"Via Cavour 321..."} @ 09-09-2023T10:11:10 |
Come puoi vedere negli esempi precedenti, con la progettazione dello schema corretta, Il modello a colonne larghe di Bigtable può essere piuttosto potente e fornire molti casi d'uso che richiederebbero costose transazioni multiriga, il comportamento a cascata dell'indicizzazione o all'eliminazione in altri database.
Passaggi successivi
- Informazioni Progettazione dello schema Bigtable.
- Scopri di più sulla Emulatore Bigtable.
- Esplora le architetture di riferimento, i diagrammi e le best practice su in Google Cloud. Dai un'occhiata al nostro Centro architetture cloud.