Sommario:
- Memorizzazione nella cache dei dati in memoria
- Replica dei dati negli slave
- Modellazione dei dati nei negozi di valori-chiave
- Operando sui dati
- Valutazione dei redis
Video: Common design patterns with Azure Cosmos DB | Azure Friday 2024
Gli archivi a valore chiave in NoSQL sono tutti basati sulla velocità. È possibile utilizzare varie tecniche per massimizzare tale velocità, dai dati di memorizzazione nella cache, all'utilizzo di più copie di dati o all'utilizzo delle strutture di archiviazione più appropriate.
Memorizzazione nella cache dei dati in memoria
Poiché i dati sono facilmente accessibili quando sono archiviati nella memoria ad accesso casuale (RAM), la scelta di un archivio di valori-chiave che memorizza i dati nella RAM può velocizzare significativamente l'accesso ai dati, anche se al prezzo di maggiori costi del server.
Spesso, però, vale la pena di fare questo compromesso. Puoi facilmente calcolare quale percentuale dei tuoi dati memorizzati è richiesta frequentemente. Se sai che il cinque percento è generalmente richiesto ogni pochi minuti, prendi il cinque percento delle dimensioni dei tuoi dati e aggiungi quel numero come spazio di RAM di riserva tra i tuoi server di database.
Tenere presente che anche il sistema operativo, altre applicazioni e il server del database hanno requisiti di memoria.
Replica dei dati negli slave
Negli archivi di valori-chiave, una chiave particolare viene archiviata su uno dei server nel cluster. Questo processo è chiamato key partitioning . Ciò significa che, se questa chiave viene richiesta costantemente, questo nodo riceverà la maggior parte delle richieste. Questo nodo, quindi, sarà più lento della velocità media della richiesta, influenzando potenzialmente la qualità del servizio per gli utenti.
Per evitare questa situazione, alcuni negozi di valore-chiave supportano l'aggiunta di repliche di sola lettura, dette anche slave. Redis, Riak e Aerospike sono buoni esempi. La replica consente di archiviare la chiave più volte su più server, aumentando la velocità di risposta ma al costo di un maggior numero di hardware.
Alcuni negozi con valore chiave garantiscono che le repliche della chiave abbiano sempre lo stesso valore del master. Questa garanzia è chiamata essere pienamente coerente. Se si verifica un aggiornamento sul server master che contiene la chiave, tutte le repliche sono garantite per essere aggiornate.
Non tutti i negozi di valore-chiave garantiscono questo stato (Riak, per esempio), quindi se è importante essere aggiornati al millisecondo, quindi scegliere un database le cui repliche siano completamente coerenti (come Aerospike).
Modellazione dei dati nei negozi di valori-chiave
Molti negozi di valori-chiave supportano solo strutture base per i loro tipi di valore, lasciando al programmatore dell'applicazione il compito di interpretare i dati. Il supporto del tipo di dati semplice in genere include stringhe, numeri interi, JSON e valori binari.
Per molti casi d'uso, questo funziona bene, ma a volte è utile un accesso un po 'più granulare ai dati.Redis, ad esempio, supporta i seguenti tipi di valori di dati:
-
Stringa
-
Elenco
-
Set
-
Set ordinato
-
Mappe hash
-
Matrici bit
-
Log Hyperlog
I set ordinati possono essere interrogato per la corrispondenza di intervalli di valori - molto simile a interrogare un indice di valori ordinati per data, che è molto utile per la ricerca di un sottoinsieme di dati digitati.
Operando sui dati
Redis include operazioni per incrementare e decrementare direttamente i valori chiave, senza dover eseguire una serie di passi read-modify-update (RMU). È possibile farlo in un'unica transazione per garantire che nessun'altra applicazione modifichi il valore durante un aggiornamento. Queste operazioni specifiche del tipo di dati includono anche l'aggiunta e la rimozione di elementi in elenchi e insiemi.
È anche possibile fornire funzionalità di completamento automatico sull'interfaccia utente di un'applicazione utilizzando il comando Redis ZRANGEBYLEX. Questo comando recupera un set di chiavi che corrisponde parzialmente a una stringa. Quindi, se dovessi digitare "NoSQL for" nella barra di ricerca di un'applicazione creata su Redis, vedresti il suggerimento "NoSQL For Dummies. "
Valutazione dei redis
Redis è orgoglioso di essere un negozio di valori-chiave molto leggero ma incredibilmente veloce. È stato originariamente progettato per essere un archivio di valori-chiave in-memory, ma ora vanta l'archiviazione dei dati basata su disco.
È possibile utilizzare Redis per salvaguardare i dati abilitando la modalità AOF (aggiungi solo file) e istruendo Redis per forzare i dati su disco su ogni query (noto come fsync flushing forzato). AOF rallenta le operazioni di scrittura, ovviamente, ma fornisce un livello più alto di durabilità per i dati. Essere consapevoli, tuttavia, che è ancora possibile perdere fino a un secondo di comandi.
Inoltre, Redis ha aggiunto solo di recente il supporto per il clustering. Infatti, al momento della stesura di questo articolo, il supporto del clustering di Redis è in fase di beta testing. Fortunatamente, Redis utilizza un modello di cluster a nulla condiviso, con master per chiavi e schiavi particolari che non vengono mai scritti direttamente da un client; solo il padrone lo fa. Fornire clustering shared-nothing dovrebbe rendere più semplice per Redis implementare clustering affidabile di quanto lo sia per i database che consentono di scrivere su tutte le repliche.
Se si desidera uno strato di cache in memoria ad altissima velocità di fronte a un altro database - MongoDB o Riak sono comunemente usati con Redis - quindi valutare Redis come opzione. Man mano che il supporto per il clustering e la durabilità dei dati si evolvono, forse Redis può superare altri database di back-end.