Domanda

Sto provando il database di oggetti db4o e finora mi piace molto quello che sto vedendo, ma ho anche letto questo post su stackoverflow esperienze db4o? indicando che non tutto ciò che sembra così facile è facile.

In questo momento, ho alcune domande su come usare db4o nelle app del mondo reale. Quindi, se hai qualche esperienza di lavoro (specialmente nel contesto di un'app Web) con db4o, mi piacerebbe ascoltarli.

Ecco le mie domande:

  1. Come si gestisce l'identità degli oggetti quando si lavora con oggetti memorizzati db4o? **
    Provenendo da un background RDBMS in cui di solito hai sempre una colonna chiave / colonna di identità per ogni tabella, non posso immaginare ora come gestire l'identità dell'oggetto in db4o.

    Ad esempio, se stavo lavorando con NHibernate / mysql e avessi bisogno di trovare un oggetto Utente per id, farei session.Load (primaryKey) e verrà recuperato dal suo PK. È anche molto comune che il PK sia definito come incremento automatico nella definizione della tabella.

  2. Poiché non esiste tale opzione in db4o, il mio pensiero stava usando una struttura Guid per identificare alcuni oggetti nel database degli oggetti.

  3. Qualunque strumento per visualizzare gli oggetti memorizzati nel db?

    Esiste qualcosa come SQL Server Management Studio (probabilmente meno sofisticato) nel mondo db4o? Vorrei visualizzare i dati / oggetti già memorizzati nel file db.

  4. Sei fregato durante la ridenominazione degli oggetti del tuo dominio?

    Per quanto ne so quando si rinomina una classe, tutte le istanze precedentemente memorizzate nel database non possono più essere recuperate. C'è un modo per aggirare questo problema? Come gestite gli aggiornamenti su un database live che contiene già molti oggetti?

  5. Posso escludere le proprietà dal salvataggio nel DB?

    Se ad esempio un oggetto di dominio contiene un riferimento a un oggetto di servizio (senza stato), anche l'oggetto di servizio verrà persistito se l'oggetto di dominio viene persistito, giusto?

Sembra un po 'strano avere un'installazione di servizio salvata nel database, almeno per me.

È possibile escludere il salvataggio dell'istanza del servizio? Se l'oggetto dominio viene nuovamente recuperato, come posso assicurarmi che anche il servizio venga iniettato di nuovo nell'istanza?

È stato utile?

Soluzione

1) Come gestisci l'identità degli oggetti quando lavori con gli oggetti memorizzati db4o? In db4o normalmente non hai un ID. db4o utilizza object-identity per distinguere l'oggetto. Quindi lo stesso oggetto in memoria sarà lo stesso oggetto per il database.

Finché non serializzi un oggetto, questo funziona bene. Tuttavia, non appena gli oggetti vengono serializzati / disconnessi, questo non funziona più. Ad esempio in uno scenario Web: i dati vengono inviati al browser. Ora è necessario identificare nuovamente gli oggetti in seguito con alcuni ID.

Penso che queste tre opzioni siano possibili: - Usa db4o ID interno . Tuttavia questo ID non è per sempre. La deframmentazione del database modifica questo ID. - Utilizzo di UUID di db4o . Ma gli UUID db4o sono abbastanza grandi - Creazione di ID da soli

2) Esiste uno strumento di gestione degli oggetti per esaminare il database. Tuttavia è estremamente limitato nel suo stato attuale. A mio avviso, questo è un grosso svantaggio per db4o.

3) Puoi creare alias, rinomina classi e campi ecc. . Tuttavia, la modifica della gerarchia ereditaria non funziona. Quindi è necessario copiare i vecchi dati in nuove istanze.

4) Sì. Puoi contrassegnare i campi come transitorio con l'attributo .NET-Non serializzato o gli attributi personalizzati.

Altri suggerimenti

Nei database orientati agli oggetti (come db4o) l'identità dell'oggetto non dovrebbe essere realmente utilizzata. Invece uno ha usato query e navigazione. Prima esegui una query per ottenere uno / alcuni oggetti, quindi usa la navigazione per arrivare ad altri.

'Navigazione' significa che segui semplicemente i campi / riferimenti in qualsiasi oggetto caricato.

L'uso degli identificatori di oggetti può essere considerato un cattivo stile, la maggior parte delle applicazioni (che conosco) non le usa affatto.

Mentre lavoravo con DB4O, ho scritto un semplice browser di oggetti DB4O che funziona molto meglio di quello incluso. Provalo, è open source.

http://sourceforge.net/projects/db4oviewer/develop

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