Quando dovrei prendere in considerazione l'utilizzo di un database in memoria e quali sono i problemi a cui prestare attenzione?

StackOverflow https://stackoverflow.com/questions/1593692

Domanda

Stavo solo pensando che ora lo è comune avere abbastanza RAM sul server del database per memorizzare nella cache l'intero database perché sono gli specialisti in banca dati della memoria (per esempio TimesTen, Guarda anche Pagina Wikipedia) che andavano di moda qualche anno fa e non venivano più utilizzati?

Sembra che col passare del tempo, i database basati su disco non vengano utilizzati meno, ad esempio la maggior parte delle applicazioni sono ora basate su database razionali convenzionali.Mi sarei aspettato il contrario poiché la RAM si sta avvicinando alla disponibilità per molti server.

Lo sto chiedendo, poiché ho appena letto l'architettura stack-overflow e la pagina dice

Ciò è significativo perché il database di Stack Overflow è quasi completamente in RAM e i join sono ancora un costo troppo alto.

Ma non penso che questo sarebbe un problema se venissero usati “puntatori” e “raccolte” invece del normale btree.Btree è molto intelligente per aggirare i limiti sulla velocità di accesso al disco, ad esempio scambiano l'utilizzo della CPU per ridurre l'utilizzo del disco.Tuttavia ora abbiamo una ram così adatta.

Ma abbiamo ancora bisogno di un database, come crearne uno tuo

  • Chiusura
  • Rilevamento dello stallo
  • Registrazione delle transazioni
  • Recupero
  • Eccetera

È molto difficile.

@S.Lott, dato che passiamo tutti così tanto tempo a scegliere gli indici, evitare join e indagare sui problemi di prestazioni del database.Ci deve essere un modo migliore.Alcuni anni fa ci è stato detto che i “database in memoria” erano il modo migliore.Quindi, prima di iniziare a usarne uno ecc., Vorrei sapere perché altre persone non li usano di più.

(È improbabile che utilizzi TimesTen da solo, poiché ha un prezzo elevato ($ 41.500,00 / Processore) e non mi piace parlare con gli addetti alle vendite Oracle: preferisco passare il tempo a scrivere codice.)

Guarda anche:

Aggiornamento:

Ho fatto questa domanda a LUNGO tempo fa, oggigiorno Microsoft SQL Server ha "OLTP in memoria" ovvero un motore di database ottimizzato per la memoria integrato nel motore SQL Server.Non è economico, ma sembra esserlo molto veloce per alcuni carichi di lavoro.

È stato utile?

Soluzione

Molto probabilmente ci sono solo prodotti maturi di basi di dati di memoria che potrebbero essere utilizzati come una sostituzione completa per un database classica.

di database relazionali sono un concetto molto vecchio. Anche se ci sono stati molti approcci per andare avanti e sviluppare nuove tecnologie, ad esempio. i database orientati agli oggetti, i database relazionali in realtà non cambiano i loro concetti. Non aspettatevi che le cose cambino troppo in fretta, dal momento che i database non sono cambiati molto negli ultimi dieci o quindici anni o anche di più.

Credo, sviluppo di tecnologie non è veloce come si potrebbe credere. Ci vogliono decenni per i nuovi concetti di merito maturate e stabilito. Prima di tutto in tecnologie di database, dove la maturità è molto più importante di ogni altra cosa.

In dieci o venti anni, i database non sono probabilmente più lo stesso come lo sono oggi. Se in-memory database sono il futuro - nessuno può dire questo di oggi -. Hanno solo bisogno di un po 'di tempo per sviluppare

Altri suggerimenti

Nessuno ha davvero risposto alla domanda "Quando devo considerare l'utilizzo di un in-memory database e quali sono il problema di guardare fuori per?" così ho deciso di dargli un andare.

Si dovrebbe prendere in considerazione un database in memoria se:   1. Il sistema di destinazione dispone di dati da gestire, ma non supporti persistenti   2. Il requisito prestazioni semplicemente non può essere soddisfatta con un database persistente

