Object Oriented Database - il motivo per cui la maggior parte delle aziende non vengono utilizzati [chiusa]

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

Domanda

Sono abbastanza nuovo per la programmazione (appena finito University).

Sono stato pensato negli ultimi 4 anni circa Object Oriented sviluppo ei numerosi vantaggi di questo approccio.

La mia domanda è

Non è più facile da usare un database puro Object Oriented nelle applicazioni di sviluppo?

banca dati Perché Object Oriented non sono così tanto diffuso come relazionale?

Dal mio punto di vista ha senso database di uso OO, quest'ultimo eviterà la numerosa di costruzione necessari per la mappatura di oggetti complessi sui tavoli.

È stato utile?

Soluzione

Dopo aver lavorato per una compagnia di database Object Oriented in passato ( www.objectstore.com ) - e attualmente - penso di avere una buona comprensione su ciò che li rende grande, e ciò che li rende non-così-grande.

Grande:

No object-relational mancata corrispondenza. Se si desidera memorizzare oggetti x in memoria per un archivio permanente, ObjectStore può farlo con garanzie quasi in tempo reale. Il nostro prodotto è stato utilizzato da molte aziende di soddisfare i requisiti di tempo brutali che sarebbe stata dura con i database relazionali o motori ORM.

No object-relational non corrispondente - si sviluppano negli oggetti, si pensa negli oggetti, si memorizzano negli oggetti.

No-così-grande:

ORM: Object manager relazionali hanno praticamente reso database Object irrilevante

Schema evoluzione: Cambiare una classe per aggiungere un campo, e ora si deve trasformarsi un database INTERO. ObjectStore ha ottenuto più intelligente su questo nel corso degli anni, ma è ancora un punto di dolore per molti OODBMS.

Bad:

Strumento di supporto - questo è ciò che ha reso OODBMS un non-starter per la maggior parte dei luoghi. Ognuno oggi può prendere Crystal Reports o Access o Excel e sfornare bucketloads di rapporti. Con un'OODBMS, si dovrà costruire questa logica attraverso un programmatore, e sappiamo tutti quanto velocemente di quella probabile che accada quando si ha bisogno la vostra relazione di bilancio di prendere in considerazione alcuni parametri xyz che non hai pensato di in fase di progettazione.

Gli strumenti sono il motivo per cui OODBMS fallito nel mercato. Non superiorità tecnica o supporto di prestazioni o di lingua (ObjectStore supporta C ++ / Java / .Net e il supporto avuto per COM per supportare tutte le lingue IDispatch come VB, Perl, ecc).

Così ho detto alcune cose sprezzanti qui, in particolare su un prodotto che mi piace molto. Ma ObjectStore è impressionante a compiti molto specifici, ma una buona scelta per la costruzione di una webapp. Anche se ad un certo punto, si è alla guida backend gestione delle scorte per Amazon.com .

Altri suggerimenti

Come si stato, sei fuori fresco di college e sono appena stati intensamente indottrinati in The One True (Object-Oriented) Way. Se d'altra parte si era imparato programmazione dichiarativa, la progettazione di database, e la teoria degli insiemi, che ci si rende conto che il modello relazionale è un approccio perfettamente adeguata, ben radicata nella teoria, mentre OO è un approccio più pragmatico che è stato inventato per lo più nel settore industriale piuttosto che il mondo accademico. Si dà il caso, più interessanti ricerche e sviluppo su problemi di database è stato fatto da persone con più di uno sfondo per la matematica, per il quale il modello relazionale è il modo più naturale per lavoro con i dati. Come risultato, RDBMS tendono ad essere più stabile, scalabile, e di fiducia che le loro controparti a oggetti. database orientati agli oggetti, proprio come XML, sono spesso utilizzati in un tentativo mal consigliato di rendere i dati conformi ai programmi che lo utilizzano, invece del contrario.

