Cómo utilizar db4o IObjectContainer en una aplicación web? (Tiempo de vida del envase?)

StackOverflow https://stackoverflow.com/questions/2488010

  •  21-09-2019
  •  | 
  •  

Pregunta

Estoy evaluando db4o para la persistencia de un proyecto ASP .NET MVC.

Me pregunto cómo debo utilizar el IObjectContainer en un contexto web en lo que respecta a oponerse vida. Tal como lo veo, puedo hacer uno de los siguientes:

  1. Crea el IObjectContainer al iniciarse la aplicación y mantener el mismo ejemplo para toda la duración de la aplicación.
  2. Crear una IObjectContainer por solicitud.
  3. Iniciar un servidor, y obtener un cliente IObjectContainer para cada interacción de base de datos.

¿Cuáles son las implicaciones de estas opciones, en términos de rendimiento y concurrencia?

Desde la base de datos se bloquea cuando se abre un IObjectContainer, estoy bastante seguro de que la opción 2) me llevaría algunos problemas con la concurrencia - esto también podría ser el caso de la opción 1?

A mi entender, si puedo recuperar un objeto de una IObjectContainer, debe ser salvado por la misma instancia IObjectContainer - con el fin de db4o para identificarlo como el mismo objeto. Por lo tanto, si elijo la opción 3), que tendría que recuperar el objeto original, hacer los cambios necesarios (copiar datos desde un objeto modificado), y luego guardarlo utilizando el mismo IObjectContainer. Es esto cierto ?

¿Fue útil?

Solución

Opción 1) que puede meterse en serios problemas, ya que se compartan de manera efectiva una transacción entre todas las solicitudes. No creo que esta es una opción viable.

Como ya identificado, la opción 3) está plagado de sus propios peligros, ya que tendrá que realizar un seguimiento de la identidad del objeto de forma manual - una tarea tediosa y muy propenso a errores. Esto realmente destruye toda la belleza de la base de datos de objetos. Además, por lo que sé la sobrecarga de crear IObjectContainer no es pequeño por lo que este será demasiado caro.

Esto prácticamente nos deja con la opción 2, que no bloquee la base de datos cuando se abre en modo cliente-servidor por lo que yo sé - ¿dónde encontró que informaiton? Así que la mejor idea es abrir un IObjectServer al iniciar la aplicación y abrir una nueva IObjectContainer por solicitud, o conectarse a un servidor remoto utilizando TCP por solicitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top