Domanda

A parte lo scenario Google/bigtable, quando non dovresti utilizzare un database relazionale?Perché no, e cosa dovresti usare?(hai imparato "nel modo più duro"?)

È stato utile?

Soluzione

Nella mia esperienza, non si dovrebbe utilizzare un database relazionale, quando uno di questi criteri sono vere:

  • i dati è strutturata come una gerarchia o di un grafico (rete) di profondità arbitraria,
  • il modello di accesso tipica sottolinea la lettura più di scrivere, o
  • non c'è alcun obbligo per le query ad-hoc.

gerarchie profonde e grafici non si traducono bene a tabelle relazionali. Anche con l'aiuto di estensioni proprietarie come CONNECT BY di Oracle, inseguendo gli alberi è un dolore potente utilizzando SQL.

I database relazionali aggiungere un sacco di spese generali per un semplice accesso in lettura. l'integrità delle transazioni e referenziale sono potenti, ma eccessivo per alcune applicazioni. Quindi, per le applicazioni di lettura per lo più, un file di metafora è abbastanza buono.

Infine, semplicemente non hai bisogno di un database relazionale con il suo linguaggio in piena regola query se non ci sono domande inaspettate previsti. Se non ci sono abiti che chiedono domande come "Quanti 5% -discounted widget blu fatto vendiamo sulla costa orientale raggruppati per venditore?", E non ci sarà mai, allora, signore, può vivere senza DB.

Altri suggerimenti

Il paradigma database relazionale fa alcune ipotesi circa l'utilizzo dei dati.

  • Una relazione consiste di un insieme non ordinato di righe.
  • Tutte le righe in un rapporto hanno lo stesso insieme di colonne.
  • Ogni colonna ha un nome fisso e tipo di dati e significato semantico su tutte le righe.
  • righe di una relazione sono identificati da valori univoci nella colonna chiave primaria (s).
  • ecc.

Queste ipotesi supportano semplicità e struttura, a costo di una certa flessibilità. Non tutte le attività di gestione dei dati si inseriscono in questo tipo di struttura. Le entità con attributi complessi o attributi variabili non lo fanno, per esempio. Se avete bisogno di flessibilità nelle zone in cui una soluzione di database relazionale non lo supporta, è necessario utilizzare un diverso tipo di soluzione.

Non ci sono altre soluzioni per la gestione dei dati con diverse esigenze. La tecnologia Semantic Web, ad esempio, permette ad ogni soggetto di definire i propri attributi e di essere auto-descrizione, trattando i metadati come attributi, proprio come i dati. Questo è più flessibile la struttura imposta da un database relazionale, ma che la flessibilità viene fornito con un costo a parte.

In generale, è consigliabile utilizzare lo strumento giusto per ogni lavoro.

Vedi anche la mia altra risposta a " il prossimo-gen basi di dati . "