Per 1 #, pensare al TV Guide nel set-top box (STB). STB fascia bassa (cioè quelli senza capacità DVR) non hanno memoria permanente, e non necessitano di memorizzazione persistente. Ma il database per una guida TV 400 canali, di 14 giorni non è banale. C'è un requisito di prestazione, anche qui, perché i dati arrivano dalla giostra transponder ad alta velocità ed è un caso di 'catturare o attendere che la giostra viene intorno di nuovo'. Ma non c'è bisogno per la persistenza. Abbiamo visto tutti questo; quando si perde il potere a casa vostra, quando si tratta di nuovo sulla TV Guide dice "sarà disponibile a breve" perché si è provisioning dal transponder o il cavo head-end. router di rete condividono le stesse caratteristiche: no archiviazione permanente, hanno bisogno di essere veloce, e il database può essere fornito da una fonte esterna (peer router sulla rete, in questo caso, per ripopolare la tabella di routing)

.

Ci sono infiniti esempi di # 2:. In tempo reale con i clienti destinati a sistemi militari, sistemi di trading ad alta frequenza, e molto altro ancora

Per quanto riguarda la seconda parte della domanda, "questione di guardare fuori per":. Ci sono molti

Assicurarsi che si sta valutando un vero e proprio database in memoria, se avete bisogno di prestazioni che solo un database in memoria in grado di fornire. La memorizzazione nella cache di un database persistente non è la stessa. Lanciare un database persistente una RAM-drive non è la stessa. L'utilizzo di un database in memoria che fa intrinsecamente registrazione delle transazioni (come TimesTen) non è lo stesso (anche se si accede a / dev / null).

Assicurarsi che si sta valutando un sistema di database, e non semplicemente una cache (ad esempio memcache). Un sistema di database avrà il supporto per le operazioni con le proprietà ACID, molteplici opzioni di indicizzazione, sostenere l'accesso simultaneo, e altro ancora.

A proposito di ACID: in memoria sistemi di database non manca la 'D' (durata). Si deve semplicemente essere presa nel contesto. Le transazioni in un database persistente sono durevoli solo fino a quando i mezzi di comunicazione è memorizzato su è durevole. La stessa cosa vale per i database in-memory. In entrambi i casi, se vi preoccupate per la durevolezza, è meglio avere una copia di backup.

La tendenza sembra essere quella di memorizzare nella cache in modo aggressivo e utilizzare il database per popolare la cache. Indipendentemente da dove la vita di database, si unisce sono ancora costosi, quindi la preferenza sembra essere quello di fare il join una volta e memorizzare nella cache il risultato in qualcosa come Memcached o Velocity .

Ci sono ancora in memoria banche dati di tutto e sono utilizzati, ma dipende dal contesto che si desidera utilizzarli. SQLite per esempio viene spesso utilizzato come database in memoria durante il test livelli di dati.

La ragione più importante è la cultura del carico, e il livello molto basso conoscenze nel settore IT. La maggior parte delle applicazioni funzionano abbastanza bene qualunque sia la soluzione di persistenza utilizzato, e come i computer sono ancora sempre più veloci ogni anno, non abbastanza persone sentono il dolore e sono in grado di individuare il problema.

Microsoft e Oracle fanno troppi soldi con i loro prodotti di database per rendere più (politicamente) possibile per loro di venire con approcci migliori.

I costi di sviluppo di utilizzo di un database relazionale non sono fatti in modo trasparente la gestione non ha idea che ci sia un problema, per non parlare di una soluzione.

Bene, i database in memoria generalmente non dispongono di D (durabilità) dentro ACIDO (atomicità, consistenza, isolamento, durabilità) per loro stessa natura.Questo problema può essere superato in una certa misura con approcci "ibridi", tuttavia, a un certo punto qualcosa (i dati stessi o un registro delle transazioni) deve essere persistente in qualche luogo per fornire l'aspetto della durabilità.Ciò può generalmente rallentare le prestazioni o introdurre altre proprietà non desiderabili in una soluzione di database in memoria

Al contrario, la maggior parte degli RDBMS odierni dispone della gamma completa di ACID, oltre ad avere alle spalle molti decenni di sviluppo.Ciò ha portato a sistemi di database basati su disco che sono molto performanti, soprattutto con i molti anni di miglioramenti e ottimizzazioni che i moderni sistemi RDBMS hanno visto (il tuo BTree esempio è solo uno dei tanti).

