2008-08-31 20 views
10

Tengo un gran árbol de objetos Java en mi aplicación de escritorio y estoy tratando de decidir sobre la mejor manera de mantenerlos como un archivo en el sistema de archivos.¿Cuál es la mejor manera de conservar datos en una aplicación de escritorio Java?

Algunos pensamientos que he tenido fueron:

  • rueda mi propia serializador usando DataOutputStream: Esto me daría el mayor control de lo que era en el archivo, pero a costa de la microgestión de la misma.

  • Straight old serialización utilizando ObjectOutputStream y sus diversas clases relacionadas: aunque no me han vendido, los datos me parecen frágiles. El cambio de la estructura de cualquier objeto rompe las instancias serializadas de la misma. Así que estoy encerrado en lo que parece ser una horrible pesadilla de control de versiones.

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

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

Tengo curiosidad por ver lo que otras personas piensan. Y espero haber perdido un enfoque obvio y más simple que los anteriores.


Éstos son algunos más opciones seleccionadas de las respuestas a continuación:

  • Una base de datos de objetos - tiene significativamente menos infraestructura que se acerca ORM y realiza más rápido que un enfoque XML. gracias aku

Respuesta

4

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

1

xstream de codehaus.org

serialización XML/deserialización en gran medida sin necesidad de programación. Puede usar anotaciones para ajustarlo. Trabajando bien en dos proyectos donde trabajo.

Véase mi presentación en grupo de usuarios http://cjugaustralia.org/?p=61

5

me gustaría ir para el que su opción final JavaDB (distribución de Derby del Sol) y el uso de una capa de objetos relacionales como Hibernate o iBatis. El uso de los primeros tres enfoques significa que va a dedicar más tiempo a la creación de un motor de base de datos que al desarrollo de características de la aplicación.

4

En mi experiencia, es probable que mejor usar una base de datos integrada.SQL, aunque es menos que 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 he comenzado a usarlo en lugar de archivos de texto en scripts.

Tenga cuidado usando Hibernate si está trabajando con un pequeño problema persistencia. Agrega mucha complejidad y gastos generales de biblioteca. Hibernate es realmente agradable si está trabajando con una gran cantidad de tablas, pero probablemente será engorroso si solo necesita algunas tablas.

0

Creo que depende de lo que necesite. Vamos a ver las opciones:

1) Descarded imediatelly! Ni siquiera voy a justificar. :)

2) Si necesita una forma sencilla, rápida, de un método de persistencia, palo con ella. ¡Persistirá el gráfico de datos completo tal como está! Tenga cuidado de cuánto tiempo va a mantener los objetos persistentes. Como usted mismo señaló, el control de versiones puede ser un problema.

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

4) Si necesita consultar sus datos en cualquier caso, seguir con la solución de base de datos.

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

Cuestiones relacionadas