Domanda

Ho lavorato con database relazionali per qualche tempo, ma solo di recente mi è venuto in mente che ci devono essere altri tipi di database che sono non non relazionali.

Quali sono alcuni esempi di database non relazionali e dove / come vengono utilizzati nel mondo reale? Perché dovresti scegliere di utilizzare un database non relazionale rispetto ai database relazionali?

Modifica : altre due domande simili sono state menzionate nelle risposte:

È stato utile?

Soluzione

  • File flat
    • CSV o altri dati delimitati
    • fogli elettronici
    • / etc / passwd
    • file di posta mbox
  • Hierarchical
    • Registro di Windows
    • Subversion utilizzando il file system, FSFS, anziché Berkley DB

Altri suggerimenti

Un'alternativa oscura ma interessante ai tipi di database menzionati qui è il database associativo , come Sentences, da Tecnologia LazySoft . Esiste una versione personale gratuita che puoi scaricare e provare da solo. Anche l'Enterprise Edition è gratuita, ma richiede una richiesta alla società.

In sostanza, un database associativo ti consente di archiviare le informazioni più o meno allo stesso modo dei nostri cervelli: come cose e associazioni tra quelle cose. Il nome " Frasi " deriva dal modo in cui queste informazioni possono essere rappresentate in una sintassi oggetto-verbo-oggetto :

  • Tom è fratello di Laura
  • San Francisco si trova in California
  • Mike ha un limite di credito di $ 10.000

Una frase può essere l'oggetto o l'oggetto di un'altra frase:

  • (Bus 570 arriva alle 8:15) di la domenica
  • Mary dice (la torta è stata cotta da William)

Quindi, tutto può essere ridotto a entità e associazioni .

Ovviamente c'è molto di più nelle frasi di quanto si possa esprimere qui. Ti consiglio di dedicare del tempo a leggere di più al riguardo in un white paper da LazySoft.

" The Associative Model of Data " è un libro disponibile in formato PDF da Simon Williams , uno dei creatori di Sentences.

Un database orientato ai documenti non relazionale che abbiamo esaminato è Apache CouchDB .

  

Apache CouchDB è un database distribuito, tollerante ai guasti e privo di schemi orientato ai documenti accessibile tramite un'API HTTP / JSON RESTful. Tra le altre funzionalità, offre una replica solida e incrementale con rilevamento e risoluzione dei conflitti bidirezionali ed è interrogabile e indicizzabile utilizzando un motore di visualizzazione orientato alla tabella con JavaScript che funge da linguaggio di definizione della vista predefinito.

Il nostro interesse era quello di fornire un archivio di preferenze utente ad accesso distribuito che fosse immune alle modifiche alle quali potremmo serializzare gli oggetti delle preferenze da Java e accedervi altrettanto facilmente con Javascript da un'applicazione client basata su XULRunner.

Qualsiasi database che afferma di essere un "Berkley style Database" " o " Chiave / Valore " Il database non è relazionale.

Questi database sono generalmente basati su algoritmi di hashing complessi e forniscono una ricerca O (1) molto veloce basata su una chiave, ma lasciano qualsiasi forma di bontà relazionale all'utente finale.

Ad esempio, in un database relazionale, dovresti normalizzare la tua struttura e unire più tabelle per creare un singolo set di risultati.

In un database chiave / valore, denormalizzi il più possibile e quindi utilizzi una chiave univoca per cercare i dati.

Se è necessario estrarre dati da due origini, è necessario unire manualmente l'insieme risultante.

Tutti i database erano originariamente non relazionali, fu solo con l'arrivo di DB2 e Oracle a metà degli anni '80 che divennero comuni. Prima di allora, la maggior parte dei database erano file flat o gerarchici.

I file flat sono intrinsecamente noiosi, ma il database gerarchico lo è molto meno, in particolare poiché DB2 è stato effettivamente implementato su un'implementazione gerarchica (vale a dire VSAM) in prima istanza. VSAM è ancora in circolazione sui sistemi mainframe ed è di notevole importanza.

DB / 1 (così oscuro ora non riesco nemmeno a trovare un link wikipedia) era il database di prime time di IBM in DB2 (da cui il nome). Questo era gerarchico: fondamentalmente avevi un file che consisteva in qualsiasi numero o record "root", generalmente accessibile direttamente da una chiave. Ogni record di root potrebbe quindi avere un numero qualsiasi di record figlio, ciascuno dei quali potrebbe a sua volta avere i propri figli. L'effetto netto è un file indice o record root con ogni radice in cima a una potenziale struttura ad albero. L'accesso ai record del bambino potrebbe essere complicato: c'erano limitazioni all'accesso diretto, quindi di solito finivi per attraversare l'albero alla ricerca del record di cui avevi bisogno. Un "database" può contenere un numero qualsiasi di questi file, generalmente correlato da chiavi.