Ci sono tre principali modelli di dati (C.J.Date, E.F.Codd) e io sono l'aggiunta di un file flat a questo:

  • file flat (s) (struttura varia - da un testo piatto 'stupido' a file conformi alle grammatiche, che abbinato a strumenti intelligenti fare cose molto intelligenti, pensate compilatori e che cosa possono fare, stretta applicazione nel modellare le cose nuove)
  • gerarchica (alberi, set nidificati - Esempi: XML e altri linguaggi di markup, Registro di sistema, organizzative grafici, ecc; tutto può essere modellati, ma le regole di integrità non sono facili da esprimere e il recupero è difficile da ottimizzare automaticamente, un po 'di recupero è veloce e un po' è molto lento)
  • rete (reti, grafici - Esempi: banche dati di navigazione, collegamenti ipertestuali, web semantico, di nuovo quasi tutto può essere modellato, ma ottimizzazione automatica di recupero è un problema)
  • (Logica dei predicati del primo ordine - ad esempio: basi di dati relazionali, l'ottimizzazione automatica di recupero)
  • relazionale

Sia gerarchica e la rete può essere rappresentato in relazionale e relazionale può essere espresso nelle altre due.

La ragione per cui relazionale è considerato 'migliore' è la natura dichiarativa e standardizzazione non solo la lingua di recupero dei dati, ma anche sul linguaggio di definizione dei dati, tra cui il forte integrità dei dati dichiarativa, sostenuta con stabile , scalabile, sistema di gestione multi-utente.

I vantaggi hanno un costo, che la maggior parte dei progetti trovano ad essere un buon rapporto per i sistemi a più (applicazione) che memorizzano i dati a lungo termine in un da che sarà utilizzabile in futuro.

Se non si stanno costruendo un sistema, ma una singola applicazione, forse per un singolo utente, e sono abbastanza sicuro che non si vuole più applicazioni utilizzando i dati, né più utenti, in tempi brevi, allora probabilmente vi trovare approcci più veloce.

Anche se non si sa che tipo di dati che si desidera memorizzare e come modello IT punti di forza del modello relazionale, allora sono sprecati su di esso.

O se semplicemente non si preoccupano integrità dei dati che molto (che può andare bene).

Tutti i dati strutture sono ottimizzati per un certo tipo di utilizzo, relazionali solo se adeguatamente tentativi modellate per rappresentare la 'realtà' in maniera semanticamente imparziale. Le persone che hanno avuto brutta esperienza con i database relazionali di solito non si rendono conto che la loro esperienza avrebbe potuto essere molto peggio con altri tipi di modelli di dati. implementazioni orribili sono possibili, e in particolare con i database relazionali, in cui è relativamente facile costruire modelli complessi, si potrebbe finire con un bel mostro sulle vostre mani. Ancora mi sento sempre meglio quando cerco di immaginare lo stesso mostro in XML.

Un esempio di come buon modello relazionale è, IMO, è il rapporto di complessità vs brevità delle domande che troverete che coinvolgono SQL.

vi consiglio di visitare il alta scalabilità blog , che discute questo tema quasi ogni giorno e ha molti articoli su progetti che hanno scelto distribuiti hash, ecc oltre RDMBS.

La rapida (ma molto incompleta risposta) è che non tutti i dati si traduce bene a tabelle in modo efficiente. Ad esempio, se i dati è essenzialmente un dizionario grande, probabilmente ci sono alternative molto più veloce rispetto alla vecchia RDBMS. Detto questo, è soprattutto una questione di prestazioni, e se le prestazioni non è un problema enorme in un progetto, e la stabilità, coerenza e affidabilità, per esempio, sono, quindi non vedo molto senso scavare in queste tecnologie quando RDBMS è uno schema molto più maturo e ben sviluppata, con il supporto in tutte le lingue e le piattaforme e un enorme insieme di soluzioni tra cui scegliere.

Quindici anni fa stavo lavorando a un sistema di rischio di credito (sostanzialmente un sistema che cammina su un grande albero).Usavamo Sybase su HPUX e Solaris e le prestazioni ci stavano uccidendo.Abbiamo assunto consulenti direttamente da Sybase che hanno affermato che non era possibile farlo.Quindi siamo passati a un database OO (archivio oggetti in questo caso) e abbiamo ottenuto un aumento delle prestazioni di circa 100 volte (e anche il codice era circa 100 volte più facile da scrivere)

Ma tali situazioni sono piuttosto rare: un database relazionale è una buona prima scelta.

Quando si schema varia molto si avrà un momento difficile con i database relazionali. Questo è dove i database XML o database coppia chiave-valore funzionano meglio. oppure si potrebbe utilizzare IBM DB2 e hanno sia i dati relazionali e dati XML gestiti da un unico motore di database.

Circa 7-8 anni fa ho lavorato su un sito web che è cresciuto in popolarità oltre le nostre aspettative iniziali e ci messo nei guai prestazioni-saggio. Dato che eravamo tutti relativamente inesperti in progetti web based si pone a dura prova significativo su di noi su cosa fare al di là del solito separazione del database su server separato, bilanciamento del carico, ecc

Un giorno ho pensato a qualcosa di piuttosto semplice. Dal sito è stato basano sugli utenti, i loro profili sono stati memorizzati in una tabella del database il solito modo in cui qualcuno lo avrebbe fatto - user id, un sacco di variabili informazioni e cose del genere -, che si presentava come gli utenti pagina di profilo che gli altri utenti possono guardare in alto . Ho irrigato tutti i dati in un semplice file HTML, già preparato come una pagina di profilo degli utenti e ottenuto una spinta significativa - fondamentalmente una cache. Ho anche fatto un sistema che quando l'utente modificato le loro informazioni del profilo, sarebbe analizzare il file HTML originale, messo su per modificare, e poi scovare html indietro al file system - ha ottenuto ancora più spinta.

Ho fatto qualcosa di simillar con gli utenti i messaggi inviati a un l'altro. Fondamentalmente, ovunque ho potuto fare un sistema di bypass di un database del tutto, evitando un INSERT o UPDATE, ho ricevuto un notevole impulso. Può suonare come un buon senso, ma è stato un momento illuminante. Non è un modo di evitare l'installazione relazionale di per sé, ma è un modo di evitare il database del tutto - BACIO.

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