Frage

Mir Auswertung db4o für die Persistenz für ein ASP .NET MVC-Projekt.

Ich frage mich, wie ich die IObjectContainer in einem Web-Kontext in Bezug auf Objektlebensdauer verwendet werden soll. Wie ich es sehe, kann ich eine der folgenden tun:

  1. Erstellen Sie die IObjectContainer beim Start der Anwendung und halten die gleiche Instanz für die gesamte Anwendung Lebensdauer.
  2. Erstellen Sie eine IObjectContainer pro Anfrage.
  3. Starten Sie einen Server und einen Client IObjectContainer für jede Datenbank-Interaktion.

Was sind die Auswirkungen dieser Optionen in Bezug auf Leistung und Parallelität?

Da die Datenbank gesperrt wird, wenn ein IObjectContainer geöffnet, ich bin ziemlich sicher, dass die Option 2) würde mir ein paar Probleme mit Parallelität bekommen - würde dies auch der Fall sein, für die Option 1?

Wie ich es verstehe, wenn ich ein Objekt aus einer IObjectContainer abzurufen, müssen sie von der gleichen IObjectContainer Instanz gespeichert werden - um für db4o es zu identifizieren, wie das gleiche Objekt zu sein. Daher Wenn ich die Option 3) wählen, würde ich das ursprüngliche Objekt abrufen muß, die notwendigen Änderungen vorzunehmen (Kopieren von Daten aus einem modifizierten Objekt), und dann die gleichen IObjectContainer Verwendung speichern. Ist das wahr ?

War es hilfreich?

Lösung

Option 1) können Sie in ernsthafte Schwierigkeiten bekommen, weil Sie effektiv eine Transaktion unter allen Anfragen teilen. Ich glaube nicht, dass dies ein gangbarer Weg ist.

Wie Sie bereits identifiziert, Option 3) ist mit einem eigenen Gefahr behaftet, weil Sie den Überblick über die Objektidentität von Hand zu halten haben - eine langwierige und äußerst fehleranfällige Aufgabe. Das ist wirklich zerstört die ganze Schönheit der Objektdatenbank. Auch von dem, was ich weiß, der Aufwand für die Erstellung IObjectContainer nicht klein ist, so wird dies viel zu teuer sein.

Diese ziemlich Blätter uns mit der Option 2, die nicht auf die Datenbank nicht sperren, wenn im Client-Server-Modus so weit geöffnet, wie ich weiß -, wo Sie diese informaiton aufmerksam geworden? So ist die beste Idee, eine IObjectServer beim Anwendungsstart und öffnen neue eine IObjectContainer pro Anforderung zu öffnen ist, oder auf einen Remote-Server pro-Anforderung über TCP verbinden.

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