2009-10-25 39 views
18

Sto provando il dbse dell'oggetto db4o e finora mi piace molto quello che sto vedendo, ma leggo anche questo post su StackOverflow db4o experiences? indicando che non tutto ciò che sembra così facile è facile.Alcune domande su come lavorare con db4o

In questo momento, ho alcune domande riguardo a come db4o viene utilizzato nelle app del mondo reale. Quindi, se hai esperienza nel lavorare (specialmente nel contesto delle app web) con db4o, mi piacerebbe ascoltarli.

Ecco le mie domande:

  1. Come si fa a gestire identità di un oggetto quando si lavora con gli oggetti db4o memorizzati **
    Venendo da RDBMS sfondo in cui normalmente sempre un colonna di chiave primaria/identità per ogni? tabella, non posso immaginare adesso come gestire l'identità dell'oggetto in db4o.

    Ad esempio, se lavorassi con NHibernate/mysql e dovessi trovare un oggetto User con 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 era usare una struttura Guid per identificare alcuni oggetti nel database degli oggetti.

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

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

  4. Sei fregato quando rinomini gli oggetti del tuo dominio?

    Per quanto ne so quando si rinomina una classe, non è possibile recuperare più istanze memorizzate in precedenza nel db. C'è un modo per ovviare a questo problema? Come gestisci gli aggiornamenti rispetto a un database live che contiene già molti oggetti?

  5. Posso escludere proprietà da salvare nel DB?

    Se ad esempio un oggetto dominio contiene un riferimento a un oggetto servizio (stateless), l'oggetto servizio verrà mantenuto anche se l'oggetto dominio viene mantenuto, giusto?

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

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

+0

+1 Questa è una buona domanda - Vorrei poterti aiutare. –

risposta

13

1) Come gestisci l'identità dell'oggetto quando lavori con gli oggetti archiviati db4o? In db4o normalmente non hai id. db4o usa lo object-identity per distinguere l'oggetto. Quindi lo stesso oggetto in memoria sarà lo stesso oggetto per il database.

Finché non si serializza l'oggetto, questo funziona correttamente. Tuttavia, non appena gli oggetti vengono serializzati/scollegati, questo non funziona più. Ad esempio in uno scenario Web: i dati vengono inviati al browser. Ora è necessario identificare gli oggetti in seguito di nuovo con alcuni ID.

Penso che queste tre opzioni siano possibili: - Utilizzare db4o internal id. Tuttavia questo id non è per sempre. La deframmentazione del database modifica questo ID. - Utilizzo db4o's UUIDs. Ma gli UUID db4o sono piuttosto grandi - Creare id da solo

2) C'è uno strumento di gestione degli oggetti per esaminare il database. Tuttavia è estremamente limitato nel suo stato attuale. A mio avviso questo è un enorme inconveniente per db4o.

3) È possibile creare aliases, rename classes and fields etc. Tuttavia, la modifica della gerarchia dell'ereditarietà non funziona. Quindi è necessario copiare i vecchi dati in nuove istanze.

4) Sì. È possibile contrassegnare i campi come transient con l'attributo .NET-NonSerialized o gli attributi personalizzati.

+0

db4o ha ristrutturato il suo sito web, che interrompe tutti i collegamenti pubblicati sopra. – Tom

+0

Ho aggiornato tutti i collegamenti. – Gamlor

2

Negli oggetti orientati database (come db4o) identità di un oggetto non dovrebbe davvero essere utilizzato. Invece si utilizza una query e una navigazione. Prima esegui una query per ottenere uno/alcuni oggetti, quindi usa la navigazione per arrivare agli altri.

'Navigazione' significa che basta seguire i campi/i riferimenti in qualsiasi oggetto caricato.

L'utilizzo degli identificatori di oggetto può essere considerato di cattivo stile, la maggior parte delle applicazioni (che io conosca) non le utilizzano affatto.

Problemi correlati