Ciò presentava importanti svantaggi - non ultimo il fatto che fare qualsiasi cosa richiedesse un programma completo scritto - fondamentalmente l'equivalente di un giorno di lavoro per quello che ora possiamo fare in SQL in pochi minuti. Tuttavia ha fatto davvero un buon punteggio sulla velocità di esecuzione, a quei tempi un mainframe aveva la potenza di elaborazione del tuo iPhone (anche se ottimizzato per l'I / O dei dati) e scarse query DB2 potevano uccidere un'installazione multi-milioni di dollari. Questo non è mai stato un problema con DB / 1 e in un mondo in cui i programmatori erano meno costosi del tempo CPU aveva senso.

Archivio dati di Google App Engine :

  

L'archivio dati di App Engine non è un database relazionale. Sebbene l'interfaccia del datastore abbia molte delle stesse caratteristiche dei database tradizionali, le caratteristiche uniche del datastore implicano un modo diverso di progettare e gestire i dati per sfruttare la capacità di ridimensionamento automatico.

Il database storico PI di OSIsoft non è relazionale. È fatto solo per archiviare dati con data e ora. È molto utilizzato dall'industria, soprattutto come database back-end per tutti quei "dashboard".

Non è necessario essere relazionali in esso, poiché non ci sono join.

Altri due tipi di database che non sono ancora stati creati:

  1. I repository di contenuti sono database progettati per il contenuto (ovvero file, documenti, immagini, ecc.). In genere hanno costrutti aggiuntivi come un modo gerarchico per sfogliare il contenuto, cercare, trasformare tra diversi formati, versioning e molte altre cose. Esempi: Alfresco, Documentum, JackRabbit, Day, OpenText e molti altri distributori ECM.

  2. Directory, ovvero Active Directory o Directory LDAP. Si tratta di database progettati per scenari a bassa scrittura / alta lettura e altamente distribuiti su connessioni ad alta distanza geografica / latenza elevata. Sebbene utilizzati principalmente per l'autenticazione / autorizzazione, non devono essere se il tuo caso d'uso soddisfa i requisiti.

I database dimensionali sono ottimi esempi di database non relazionali. Sono molto comunemente usati per "Business Dashboards" / "Business Intelligence" per KPI e altri tipi di dati aggregati o statistici. Di solito sono popolati da database relazionali e possono offrire prestazioni migliori in determinate situazioni.

http://en.wikipedia.org/wiki/Dimensional_database

  1. Database XML ad es. xindice
  2. Database di oggetti, ad es. db4o

Essere consapevoli del fatto che il concetto di database relazionali è altamente controverso. Puristi come C. J. Date sosterrebbe che molti database di uso comune (come Oracle e SQL Server) non sono sufficientemente conformi al modello relazionale per essere definiti "relazionali".

I database non relazionali non soddisfano i requisiti di Codd. Intersystems Cach & # 233; crea una riscrittura / riprogettazione totale del vecchio database del sistema operativo Pick. Dal piccolo I & # 8217; ho letto di Cach & # 233; sembra essere una riprogettazione ben fatta. Permette ai programmi .net di accedere al database proprio come farebbe con SQL. Esegui la memorizzazione nella cache dei programmi del sistema operativo Pick senza richiedere alcuna modifica. Importando i tuoi file Pick in Cach & # 233; puoi ancora eseguire le tue vecchie applicazioni con schermo verde con esso, ma anche scrivere nuovi programmi utilizzando .net in modo da poter migrare alle applicazioni Windows senza abbandonare gli anni di progettazione dei dati in cui hai già investito. Ecco alcuni retroscena sul modello Pick DB. Un database Pick utilizza record e campi di lunghezza totalmente variabile. Tutte le tabelle sono codificate da un'unica chiave univoca e sono accessibili senza leggere un indice. Pick ha progettato il sistema in modo da utilizzare un algoritmo di hash che legge l'elemento dal disco in genere alla prima lettura fisica (presupponendo che la manutenzione del sistema sia stata eseguita correttamente). I campi in Pick non sono digitati. Tutti i dati sono memorizzati come stringa e Casting dipende dal programmatore. I null sono archiviati come una stringa vuota, quindi un null non occupa spazio su disco come in SQL. Non sono necessarie chiavi esterne. Nel mondo relazionale & # 8217; il DBA deve creare e ordinare la tabella dell'intestazione e una tabella degli elementi della riga ordine. In & # 8220; Scegli modello & # 8217; c'è un solo tavolo. Un esempio potrebbe essere, & # 8216; Data ordine & # 8217; è un campo che memorizzerà un numero di giorni da & # 8216; 13 dic 1967 & # 8217; (il sistema operativo Pick dati è stato attivato per la prima volta). Scegli programmatori non ha avuto problemi con Y2k. Una seconda colonna sarebbe il numero cliente. La grande differenza è quando arrivi alla colonna del numero di prodotto, sarebbe & # 8216; Multivalore & # 8217; (la non conformità di Codd). In altre parole, il database può gestire 1-32000 n. Di prodotto in quella colonna. Altre colonne come la quantità ordinata sarebbero in una relazione di controllo / dipendente con il numero del prodotto e sarebbero anche multivalore. Quando si arriva alla quantità spedita, Pick andrebbe in una terza dimensione e avrebbe un campo sottovalutato. Avresti una colonna con il numero di spedizione e questa sarà multivalore per articolo pubblicitario e sottovalutazione multipla contenente la quantità di spedizione per quella riga per quel numero di spedizione. Non sono necessari join interni. Tutti i dati per quell'ordine sono archiviati in una tabella e in un singolo record. Nessuna fila di orfani mai! In secondo luogo, la definizione dei dati è leggermente diversa. I nostri dizionari possono contenere definizioni per dati che non si trovano in questa tabella o che vengono manipolati. Un paio di esempi sono, Nome cliente. Sarebbe definito come & # 8216; Utilizza la colonna Numero cliente e restituisce il campo Nome dalla tabella Clienti. Un altro esempio è l'estensione dell'elemento pubblicitario sarebbe definita come un calcolo di Quantità * Prezzo / PrezzoPer. Credo di aver letto da qualche parte Cach & # 233; afferma di avere oltre 100.000 installazioni.

