Sommario:
Video: [VDT19] MySQL 8.0: un database SQL+NoSQL per i micro servizi by Marco Carlessi [IT] 2024
Una volta gestite le chiavi in modo appropriato, sei pronto per progettare come archiviare i dati con NoSQL e assicurarti che sia sicuro e sempre accessibile per il lavoro devi farlo
I tipi di dati nei negozi di valori-chiave
I negozi di valori-chiave di solito funzionano come & ldquo; secchi & rdquo; per dati binari. Alcuni database forniscono una forte digitazione dei dati interni e persino il supporto dello schema. Altri forniscono semplicemente comode funzioni di supporto nei loro driver client per la serializzazione di strutture dati di applicazioni comuni in un archivio di valori-chiave. Gli esempi includono mappe, elenchi e serie ordinate.
Oracle NoSQL può operare in due modalità:
-
Simple binary store
-
Supporto dello schema Avro ad alta strutturazione
Uno schema Avro è simile a uno schema di database relazionale - rafforzando un set molto severo delle regole di formato sui dati JSON (JavaScript Object Notation) memorizzati nel database, come illustrato qui:
{username: & ldquo; afowler & rdquo;, sessionid: 13452673, dal: 1408318745, tema: & ldquo; bluesky & rdquo;}
Si definisce uno schema Avro usando un documento JSON. Questo è un esempio dello schema Avro per i dati memorizzati mostrati in precedenza:
{& ldquo; Tipo & rdquo;: & ldquo; Record & rdquo;, & ldquo; namespace & rdquo;: & ldquo; com. esempio & rdquo;, & ldquo; nome & rdquo;: & ldquo; UserSession & rdquo;, & ldquo; campi & rdquo;: [{& ldquo; nome & rdquo;: & ldquo; nome utente e rdquo;, & ldquo; Tipo & rdquo;: [& ldquo; stringa & rdquo;, & rdquo; null & rdquo;]}, {& ldquo; nome & rdquo;: & ldquo; sessionid & rdquo;, & ldquo; Tipo & rdquo;: & ldquo; int & rdquo;}, {& ldquo; nome & rdquo;: & ldquo; poiché & rdquo;, & ldquo; Tipo & rdquo;: & ldquo; lungo & rdquo;}, {& ldquo; nome & rdquo;: & ldquo; tema & rdquo;, & ldquo; Tipo & rdquo;: [& ldquo; stringa & rdquo;, & rdquo; null & rdquo;]}]}
Uno schema Avro fornisce una tipizzazione molto forte nel database per quando lo schema è importante. Nell'esempio precedente, vengono visualizzati i dati di stringa, un ID di sessione numerico, una data (millisecondi, dal momento in cui Unix Time Epoch è un intero lungo) e un'impostazione di personalizzazione per il tema da utilizzare sul sito Web.
Notate inoltre che il tipo di nome utente e tema ha due opzioni - stringa e null, che è il modo in cui istruisci a Oracle NoSQL che sono consentiti valori nulli. Potresti aver lasciato theme come stringa e fornito un parametro di configurazione aggiuntivo di & ldquo; predefinito & rdquo;: & ldquo; Bluesky & rdquo;.
Altri database NoSQL forniscono indici secondari su qualsiasi proprietà arbitraria di un valore con contenuto JSON. Riak, ad esempio, fornisce indici secondari basati su partizionamento del documento - in sostanza, una proprietà nota all'interno di un documento JSON viene indicizzata con un tipo.Ciò consente query di intervallo (minori di o maggiori di) oltre a semplici confronti uguali e non uguali. Riak riesce a fornire query di intervallo senza uno schema rigoroso - solo una semplice definizione dell'indice. Se i dati sono presenti, vengono aggiunti all'indice.
Replica dei dati
La memorizzazione di più copie degli stessi dati in altri server, o persino in rack di server, aiuta a garantire la disponibilità dei dati in caso di guasto di un server. L'errore del server si verifica principalmente nello stesso cluster.
È possibile gestire le repliche in due modi principali:
- Master-slave: Tutte le letture e le scritture avvengono sul master. Gli schiavi subentrano e ricevono richieste solo se il maestro fallisce.
La replica master-slave viene in genere utilizzata negli archivi di valori-chiave conformi a ACID. Per abilitare la massima coerenza, l'archivio principale viene scritto e tutte le repliche vengono aggiornate prima del completamento della transazione. Questo meccanismo è denominato commit a due fasi e crea una rete aggiuntiva e tempo di elaborazione sulle repliche.
- Master-master: Le letture e le scritture possono avvenire su tutti i nodi che gestiscono una chiave. Non c'è il concetto di un & ldquo; primaria & rdquo; proprietario della partizione.
Le repliche master-master sono in genere coerenti con il cluster che esegue un'operazione automatica per determinare il valore più recente per una chiave e rimuovere i valori obsoleti e obsoleti.
Nella maggior parte dei negozi a valore-chiave, questo avviene lentamente - al momento della lettura. Riak è l'eccezione qui perché ha un servizio anti-entropy che verifica la coerenza durante le normali operazioni.
Dati di versioning
Per abilitare la risoluzione automatica dei conflitti, è necessario un meccanismo per indicare l'ultima versione dei dati. Eventuali negozi di valori chiave coerenti raggiungono la risoluzione dei conflitti in modi diversi.
Riak utilizza un meccanismo vettoriale per prevedere quale copia è la più recente. Altri negozi di valore-chiave utilizzano timestamp semplici per indicare la stoltezza. Quando i conflitti non possono essere risolti automaticamente, entrambe le copie dei dati vengono inviate al client. I dati in conflitto inviati al client possono verificarsi nella seguente situazione:
-
Il client 1 scrive nella replica A 'Adam: {likes: Cheese}'.
-
La replica A copia i dati nella replica B.
-
Il client 1 aggiorna i dati sulla replica A su "Adam: {likes: Cheese, hates: sunlight}".
A questo punto, la replica A non ha abbastanza tempo per copiare i dati più recenti nella replica B.
-
Il client 2 aggiorna i dati sulla replica B su "Adam: {likes: Cani, odia: canguri}".
A questo punto, replica A e replica B sono in conflitto e il cluster di database non può risolvere automaticamente le differenze.
Un meccanismo alternativo consiste nell'utilizzare i timestamp e fidarsi di loro per indicare i dati più recenti. In una situazione del genere, è logico che l'applicazione verifichi che i timestamp leggano l'ultimo valore prima di aggiornare il valore.
Controllano il controllo e impostano il meccanismo, che in pratica significa 'Se l'ultima versione è ancora la versione 2, salva la mia versione 3'. Talvolta questo meccanismo viene definito come read match update (RMU) o read match write (RMW). Questo meccanismo è il meccanismo predefinito utilizzato da Oracle NoSQL, Redis, Riak e Voldemort.