Frage

Ich versuche, das db4o Objekt databse und so weit ich ganz wie, was ich sehe, aber ich habe auch gelesen, diesen Beitrag auf Stackoverflow db4o Erfahrungen? darauf hinweist, dass nicht alles, was so einfach ist, einfach zu sein scheint.

Gerade jetzt, ich habe einige Fragen in Bezug auf, wie db4o in der realen Welt-Anwendungen verwendet wird. Also, wenn Sie keine Erfahrung in der Arbeit (vor allem in Web-App-Kontext) mit db4o, würde ich lieben, sie zu hören.

Hier sind meine Fragen:

  1. Wie kann man Objektidentität zu verwalten, wenn sie mit db4o gespeicherten Objekten zu arbeiten? **
    Aus Richtung RDBMS Hintergrund, wo Sie in der Regel immer eine Primärschlüssel / Identitätsspalte für jeden Tisch haben, kann ich nicht vorstellen, gerade jetzt, wie Objektidentität in db4o zu verwalten.

    Zum Beispiel, wenn ich mit NHibernate / mysql arbeite und benötigen ein Benutzerobjekt von ID zu finden, die ich tun würde, session.Load (primaryKey), und es wird durch seine PK abgerufen werden. Es ist auch sehr häufig, dass die PK als Autoinkrement in der Tabellendefinition definiert ist.

  2. Da es keine solche Option in db4o ist, mein Gedanke war eine Guid Struktur, um mit einigen Objekten in der Objektdatenbank zu identifizieren.

  3. Alle Tools, die gespeicherten Objekte in der DB sehen?

    Gibt es so etwas wie SQL Server Management Studio (wahrscheinlich weniger anspruchsvoll) in der db4o Welt? Ich mag die bereits gespeicherten Daten / Objekte in der db-Datei anzuzeigen.

  4. Sind Sie geschraubt, wenn Sie Ihre Domain-Objekte umbenennen?

    Soweit ich weiß, wenn Sie eine Klasse umbenennen, werden alle zuvor in der db gespeichert Instanzen können nicht mehr abgerufen werden. Gibt es eine Möglichkeit, um dieses Problem zu arbeiten? Wie gehen Sie mit Updates gegen eine Live-Datenbank behandeln, die bereits viele Objekte enthalten?

  5. Kann ich ausschließen Objekte in der DB gespeichert werden?

    Wenn zum Beispiel eines Domain-Objekt einen Verweis auf ein (stateless) Dienstobjekt hält, dann wird das Service-Objekt auch beibehalten werden, wenn das Domain-Objekt beibehalten wird, nicht wahr?

Es scheint ein wenig seltsam einen Dienst instace in der Datenbank gespeichert haben, zumindest für mich.

Können Sie die Service-Instanz ausschließen nicht gespeichert werden? Wenn das Domain-Objekt erneut abgerufen wird, wie kann ich sicherstellen, dass der Dienst auch wieder in der Instanz injiziert wird?

War es hilfreich?

Lösung

1) Wie kann man Objektidentität zu verwalten, wenn sie mit db4o gespeicherten Objekten zu arbeiten? In db4o haben Sie in der Regel keine ID. db4o verwendet das Objekt-Identität , um das Objekt auseinander zu unterscheiden. Also das gleiche Objekt im Speicher wird das gleiche Objekt für die Datenbank sein.

Wie lange Sie Serialisierung nicht Gegenstand dieses funktioniert gut. Sobald jedoch Objekte serialisiert / Unterbrochen dies nicht mehr funktioniert. Zum Beispiel in einem Web-Szenario: Sie senden die Daten an den Browser. Nun müssen Sie es später noch einmal die Objekte identifizieren, die von einigen ids.

Ich denke, diese drei Optionen sind möglich: Verwenden Sie die db4o interne ID . Dies ist jedoch id nicht für immer. die Datenbank defragmentieren ändert diese ID. - Verwenden von db4os UUIDs . Aber DB4O UUIDs sind recht groß - Erstellen von IDs selbst

2) Es ist ein Objekt-Manager Tool in der Datenbank zu suchen. Allerdings beschränkt es extrem in seinem aktuellen Zustand. Meiner Meinung nach ist dies ein großer Nachteil für db4o.

3) können Sie erstellen Aliase, umbenennen Klassen und Felder etc . Allerdings Ändern der Vererbung-Hierarchie nicht funktioniert. Dann müssen Sie die alten Daten, um neue Instanzen zu kopieren.

4) Ja. Sie können Felder wie transienter mit den .NET-NonSerialized Attribute oder benutzerdefinierten Attributen.

Andere Tipps

In Objekten orientierten Datenbanken (wie db4o) Objektidentität sollte nicht wirklich verwendet werden. Stattdessen verwendet man Abfragen und Navigation. Zuerst eine Abfrage führen Sie ein / einige Objekte zu bekommen, dann Navigation verwenden, um andere zu erhalten.

‚Navigation‘ bedeutet, dass Sie nur die Felder / Referenzen in jedem geladenen Objekt folgen.

Identifikatoren Objekt verwenden kann schlechten Stil, die meisten Anwendung in Betracht gezogen werden (die ich kenne) sie nicht überhaupt.

Während einige Arbeit mit DB4O tun, schrieb ich eine einfache DB4O Objekt-Browser, der viel besser ist als der eingeschlossene gearbeitet. Probieren Sie es aus, es ist Open Source.

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top