Penso che un database flat-file in Excel sia non relazionale e utilizzato da un bel po 'di persone.

In realtà è solo una tabella del database che non può essere unita ad altre tabelle.

I database orientati agli oggetti sono un tipo interessante di database non relazionali.

Il settore del trading a volte utilizza database OO poiché ogni affare / contratto può sembrare un po 'come gli altri in quella categoria ma avere anche attributi unici. MOLTO difficile rappresentarlo relazionalmente.

eXist-db è un database XML che esiste da molto tempo. È particolarmente utile per xquery su tonnellate di documenti XML.

Qualsiasi file o gruppo di file che contiene dati ma non esprime relazioni all'interno di tali dati è un database non relazionale.

RRDtool è progettato per archiviare e aggregare i dati di registro. Configura un intervallo di campionamento e inserisci i dati in esso, quindi restituisce risultati basati sul tempo. È ottimizzato per l'archiviazione di dimensioni fisse e inizia ad aggregare i risultati passati dopo un po 'di tempo. Ad esempio, supponiamo di avere un database round robin con un intervallo di tempo di 5 minuti. Anche se si inviano i dati di temperatura una volta al secondo, vengono comunque archiviati i risultati solo con incrementi di 5 minuti. Dopo una settimana, calcola la media di questi risultati in valori orari. Dopo un mese, i risultati orari vengono calcolati in media in numeri giornalieri e così via.

RRDtool è comunemente usato come backend per strumenti come Cricket e MRTG per tenere traccia dei dati di rete e ambientali per mesi e anni in successione.

Per un dbms basato su grafici hai neo4j

Per un dbms gerarchico hai un filesystem standard o con " schema " supportare qualsiasi implementazione LDAP.

Ci sono molte risposte ma finiscono per essere in una delle due categorie principali:

  1. navigazione. Include database Tree / Hierarchy e database Graph.

  2. Database che interrompono la prima forma normale (valori multipli). Include database Pick e Lotus Notes e la sua progenie come CouchDB.

EDIT: E ovviamente i negozi chiave / valore come BDB non sono relazionali, ma questo è ovvio, vero? Voglio dire, sono solo negozi chiave / valore.

dBase. Sebbene sia stato commercializzato come tale, non soddisfa i requisiti.

Come database OO, Intersystems Cach & # 233; viene in mente. Alcuni sistemi medici e di biblioteca sono basati su questo.

  1. Nella mia azienda, www.smartsgroup.com, disponiamo di un motore di database proprietario che chiamiamo "database del registro delle transazioni". È basato su file flat, ogni file contenente una sequenza di "eventi" o "messaggi", in formato binario, oltre a vari indici su questi dati e algoritmi per la riproduzione dello stato del portafoglio ordini di una borsa. È altamente ottimizzato per gli aggiornamenti sequenziali e l'accesso sequenziale.

  2. Nelle applicazioni scientifiche, è anche comune utilizzare motori di database proprietari anziché RDBMS. Ho anche lavorato per un'azienda che ha il più grande database al mondo di registrazioni cerebrali EEG: www.brainresource.com. Lì usiamo un database di file flat e ha funzionato bene per noi.

  3. SmartsGroup utilizza anche un database temporale, che è come una tabella di database non relazionale, tranne per il fatto che memorizziamo una cronologia di tutte le modifiche in tutti i campi in modo da poter riprodurre lo stato di una determinata riga in una data particolare.

La pagina Wiki per i database dimensionali collegati sopra sembra essere scomparsa.

Alcuni OLAP sono supportati da database multidimensionali (MOLAP) in cui vengono spesso utilizzati analisi finanziaria. Offrono client interattivi che consentono di navigare tra i dati a diversi livelli di aggregazione.

Nella mia università c'è un gruppo che ricerca database deduttivi .

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