Pregunta

Tengo un gran árbol de objetos Java en mi aplicación de escritorio y estoy tratando de decidir cuál es la mejor manera de conservarlos como un archivo en el sistema de archivos.

Algunos pensamientos que he tenido fueron:

  • Ejecute mi propio serializador usando DataOutputStream:Esto me daría el mayor control de lo que había en el archivo, pero a costa de microgestionarlo.

  • Serialización antigua y sencilla utilizando ObjectOutputStream y sus diversas clases relacionadas:Sin embargo, no estoy convencido porque los datos me parecen frágiles.Cambiar la estructura de cualquier objeto rompe sus instancias serializadas.Así que estoy atrapado en lo que parece ser una horrible pesadilla de versiones.

  • Serialización XML:No es tan frágil, pero es significativamente más lento que la serialización directa.Se puede transformar fuera de mi programa.

  • JavaDB:Lo había considerado porque me siento cómodo escribiendo aplicaciones JDBC.La diferencia aquí es que la instancia de la base de datos solo persistirá mientras el archivo se esté abriendo o guardando.No es bonito pero...se presta para migrar a una arquitectura de servidor central si surge la necesidad más adelante e introduce la posibilidad de consultar el modelo de datos de una manera más sencilla.

Tengo curiosidad por ver qué piensan otras personas.Y espero haberme perdido algún enfoque obvio y más simple que los anteriores.


Aquí hay algunas opciones más extraídas de las respuestas a continuación:

  • Una base de datos de objetos - Tiene significativamente menos infraestructura que los enfoques ORM y funciona más rápido que un enfoque XML.gracias aku
¿Fue útil?

Solución

objetos db4 podría ser la mejor opción

Otros consejos

Yo elegiría la opción final JavaDB (distribución de Sun de derby) y utilizar una capa relacional de objetos como Hibernar o iBatis.Utilizar los tres primeros enfoques significa que dedicará más tiempo a crear un motor de base de datos que a desarrollar funciones de aplicación.

Eche un vistazo a Hibernate como una forma más sencilla de interactuar con una base de datos.

En mi experiencia, probablemente sea mejor utilizar una base de datos integrada.SQL, aunque no es perfecto, suele ser mucho más fácil que diseñar un formato de archivo que funcione bien y sea confiable.

No he usado JavaDB, pero he tenido buena suerte con H2 y SQLite.SQLite es una biblioteca C, lo que significa un poco más de trabajo en términos de implementación.Sin embargo, tiene la ventaja de almacenar toda la base de datos en una única biblioteca multiplataforma.Básicamente, es un formato de archivo genérico preempaquetado.SQLite ha sido tan útil que incluso comencé a usarlo en lugar de archivos de texto en scripts.

Tenga cuidado al utilizar Hibernate si está trabajando con un pequeño problema de persistencia.Agrega mucha complejidad y sobrecarga de biblioteca.Hibernar es realmente bueno si trabajas con una gran cantidad de tablas, pero probablemente será engorroso si solo necesitas unas pocas tablas.

XStream de codehaus.org

Serialización/deserialización XML en gran medida sin codificación.Puede utilizar anotaciones para modificarlo.Trabajando bien en dos proyectos donde trabajo.

Vea la presentación de mi grupo de usuarios en http://cjugaustralia.org/?p=61

Creo que depende de lo que necesites.Veamos las opciones:

1) ¡Descartado inmediatamente!Ni siquiera lo justificaré.:)

2) Si necesita una persistencia simple, rápida y de un solo método, continúe con ella.¡Persistirá el gráfico de datos completo tal como está!Tenga cuidado con cuánto tiempo mantendrá los objetos persistentes.Como usted mismo señaló, el control de versiones puede ser un problema.

3) Más lento que (2), necesita código adicional y el usuario puede editarlo.Solo lo usaría si se supone que los datos deben ser utilizados por un cliente en otro idioma.

4) Si necesita consultar sus datos de alguna manera, quédese con la solución DB.

Bueno, creo que ya habías respondido a tu pregunta :)

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