Question

J'essaie la base de données d'objet db4o et jusqu'à présent, j'aime bien ce que je vois, mais j'ai aussi lu ce billet sur stackoverflow Expériences db4o? indiquant que tout ce qui semble si facile n'est pas toujours facile.

Pour le moment, j'ai quelques questions sur l'utilisation de db4o dans les applications du monde réel. Donc, si vous avez déjà travaillé avec db4o (en particulier dans le contexte d'applications Web), j'aimerais les entendre.

Voici mes questions:

  1. Comment gérez-vous l'identité des objets lorsque vous travaillez avec des objets stockés db4o? **
    Venant du contexte SGBDR où vous avez normalement toujours une colonne clé primaire / identité pour chaque table, je ne peux pas imaginer pour le moment comment gérer l’identité d’objet dans db4o.

    Par exemple, si je travaillais avec NHibernate / mysql et que je devais trouver un objet User par identifiant, je ferais session.Load (primaryKey) et il sera récupéré par sa PK. Il est également très courant que la PC soit définie comme une incrémentation automatique dans la définition de la table.

  2. Comme cette option n’existait pas dans db4o, je pensais utiliser une structure Guid pour identifier certains objets dans la base de données d’objets.

  3. Tous les outils pour afficher les objets stockés dans la base de données?

    Existe-t-il quelque chose comme SQL Server Management Studio (probablement moins sophistiqué) dans le monde de db4o? Je souhaite afficher les données / objets déjà stockés dans le fichier db.

  4. Êtes-vous foutu en renommant vos objets de domaine?

    Autant que je sache lorsque vous renommez une classe, aucune instance précédemment stockée dans la base de données ne peut plus être récupérée. Y at-il un moyen de contourner ce problème? Comment gérez-vous les mises à jour avec une base de données dynamique contenant déjà de nombreux objets?

  5. Puis-je exclure l'enregistrement de propriétés dans la base de données?

    Si, par exemple, un objet de domaine contient une référence à un objet de service (sans état), l'objet de service sera également conservé si l'objet de domaine est conservé, n'est-ce pas?

Il me semble un peu étrange de disposer d’une instance de service enregistrée dans la base de données, du moins pour moi.

Pouvez-vous exclure l’instance de service de la sauvegarde? Si l'objet de domaine est à nouveau récupéré, comment puis-je m'assurer que le service est également réinjecté dans l'instance?

Était-ce utile?

La solution

1) Comment gérez-vous l'identité des objets lorsque vous travaillez avec des objets stockés db4o? Dans db4o, vous n'avez normalement pas d'identifiant. db4o utilise le object-identity pour distinguer l'objet. Donc, le même objet en mémoire sera le même objet pour la base de données.

Tant que vous ne sérialisez pas d'objet, cela fonctionne bien. Cependant, dès que les objets sont sérialisés / déconnectés, cela ne fonctionne plus. Par exemple, dans un scénario Web: Vous envoyez les données au navigateur. Maintenant, vous devez identifier les objets plus tard à l'aide de quelques identifiants.

Je pense que ces trois options sont possibles: - Utilisez le db4o internal id . Cependant, cet identifiant n'est pas éternel. La défragmentation de la base de données modifie cet identifiant. - Utilisation de UUIDs de db4o . Mais les UUID de db4o sont assez gros - Créer vous-même des identifiants

2) Il existe un outil Object-Manager pour examiner la base de données. Cependant, il est extrêmement limité dans son état actuel. À mon avis, c’est un gros inconvénient pour db4o.

3) Vous pouvez créer alias, renommer des classes et des champs, etc. . Cependant, changer la hiérarchie des héritages ne fonctionne pas. Ensuite, vous devez copier les anciennes données dans de nouvelles instances.

4) Oui. Vous pouvez marquer les champs comme suit: transitoire avec l'attribut .NET-NonSerialized ou les attributs personnalisés.

Autres conseils

Dans les bases de données orientées objets (telles que db4o), l'identité de l'objet ne doit pas vraiment être utilisée. Au lieu de cela, on utilisait des requêtes et de la navigation. Effectuez d’abord une requête pour obtenir un / des objets, puis utilisez la navigation pour vous rendre aux autres.

"Navigation" signifie que vous ne faites que suivre les champs / références de tout objet chargé.

L'utilisation d'identificateurs d'objet peut être considérée comme un mauvais style. La plupart des applications (que je connais) ne les utilisent pas du tout.

Tout en travaillant avec DB4O, j’ai écrit un navigateur d’objets DB4O qui fonctionne beaucoup mieux que celui inclus. Essayez-le, il est open source.

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top