C'è un sacco di informazioni là fuori sui mappatori relazionali di oggetti e su come evitare al meglio la mancata corrispondenza dell'impedenza, che sembrano essere punti moot se si dovesse usare un database di oggetti. La mia domanda è: perché questo non viene usato più frequentemente? È dovuto a motivi di prestazioni o perché i database degli oggetti fanno sì che i tuoi dati diventino proprietari della tua applicazione o dipendono da qualcos'altro?Quali sono i pro e i contro dei database degli oggetti?
risposta
- Familiarità. Gli amministratori di database conoscono concetti relazionali; quelli oggetto, non così tanto.
- Prestazioni. È stato dimostrato che i database relazionali hanno una scala di gran lunga migliore.
- Scadenza. SQL è un linguaggio potente e di lungo sviluppo.
- Supporto fornitore. È possibile scegliere tra molti più strumenti di prima parte (server SQL) e di terze parti (interfacce amministrative, mapping e altri tipi di integrazione) rispetto a OODBMS.
Naturalmente, il modello orientato agli oggetti è più familiare al sviluppatore, e, come fai notare, avrebbe risparmiato un ORM. Ma finora, il modello relazionale ha dimostrato di essere l'opzione più praticabile.
Vedere anche la domanda recente, Object Orientated vs Relational Databases.
Un controsenso alla familiarità: se si persistono gli oggetti che gli sviluppatori stanno usando, hai ancora bisogno degli amministratori db?Oppure potresti assumere più sviluppatori che possono quindi suddividere il loro tempo tra l'amministratore e lo sviluppo? –
Un controsenso alle prestazioni: berkeleydb; non è relazionale e può scalare verticalmente fino a 256 terabyte. memcached; non è relazionale e può scalare orizzontalmente AFAIK indefinitamente. –
Un controsenso alla scadenza: SQL non è sviluppato a lungo. È sottosviluppato da molto tempo. Alcuni direbbero che C è maturo perché è in circolazione da molto tempo. Dico che C# è maturo perché è in parte il risultato delle nostre esperienze collettive con C. – Guge
Contro:
Non può essere utilizzato dai programmi che non usano anch'essi lo stesso quadro per l'accesso all'archivio dati, rendendo più difficile da usare in tutto il impresa.
Meno risorse disponibili on-line per non basato su SQL database di
No compatibilità tra di database tipi (non può scambiare per un diverso fornitore di db senza cambiare tutto il codice )
Il versioning è probabilmente un po 'di una cagna . Direi che aggiungere una nuova proprietà a un oggetto non è esattamente come come aggiungere una nuova colonna a una tabella .
Un'obiezione ai database di oggetti è che crea un accoppiamento stretto tra i dati e il codice. Per alcune app questo può essere OK, ma non per gli altri. Una cosa carina che ti offre un database relazionale è la possibilità di mettere molti punti di vista sui tuoi dati.
Ted Neward spiega questo e molto altro su OODBMS molto meglio di questo.
Questo è sciocco. Se non si dispone di questo accoppiamento stretto, si ottiene il tasso di errore RDBMS standard del 30% di record difettosi. –
Sören
Tutte le ragioni che sono valide, ma vedo il problema con OODBMS è il modello logico dei dati.Il modello oggetto (o piuttosto il modello di rete degli anni '70) non è semplice come quello relazionale ed è quindi inferiore.
La semplicità non genera la superiorità per impostazione predefinita ... –
Se entrambi sono ugualmente potenti, e in questo caso lo sono dal momento che il modello relazionale può rappresentare qualsiasi cosa, quindi la semplicità è migliore. –
ho usato db4o che è un OODB e risolve la maggior parte dei cons elencate:
- Familiarità - programmatori conoscono la loro lingua meglio di SQL (vedi query nativi)
- Prestazioni - questo uno è molto soggettiva, ma si può dare un'occhiata a PolePosition
- supporto del fornitore e la maturità - può cambiare nel corso del tempo
- non può essere usato da programmi che non utilizzano anche lo stesso quadro - ci sono gli standard OODB e si può utilizzare different frameworks
- Il versioning è probabilmente un po 'pignolo - Il versionamento è in realtà easier!
I pro che mi interessano sono:
- query nativi - db4o permette di scrivere query nella tua lingua digitato statico in modo da non dovete preoccuparvi di errori di digitazione di una stringa e trovare dati mancanti in fase di esecuzione,
- Facilità di utilizzo: definizione della logica di buissiness nel livello dominio, livello di persistenza (mapping) e infine il database SQL è sicuramente una violazione di DRY. Con OODB definisci il tuo dominio a cui appartiene.
Sono d'accordo - OODB ha una lunga strada da percorrere ma stanno andando. E ci sono problemi di dominio là fuori che sono meglio risolti da OODB,
jodonnel, non vedo come l'uso dei database oggetto accoppi il codice dell'applicazione ai dati. È ancora possibile astrarre l'applicazione da OODB utilizzando un modello di repository e sostituirlo con un database SQL con back-up ORM se si progettano le cose correttamente.
Per un'applicazione OO, un database OO fornirà un adattamento più naturale per oggetti persistenti.
Ciò che è probabilmente vero è che si collegano i dati al modello di dominio, ma questo è il punto cruciale!
Non sarebbe opportuno disporre di un unico modo per esaminare sia i dati, le regole aziendali e i processi che utilizzano una vista incentrata sul dominio?
Quindi, un grande vantaggio è che un OODB corrisponda a come sono progettate le più moderne applicazioni software orientate agli oggetti di livello enterprise, non vi è alcuno sforzo aggiuntivo per progettare un livello dati utilizzando un design (relazionale) diverso. Più economico da costruire e mantenere, e in molti casi prestazioni generali più elevate.
Contro, appena generale mancanza di maturità e l'adozione mi sa ...
Non ha nulla a che fare con le prestazioni. Vale a dire, in pratica tutte le applicazioni funzionerebbero meglio con un OODB. Ma questo metterebbe anche fuori lavoro molti DBA/dovendo imparare una nuova tecnologia. Ancora più persone sarebbero senza lavoro correggendo gli errori nei dati. È improbabile che gli OODB diventino popolari con le aziende affermate. Sembra che Gavin sia totalmente privo di senso, un collegamento migliore sarebbe Kirk
Il link al grande blog post di Kirk Pepperdine vale il +1 –
- 1. Quali sono i pro e i contro di Anchor Modeling?
- 2. Quali sono i pro e i contro di un TreeSet
- 3. Quali sono i pro e i contro dell'uso di Global.asax?
- 4. Quali sono i tipi di modelli utilizzati, pro e contro?
- 5. Quali sono i pro e i contro degli Enumerator vs. Conduit vs. Pipes?
- 6. Quali sono i pro e i contro di DynamoDB rispetto ad altri database NoSQL?
- 7. Quali sono i pro e i contro dell'uso di GenericForeignKey rispetto all'ereditarietà multipla rispetto a OneToOneField?
- 8. Quali sono i pro e i contro dell'uso di configChanges = "orientation" per i dispositivi Android?
- 9. Quali sono i pro e contro dei framework di test funzionali per una nuova applicazione Grails?
- 10. Quali sono i pro e i contro di asset_packager e Jammit?
- 11. Quali sono i pro e i contro di entrambi Jade e EJS per il modello Node.js?
- 12. Quali sono i pro e i contro dell'input delimitato generale di Ruby? (percentuale di sintassi)
- 13. Quali sono i pro e i contro dell'utilizzo di un'e-mail come nome utente?
- 14. Quali sono i pro e i contro dell'utilizzo dei componenti di progettazione di Visual Studio per i dati
- 15. Quali sono i pro e i contro dell'utilizzo dell'elenco manuale iterazione vs ricorsione tramite fail
- 16. Quali sono i pro e i contro dell'uso dei due diversi stili di programmazione di CGI.pm con Perl?
- 17. Quali sono i pro/contro di restituzione degli oggetti POCO da un repository rathen rispetto alle entità EF?
- 18. Quali sono i pro e i contro di LinkedHashMaps rispetto a LinkedHashSet?
- 19. Quali sono i pro e i contro dell'uso di un motore di template come Jade?
- 20. Quali sono i pro e i contro delle procedure di chiamata in VB.NET?
- 21. Quali sono i pro e i contro di HTML5 Canvas vs. SVG + Raphael.js?
- 22. WPF - MVVM - Quali sono i pro e i contro delle varie tecniche di creazione di viste?
- 23. Quali sono i pro e i contro dell'uso di una flag enum?
- 24. Quali sono i pro e i contro del parametro --svn-branches per svn2git
- 25. Quali sono i pro e i contro di git-flow vs github-flow?
- 26. Quali sono i pro e i contro dell'uso di variabili di trasmissione in un singleton?
- 27. Quali sono i pro e i contro di rspec mocking rispetto ad altri framework beffardi?
- 28. Quali sono i pro e i contro di RemObjects PascalScript rispetto allo script DWS?
- 29. Quali sono i pro e i contro del linguaggio di programmazione Icon?
- 30. Quali sono le situazioni o i pro e i contro dell'uso di C++/CLI su C#
penso che questo dovrebbe essere un CW – Konstantinos