Domanda

Al momento sto cercando di scegliere un fornitore di database.

Sono solo in cerca di alcune opinioni personali da parte degli sviluppatori di database compagni là fuori.

La mia domanda è particolarmente mirata verso le persone che:

1) hanno usato memoria principale DB (MMDB) che supporta la replica su disco (ibrido) prima (cioè eXtremeDB )

o

2) hanno utilizzato Versant Object Database e / o di L'oggettività database e / o di Progress ObjectStore

e la questione è davvero:. Se si potesse consigliare un fornitore di database, in base alla vostra esperienza, che soddisfi la mia domanda

La mia domanda è un tempo reale commerciale (leggi: ad alte prestazioni) object-oriented C ++ GIS tipo di app, dove abbiamo bisogno di fare un sacco di lat ricerca / lon (cioè data una superficie, trovare tutti gli obiettivi corrispondenti all'interno l'area ... R-Tree indice).

I tipi di dati che vorrei per memorizzare nel database sono tutte modellate come oggetti e fanno uso di std :: list e std :: vector, così naturalmente, oggetto di database sembra avere senso. Ho letto attraverso articoli abbastanza per convincermi che un RDBMS tradizionale probabilmente è neanche quello che vedo in termini di

  1. prestazioni (si unisce o multipla tabelle per i dati dinamici di lunghezza come lista / vettore)
  2. facilità di programmazione (Disadattamento di impedenza)

Tuttavia, in termini di prestazioni,

  1. I dati di ingresso viene immessa nel sistema a circa 40 MB / s.

  2. Quindi, il sistema sarà anche facendo inserto nel database al tasso di circa 350 inserti per secondo (dove ogni oggetto varia da 64KB a 128KB),

  3. Database sarà costantemente essere cercato e aggiornato via più thread.

Dalla mia comprensione, tutti i DB di oggetti che ho elencato qui utilizzare la cache per la memorizzazione di oggetti di database. EXtremeDB sostiene che dal momento che è stato progettato appositamente per la memoria, si può evitare il sovraccarico di logica caching, ecc Vedi tutto googling: Memoria principale vs. database RAM-Disk: un benchmark basato su Linux

So..I'm solo un po 'confuso. Può opporsi DB essere utilizzati in tempo reale del sistema? E 'come "veloce", come MMDB?

È stato utile?

Soluzione

Fondamentalmente, io differenza tra un MMDB e OODB è che il MMDB ha l'aspettativa che tutti i suoi dati si basa in RAM, ma persisteva disco a un certo punto. Considerando che un OODB è più convenzionale che non c'è alcuna aspettativa di tutto il raccordo DB di RAM.

Il MMDB può sfruttare questa rinunciando sul concetto che i dati persistente non deve necessariamente ai dati "match" in RAM.

Il nulla modo con tenacia sta andando a lavorare, è che ha di scrivere i dati su disco aggiornata in qualche modo.

Quasi tutti i DB utilizzano una sorta di log per questo. Questi registri sono fondamentalmente pagine "grezzi" di dati, o forse singole transazioni, allegati a un file. Quando il file diventa "troppo grande", viene avviato un nuovo file.

Una volta che i log vengono adeguatamente consolidati al negozio principale, i log vengono scartati (o riutilizzati).

Ora, un grezzo, nella RAM DB può esistere semplicemente aggiungendo le transazioni in un file di log, e quando è riavviato, appena carica il log in a RAM. Quindi, in sostanza, il file di registro è il database.

L'aspetto negativo di questa tecnica è la più lunga e più operazioni che avete, il vostro log / DB è, e quindi il più lungo è il tempo di avvio DB più grande. Ma, idealmente, si può anche "istantanea" dello stato attuale, che elimina tutti i registri fino ad oggi, e in modo efficace li comprime.

In questo modo, tutte le operazioni di routine del DB devono gestire è aggiungendo pagine ai tronchi, invece di aggiornare le altre pagine del disco, pagine di indice, ecc Dal momento che, idealmente, la maggior parte dei sistemi non hanno bisogno di "Start up" che spesso, forse, il tempo di avvio è meno di un problema.

Quindi, in questo modo, un MMDB può essere più veloce di un OODB che ha un contratto diverso con il disco, mantenendo i registri e le pagine del disco. In questo modo, un OODB può essere più lento, anche se l'intero DB si adatta alla RAM ed è correttamente memorizzata nella cache, semplicemente perché si incorre operazioni del disco al di fuori delle operazioni di registro durante il normale funzionamento, vs un MMDB dove accadono queste operazioni come una "manutenzione" compito, che può essere programmato durante il tempo verso il basso e / o momenti di tranquillità.

Quanto alla questione se uno di questi sistemi possono incontrare reali esigenze di prestazione, non posso dire.

Altri suggerimenti

Le estremità posteriori dei database (processi lettore e scrittore, il caching, la serratura di gestione, i file di log TXn, semantica ACID) sono gli stessi, quindi RDB e OODB sono in realtà molto simile qui. La differenza è l'interfaccia al programmatore applicazione. È il tuo modello di dati complicata, è costituito da un sacco di classi con rapporti reali eredità? Poi OO è buono. E 'relativamente piatta e semplice? Poi vai RDB. Qual è la natura dei rapporti? È puntatore-like e incastonato come? Poi vai RDB. Is è più complicato, come (ordinato) la lista, matrice, mappa? Poi si dovrebbe andare OO. Inoltre, hai un applicazione stand-alone senza necessità di integrarsi con altre applicazioni? Poi OO è ok. Non è necessario condividere dati con altre applicazioni (ovvero le diverse applicazioni accedono alla stessa base di dati)? Quindi questo è un affare-breaker per OO, e si dovrebbe attaccare con RDB. È lo schema del database stabile o si aspetta di evolvere di frequente? OODBs sono cattivi evoluzione dello schema di annunci, quindi se vi aspettate frequenti cambiamenti, bastone con RDB.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top