Domanda

Sfondo: Ok, quindi sto cercando quello che immagino sia un database di oggetti.Tuttavia, i (certamente pochi) database di oggetti che ho esaminato erano semplici livelli di persistenza e non DBMS completi.Non so se quello che sto cercando sia considerato un database di oggetti, quindi qualsiasi aiuto che mi indichi la giusta direzione sarebbe molto apprezzato.


Non voglio darti due pagine che descrivono ciò che sto cercando, quindi userò un esempio per illustrare il mio punto.Diciamo che ho un oggetto "BlogPost" che devo archiviare.Qualcosa del genere, in pseudocodice:

class BlogPost
    title:String
    body:String
    author:User
    tags:List<String>
    comments:List<Comment>

(Assumere Comment è una classe a sé stante.)

Ora, in un database relazionale, author verrebbe memorizzato come una chiave esterna che punta a a User.id, e il tags E comments verrebbero archiviati come relazioni uno-a-molti o molti-a-molti utilizzando una tabella separata per archiviare le relazioni.Quello che mi piacerebbe è un motore di database che faccia quanto segue:

  • Memorizza gli oggetti correlati (author, tags, ecc.) con un riferimento diretto invece di utilizzare chiavi esterne, che richiedono una ricerca aggiuntiva;in altre parole, gli oggetti sovrapposti dovrebbero essere supportati nativamente dal database
  • Mi consente di aggiungere un commento o un tag al post del blog senza recuperare l'intero oggetto, aggiornarlo e quindi reinserirlo nel database (come un database orientato ai documenti - CouchDB ne è un esempio)

Immagino che quello che sto cercando sia un database di navigazione, ma non lo so.C'è qualcosa anche lontanamente simile a quello a cui sto pensando?se è così, come è chiamato?(O meglio ancora, dammi un vero database funzionante.) O sono troppo esigente?


Modificare:

Giusto per chiarire, NON sto cercando un ORM o uno strato di astrazione o qualcosa del genere.Sto cercando un database reale che lo faccia internamente.Scusate se sono stato difficile, ma ho cercato e non ho trovato nulla.


Modificare:

Inoltre, qualcosa per la JVM sarebbe eccellente, ma a questo punto non mi interessa davvero su quale piattaforma gira.

È stato utile?

Soluzione

Penso che ciò che stai descrivendo possa essere facilmente modellato in un database grafico . Quindi si ottiene il vantaggio di navigare verso i nodi / i bordi in cui si desidera apportare modifiche senza che sia necessario recuperare altro. Per la JVM c'è il Neo4j database grafico open source (di cui faccio parte del team). Puoi leggerlo a High Scalability , come parte di una panoramica su thinkvitamin o in questo thread stackoverflow . Per quanto riguarda i tag, penso che memorizzarli in un database di grafi possa darti alcuni vantaggi extra se vuoi trovare tag correlati e cose simili. Basta inserire una riga nella mailing list e Sono sicuro che la community ti aiuterà.

Altri suggerimenti

Puoi provare db4o che è disponibile in C # e Java.

Penso che stiamo cercando questo: http://www.odbms.org/ . Questo sito ha alcune buone informazioni sui database degli oggetti, tra cui Objectivity , che è un database di oggetti piuttosto buono.

Esattamente quello che hai descritto può essere fatto con (N) Hibernate in esecuzione su un normale RDBMS.

Il vantaggio di utilizzare un tale livello di persistenza con un normale database è che si dispone di un sistema di database standard combinato con una comoda programmazione. Dichiarate le vostre lezioni in modo molto naturale e (N) Hibernate fornisce un modo per tradurre tra riferimenti / elenchi e relazioni di chiave esterna.

Tutorial Java: http: // docs.jboss.org/hibernate/stable/core/reference/en/html/tutorial-firstapp.html

Tutorial .NET: https://web.archive.org/web/20081212181310/http://blogs.hibernatingrhinos.com/nhibernate/archive/2008/04/01/your -prima-NHibernate-based-Application.aspx

Se insisti a non voler utilizzare un RDBMS standard ben supportato e preferisci affidare i tuoi dati a qualcosa di più esotico e meno pesantemente testato, stai cercando un Database relazionale oggetti .

Tuttavia, un tale prodotto verrebbe probabilmente implementato al meglio rendendolo comunque uno strato su un RDBMS standard. Questo è probabilmente il motivo per cui ORM come (N) Hibernate sono la soluzione più popolare: consentono di applicare il software RDBMS standard (e le competenze di gestione / utente ampiamente disponibili), eppure l'esperienza di programmazione è basata sul 99% di oggetti.

Questo è esattamente ciò per cui LINQ è stato progettato per.

  

Microsoft LINQ definisce un set di operatori di query proprietari che possono essere utilizzati per eseguire query, proiettare e filtrare i dati in array, classi enumerabili, XML (XLINQ), database relazionale e origini dati di terze parti. Sebbene permetta di interrogare qualsiasi fonte di dati, richiede che i dati siano incapsulati come oggetti. Pertanto, se l'origine dati non memorizza nativamente i dati come oggetti, i dati devono essere mappati sul dominio dell'oggetto. Le query scritte utilizzando gli operatori di query vengono eseguite dal motore di elaborazione delle query LINQ o, tramite un meccanismo di estensione, consegnate ai provider LINQ che implementano un motore di elaborazione delle query separato o traducono in un formato diverso per essere eseguite su un archivio dati separato ( come su un server di database come query SQL (DLINQ)). I risultati di una query vengono restituiti come una raccolta di oggetti in memoria che possono essere enumerati utilizzando una funzione iteratore standard come foreach di C #.

Esistono vari termini, tutti collegati a Mappatura relazionale di oggetti , aka ORM, che probabilmente sarà il più utile per cercare. Esistono librerie ORM per molti linguaggi di programmazione.

Oracle tabelle nidificate forniscono parte di tale funzionalità, anche se negli aggiornamenti, tu non puoi semplicemente aggiungere una riga alla tabella nidificata, devi sostituire l'intera tabella nidificata.

Suppongo che tu stia cercando un ORM con " EntityFirst " approccio.

Nell'approccio EntityFirst lo sviluppatore si preoccupa per lo meno [per niente] del database. Devi solo costruire le tue entità o oggetti. L'ORM si occupa quindi di archiviare le entità nel database e di recuperarle a piacimento.

L'unico ORM EntityFirst con la mia conoscenza " Signum " ;. È un framework meraviglioso costruito su .net. Ti consiglio di visitare alcuni video sul sito web SignumFramework e Sono sicuro che lo troverai utile.

Testo del link: http://www.signumframework.com

Grazie.

Forse ZODB? buona introduzione trova qui: http://www.ibm.com/developerworks/aix/library/au -zodb /

Potresti provare STSdb, DB4O, Prest...che è disponibile in C# e Java.

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