Non ci sono vantaggi di utilizzare questo approccio quando si dispone già di un database relazionale già che è molti gigabyte è la memorizzazione di 20 anni di dati e ha già centinaia o migliaia di tavoli. Questo è il vero mondo di molte applicazioni di business. I database sono utilizzati per una più molto di mappatura oggetto della vostra particolare applicazione. La banca dati continuerà ad esistere a lungo dopo le applicazioni che si scrivono sono andati. Stringere i denti e imparare database relazionali in quanto non stanno andando via in qualsiasi momento nei prossimi 100 anni.

anni Dieci fa ho guardato progettazione di database object-oriented (per un progetto personale) e abbiamo scoperto che non erano molto bravi a fare certi tipi di ricerche facilmente o rapidamente (dire "trovare tutte le persone che cominciano il cognome con la 'S '), anche se ovviamente ci sono un sacco di domande relazionali che non sono necessari in un database object-oriented. Inoltre, al momento del database object-oriented non fosse davvero pronto per la distribuzione su larga scala (che certamente non era una mia preoccupazione ). io credo che quelli più recenti hanno risolto quel problema, ma c'è ancora un sacco di inerzia e fare buon ORM utilizzando un database relazionale relativamente facile.

Tuttavia, c'è un movimento lontano da basi di dati relazionali, vedi il NoSQL movimento . Credo che il Google non utilizza un database relazionale (ma anche non object-oriented, piuttosto qualcosa proprietario e distribuito).

Ci scusiamo per non essere in grado di aggiungere questo come un commento nel luogo dove in realtà dovrebbe apparire.

Ma il seguente costituisce un attacco personale su di me, e invoco il mio diritto di rispondere.

  

Anche se sono d'accordo con voi, in pratica, non sono d'accordo con voi in spirito, penso che tu sei quello che è stato il lavaggio del cervello a credere che set-based è l'unico modo (forse sto mettendo le parole in bocca).

FWIW, ho certamente non è stata "lavaggio del cervello" in quello che si potrebbe probabilmente chiamata "la credenza religiosa relazionale". Lavaggio del cervello è quando qualche insegnante dice qualcosa, e lo studente accetta ciecamente e Incredibilmente che come l'unica verità, senza alcuna forma di pensiero critico. In realtà, non ho nemmeno mai stato insegnato il modello relazionale. In effetti, ho dovuto scoprire tutto ciò che tutto da solo. Si tratta di un dato registrato del fatto che ho espresso severe critiche verso le opinioni di data sul soggetto di vista aggiornamento. (Correzione: "era" un dato di fatto registrata la pagina sembra essere stato rimosso dal sito dove è stato pubblicato probabilmente ha a che fare con il fatto che la data ha infatti abbandonato la posizione di visualizzazione aggiornamento ho criticato...)

Quindi penso che ho tutte le ragioni per dire che qualsiasi affermazione che io abbia mai lascio il lavaggio del cervello, è a titolo definitivo propostrous. Sei libero di pensare come ti pare, ma se si esprimono pubblicamente le opinioni personali gratuiti e basati-upon-niente, spero che siete abbastanza anche di un adulto di vederli confutate dai fatti e ammetterlo.

Il motivo per cui modelli gerarchici e di rete sono stati sostituiti dalla RM è stato ampiamente documentato in intere biblioteche piene di libri sull'argomento. Vi invito a ispezionare quelli con attenzione.

Per quanto riguarda il "valore-chiave sta prendendo il mercato": si è completamente libero di prendere "l'opinione più comune del mercato" (che è: la maggior parte mediocre di troppo-lazy-per-pensare-per-sé sciocchi che sono molto felice di lasciare se stessi (e le loro opinioni) guidata dal Ellisons e Gateses e Jobses di questo mondo) come criterio principale per ciò che è prezioso e ciò che non lo è. Personalmente trovo che una cosa sciocca da fare, ma questa è solo la mia opinione personale. I copiare e incollare qui alcune osservazioni fatte da qualcuno che affronta gli orrori della EAV e valori-chiave quasi tutti i giorni della sua vita professionale:

  

Io lavoro su un'applicazione che utilizza il seguente "modello EAV" (almeno, il "modello EAV" se ho capito bene) per molti, ma non tutti, tabelle logiche:

R1 {EAV_RELVAR_NAME*, ... }
R2 {EAV_RELVAR_NAME*, ATTRIBUTE_NUMBER*, COLUMN_NAME, DATA_TYPE, ...}
R3 {EAV_RELVAR_NAME, ATTRIBUTE1, ATTRIBUTE2, ATTRIBUTE3, ..., ATTRIBUTE50}
     

In quali si potrebbe vedere i seguenti valori:

R1 { {'STATE_CODES'} }
R2 { {'STATE_CODES', 1, 'STATE_NAME', 'CHAR(30)'} ,
     {'STATE_CODES', 2, 'STATE_CODE', 'CHAR(2)' } ...}
R3 { {'STATE_CODES', 'ALABAMA', 'AL'} ,
     {'STATE_CODES', 'ALASKA',  'AK'} ...}
     

Fondamentalmente, "relvars EAV" sono creati / modificati / scesa con inserti / aggiornamenti / eliminazioni in R1 e R2 (rispetto al DDL). Questa è una versione tagliata verso il basso del nostro modello generale: ci sono colonne aggiuntive in R1 e R2 per specificare tasti EAV-primaria,-keys EAV-estera, regole di business, ecc ... tutto imposto dal codice procedurale incorporato nel "one vero front end" del modello.

     

Questa mattina, io ero al corrente di una prova 20+ uomo-ora che ha provocato quando il sistema Un pensiero CODE_XYZ sarebbe in attributo2, ma il sistema di B in realtà definito in ATTRIBUTE3 ... mi venne da ridere per il fatto che ero mezza ascoltando la conversazione, e la metà lettura discorso di questo gruppo su EAV.

     

Il mese scorso, ho avuto modo di mettere in un aggiornamento di emergenza (16 ore-uomo più "brutti voti" per l'applicazione) per cambiare ATTRIBUTE16 da 'maggio 2010' a 'MAY-2010' per 430 punti di dati immessi dall'utente.

     

Circa il 5-10% dei nostri rilasci di codice sono accompagnati con le "pulizie di runtime di errori Lunedi-mattina", perché EAV_RELVARs non sono state codificate in R1 o R2 identico nella produzione come è stato fatto in test / sviluppo (sia il codice dell'applicazione e DDL è migrato con un rigoroso controllo delle versioni-software ... il nostro modello di EAV non è legato a come la burocrazia in quanto "permette" agli sviluppatori di impostare il loro EAVS automaticanomously in dev, test e prod.).

     

L'anno scorso, ho trascorso un 3 settimane software di replica di sintonia solido esclusivamente per far fronte alla mancanza di una chiave primaria su R3.

     

Una volta ho dovuto chiedere scusa per l'incapacità di mettere un indice sulla ATTRIBUTE4 di EAV_RELVAR_NAME_x, come era in disordine le prestazioni di un programma diverso che ha usato EAV_RELVAR_NAME_z.

     

Due anni fa, dopo diversi anni di affondare centinaia di ore perennemente sintonizzano query complesse che dovevano unirsi a R3, finalmente ho trascorso 3 mesi suddivisione R3 in centinaia di partizioni fisiche (uno per EAV_RELVAR_NAME), al fine di dare il DBMS ottimizzatore le statistiche necessarie per vedere che ci sono stati, ad esempio, 50 'STATE_CODES' e 200.000 'LOCATION_CODES. Mi ha ricevuto le congratulazioni per la soluzione ingegnosa, anche se l'ironia è stato mancato in tutti quando ho fatto notare che, con questo cambiamento, ci sarebbe una nuova politica in cui l'aggiunta di una nuova EAV_RELVAR_NAME comporterebbe l'esecuzione di uno script che ha aggiunto una partizione associata alla R3 (sì , con DDL).

     

I miei clienti vogliono un nuovo front-end per il caricamento dei dati in R3 per uno dei loro EAV_RELVAR_NAMEs (mentre fa rispettare tutti i vincoli e di sicurezza appropriati), e vogliono sapere perché ci vorranno 4 mesi per costruire.

     

Mi capita spesso di sottolineare che ho potuto riscrivere l'intero sistema EAV in un modo che era superiore in ogni modo, utilizzando la dinamica-DDL contro Dizionario Dati invece di DML contro R1 e R2, ma io sono sempre informato che abbiamo' re "impegnata" a questo approccio (c'era una spesa di 7 cifre up-front per costruirlo, e avremmo dovuto riscrivere il 98% della nostra base di codice per passare alla stand-alone tabelle), e che il fine non giustificare i mezzi.

Se si crede davvero che tali scenari sono un miglioramento rispetto alla RM, poi con tutti i mezzi andare avanti. Non prendetevela con me per quanto fa male quando finalmente si sbatte la testa contro il muro.

Non c'è alcun motivo buono per questo, soprattutto con la rivolta di ORM (Active Record) utilizzo e le pene della mappatura. Orientato agli oggetti database sono più veloci e meglio in molti modi. La ragione per non essere popolare è necessità. Finora, RDBMS hanno fatto un lavoro buono e in grandi imprese, il dolore più grande è chiamato 'migrazione'. Come con la maggior parte della tecnologia, la necessità degli utenti è l'obiettivo primario, e Object Orientation solito non è il punto di vendita. Velocità forse, ma l'hardware costoso e collaudata sintonia RDBMS possono ottenere prestazioni pure.

Anche le persone che sono esperti in questo settore, dovrebbe essere addestrato di nuovo (che costa a bunchies). Per non parlare di al i costosi consulenti che hanno imparato il male PL / SQL ...

direi, essere un primo motore. Come Mahatma Ghandi ha detto, essere il cambiamento che vuoi vedere. Divertente, è appena fatto venire voglia di Google per un open source OO-DB.

Una delle ragioni per cui l'adozione di database Object Oriented è è così lento che non sono molte alternative OpenSource scalabili. Per RDBMS ci sono ad esempio MySQL (Oracle di proprietà ora), PostgreSQL e molti altri.

Un altro problema è che almeno per Java API standard per l'accesso RDBMS JDBC e JPA per la parte ORM hanno più grandi aziende che stanno dietro e sono meglio conosciuti. JDO per oggetto orientato accesso al database è uno standard, ma non così popolare.

Object Oriented database hanno nella maggior parte dei casi, un forte API o lingua lock-in di RDBMS, che è un altro motivo per cui grandi aziende con più investimenti di piattaforma e la lingua stare con RDBMS.

Per me personalmente popolari database OO OpenSource sarebbe un motivo per investire più tempo in loro provare.

Database non è solo di memorizzare e recuperare oggetti, altrimenti OODBs e Document DB avrebbe conquistato il mondo. Altri contesti di utilizzo / aspetti includono:

  • L'aggregazione dei dati e facendo complessa elaborazione dei dati alla rinfusa / manipolazione. RDBMS sono molto bravo in questo.
  • Altro aspetto importante è la concorrenza / isolamento (transazioni vale a dire). RDBMS sono molto maturo in questo settore.
  • Un altro aspetto è l'indicizzazione per garantire domande veloci.
  • Un altro aspetto, come "Chris Kaminski" di cui sopra è essere in grado di evolvere lo schema nel corso del tempo, preservando i dati.

Infine, c'è un po 'di industria inerzia in corso, con i principali fornitori non disposti a soldi scommettere su qualcosa che i clienti non sono pronti a pagare per, ei clienti in attesa sulla panchina fino a quando i principali fornitori di partecipare al gioco.

Un altro problema è il supporto della lingua. Che dire delle lingue che non sono orientato agli oggetti? Un database buon deve essere accessibile da tutti, indipendentemente dalla lingua. Ecco perché un sacco di basi di dati linguistici specifici fallire, perché il loro mercato è solo la gente di quella lingua.

C'è anche il fattore di migrazione. maggiori utilizzatori di MySQL sono gli utenti di lunga data. Migrazione a un nuovo sistema di database con un design essenziale completamente diverso con un grande esistente sarebbe molto costoso e dare piccola ricompensa.

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