Un altro fattore è la nostra capacità come sviluppatori di applicazioni di ridurre il carico sul database attraverso meccanismi come memorizzazione nella cache, comprimendo così molto di più percepito prestazioni dal livello dati di un'applicazione.In effetti, la memorizzazione nella cache stessa ha visto ampi sviluppi negli ultimi anni con la memorizzazione nella cache distribuita che è comune al giorno d'oggi (basta guardare il numero di utenti di memcached, Per esempio).

Ironicamente, i moderni sistemi di caching si stanno lentamente trasformando, in molti modi, in qualcosa di simile a un vero sistema di database in memoria.I database in memoria, come i database orientati agli oggetti, sono in gran parte i "nuovi ragazzi sul blocco", quindi sarà interessante vedere dove andrà tutto questo nel tempo.Oracle ha ora acquisito TimesTen e, secondo questo articolo di Wikipedia, Microsoft sta cercando di entrare molto presto nel mercato dei database in-memory.Si tratta di due "grandi attori" moderni nel campo RDBMS tradizionale che stanno prendendo sul serio i sistemi di database in-memory.

Questa è anche un'opzione: http://www.memsql.com/

Non ho usato personalmente, ma si suppone di essere lungo le linee di una sostituzione drop-in per MySQL in memoria.

Diverse versioni portatili di SQL, che lavorerà con la stessa efficienza, progettate per i dispositivi mobili, soprattutto.

SQLite

SQL Server Compact Edition

Questi sono solo grandi giocatori altre opzioni possono essere lì, ma grandi giocatori di gestire i requisiti minimi con liberazione di esso ..:)

e in-memory database, avete costantemente il backup dei dati, se fluttuazione o powercut nasce si può perdita l'intero gruppo. come in altri che verranno gestite come la sua in memoria secondaria (HDD) e le probabilità di perdita sarà del 10% confrontare alla memoria DB.

Spero che questo può aiutare:)

Il caso d'uso più tipico per un database è la persistenza, il che rende la maggior parte dei database in memoria inadatti. Un motivo popolare di utilizzare un database in memoria è a scopo di test. Ma questo richiede si utilizza un database che può essere impostato sia come in-memory e qualcos'altro.

Le scelte popolari in questo settore sembra essere RavenDB per gli sviluppatori .NET e OrientDB per gli sviluppatori Java. Perché entrambi possono funzionare come in-memory database, e "altro" a seconda della configurazione, in modo da poter utilizzare uno o l'altro a seconda della configurazione (app.config in .Net, Maven o le impostazioni Ant in Java).

esigenze di elaborazione dei dati sono sempre più complessi e l'ecosistema di prodotti si sta evolvendo per rispondere a queste nuove esigenze. RDBMS basati su disco, i database cache in memoria, e in memoria vengono utilizzati per soddisfare esigenze diverse. Si dovrebbe andare con quello che si adatta alle tue necessità -

RDBMS tradizionale:. Il cluster MySQL è abbastanza veloce, abbastanza facile da mantenere, e come avere l'affidabilità dei ACIDO conformità

In-memoria distribuita cache all'interno: L'applicazione ha bisogno di fare leggere e scrivere velocemente, senza preoccuparsi troppo di consistenza o transazioni complesse.

In-memory RDBMS:

  1. ( Velocità ):. L'applicazione ha la necessità di elaborare i dati / le domande più velocemente di quanto il vostro possibile base di dati basata su disco
  2. ( Complessità ):. Hai bisogno di fare transazioni complesse legge e scrive con join e aggregazioni e come utilizzare la potenza di SQL
  3. ( Scalabilità ): è necessario scalare il database orizzontalmente senza tempi di inattività.
  4. ( Maintainability ):. È necessario il database per fornire alta disponibilità, la replica, bilanciamento del carico e disaster recovery senza aggiungere ai vostri lavori di manutenzione
  5. ( Caveat ):. I dati devono rientrare nella memoria (tipicamente in terabyte)
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top