java - tutorial - hsqldb ventajas y desventajas
¿Estoy loco? Cambio de un producto establecido de HSQLDB a Apache Derby (9)
Tengo un producto de software establecido que utiliza HSQLDB como su base de datos de configuración interna. Los proyectos de los clientes se almacenan en esta base de datos. A lo largo de los años, HSQLDB nos ha servido razonablemente bien, pero tiene algunos problemas de estabilidad / corrupción que hemos tenido que codificar en círculos, y aun así, parece que no podemos protegernos completamente de ellos.
Estoy considerando cambiar las bases de datos internas. Hacer esto sería bastante doloroso desde la perspectiva del desarrollo, pero las bases de datos dañadas (y la pérdida de datos ) no son divertidas de explicar a los clientes.
Así que mi pregunta es: ¿Alguien tiene suficiente experiencia para evaluar la estabilidad a largo plazo de Apache Derby? Encontré una publicación en Google quejándose de que Derby era inestable, pero fue de 2006, por lo que consideré que se ha mejorado en los últimos 4 años. O, ¿hay otra base de datos pura incrustada de Java (en proceso) que pueda usar (comercial o de código abierto)? El rendimiento no es muy importante para mí. La estabilidad es el rey. La integridad de los datos a través de la pérdida de energía, la buena compatibilidad con BLOB y las copias de seguridad en caliente son todas una necesidad.
Por favor, no sugiera algo que no sea una base de datos relacional basada en SQL. Estoy tratando de adaptar un producto existente, no empezar de cero, gracias.
¿Alguien tiene suficiente experiencia para evaluar la estabilidad a largo plazo de Apache Derby? (...)
Derby, ex IBM Cloudscape (y ahora también distribuido por Sun como JavaDB) es una base de datos compatible con ACID que puede soportar una gran cantidad de usuarios concurrentes, ejecutándose de forma integrada o en modo servidor, y se sabe que es robusta y está lista para la producción. No es tan rápido como HSQLDB (Derby usa operaciones duraderas), pero es robusto. Aún así, debes ejecutar tus propias pruebas contra él.
Ver también
Con respecto a HSQLDB, una cosa que no tiene como un proyecto que tiene SQLite es la documentación de un conjunto de pruebas robusto y la documentación en línea del cumplimiento asiduo de ACID.
No quiero quitarle nada a HSQLDB. Está destinado a servir como una alternativa a MySQL, no a fopen () como se pretende con SQLite. Se puede decir que el alcance de HSQLDB (en realidad todos los RDBMS de Java) es mucho más ambicioso. Fredt y su grupo han logrado un logro extraordinario con HSQLDB. Aun así, hacer la búsqueda en Google "Cumple con HSQLDB ACID" no deja a un adoptante temprano sintiéndose tan seguro como uno se siente después de leer acerca de los arneses de prueba en el sitio web SQLite.
En http://sqlite.org/transactional.html
"SQLite es transaccional
Una base de datos transaccional es aquella en la que todos los cambios y consultas parecen ser atómicos, consistentes, aislados y duraderos (ACID). SQLite implementa transacciones serializables que son atómicas, consistentes, aisladas y duraderas, incluso si la transacción se interrumpe por una falla del programa, una falla del sistema operativo o una falla de alimentación en la computadora.
Aquí reiteramos y amplificamos la oración anterior para enfatizar: Todos los cambios dentro de una sola transacción en SQLite se producen completamente o no se producen, incluso si el acto de escribir el cambio en el disco se interrumpe por
- un bloqueo del programa,
- una falla del sistema operativo, o
- un apagón
La reclamación del párrafo anterior se verifica exhaustivamente en el conjunto de pruebas de regresión de SQLite mediante un arnés de prueba especial que simula los efectos en un archivo de base de datos de fallas en el sistema operativo y fallas de energía ".
En http://sqlite.org/testing.html
"1.0 Introducción
La confiabilidad y robustez de SQLite se logra en parte mediante pruebas exhaustivas y cuidadosas.
A partir de la versión 3.7.14, la biblioteca SQLite consta de aproximadamente 81.3 KSLOC de código C. (KSLOC significa miles de "Líneas de código de origen" o, en otras palabras, líneas de código que excluyen las líneas en blanco y los comentarios). En comparación, el proyecto tiene 1124 veces más códigos de prueba y scripts de prueba - 91421.1 KSLOC.
1.1 Resumen ejecutivo
Tres arneses de prueba desarrollados de forma independiente Cobertura de prueba de ramificación del 100% en una configuración implementada Millones y millones de casos de prueba Pruebas de memoria insuficiente Pruebas de error de E / S Pruebas de pérdida de energía y fallos Pruebas de valores límite Valor de límite Pruebas de optimización deshabilitadas Pruebas de regresión Base de datos mal formada pruebas Uso extensivo de aserciones () y verificaciones en tiempo de ejecución Análisis de Valgrind Verificaciones de desbordamiento de enteros firmados "
Ejecuté Derby 24/7 como la base de datos interna que admite un sistema de gestión de pruebas y automatización de compilación durante 4 años. Fue utilizado por un equipo mundial y nunca se estrelló, perdió datos o dañó mis registros. La única razón por la que dejamos de usarlo es porque nuestra empresa fue comprada por otro y se dictó una decisión de nivel superior. Derby es sólido, confiable y bien vale su consideración.
Entonces, ¿cuál es más estable? MySQL, por ejemplo, no tiene tales problemas, tengo miedo de elegir alguno de ellos, pero debo hacerlo. Derby da más confianza, ya que Sun lo escogió para JDK.
Esta búsqueda muestra 215 publicaciones en la lista de correo de usuarios de HSQLDB que contienen la cadena "corrupto". http://search.gmane.org/?query=corrupt&author=&group=gmane.comp.java.hsqldb.user&sort=date&DEFAULTOP=and&xP=Zcorrupt&xFILTERS=Gcomp.java.hsqldb.user---A
Esta búsqueda muestra 264 publicaciones en la lista de correo de usuarios de Derby que contienen la misma cadena. http://search.gmane.org/?query=corrupt&author=&group=gmane.comp.apache.db.derby.user&sort=date&DEFAULTOP=and&xP=Zcorrupt&xFILTERS=Gcomp.apache.db.derby.user---A
Este muestra 1003 publicaciones en la lista de correo de Derby Dev con la misma cadena http://search.gmane.org/?query=corrupt&author=&group=gmane.comp.apache.db.derby.devel&sort=date&DEFAULTOP=and&xP=Zcorrupt&xFILTERS=Gcomp.apache.db.derby.devel---A
Un vistazo a algunas de las publicaciones muestra casos posibles o reales de corrupción de la base de datos que ocurren a pesar de los mejores esfuerzos de los desarrolladores de bases de datos.
HSQLDB ha tenido su propia cuota de problemas de corrupción de base de datos, pero ha mejorado con los años. En las últimas versiones se han introducido precauciones y correcciones para evitar todos los problemas que se informaron en los últimos años.
Sin embargo, la nueva función de almacenamiento de lob ha resultado tener un error lógico que hace que se olviden las burbujas después de una actualización. Esto se está solucionando en este momento, con pruebas más exhaustivas para respaldar la solución.
Los usuarios como CarlG han ayudado mucho a lo largo de los años en los esfuerzos de corrección de errores tanto de Derby como de HSQLDB.
Fred Toussi, Proyecto HSQLDB
He estado usando Apache Derby desde 2009 en muchos de mis proyectos, algunos de ellos con operación 24/7 y muchos millones de filas.
Nunca he tenido un solo evento de corrupción de datos. Rock sólido y rápido.
Sigo seleccionándolo como mi RDBMS de elección, a menos que haya una buena razón para no aparecer.
Para cada motor de base de datos existe un cierto riesgo de corrupción. Soy el autor principal de la base de datos H2, y también recibí informes sobre bases de datos dañadas. Las pruebas pueden reducir la probabilidad de errores, pero desafortunadamente es casi imposible garantizar que algún software esté ''libre de errores''.
En cuanto a las tres bases de datos de Java HSQLDB, Apache Derby y H2, no puedo decir cuál es la más estable. Solo puedo hablar de H2. Creo que para la mayoría de las operaciones, el H2 ahora es estable. Hay muchos casos de prueba que prueban especialmente si las bases de datos se corrompen. Esto incluye pruebas automatizadas de pérdida de potencia (usando un temporizador de luz de navidad). Con las pruebas de falla de energía, descubrí que la estabilidad también depende del sistema de archivos: a veces recibí mensajes de ''error CRC'', lo que significa que el sistema operativo no puede leer el archivo (era Windows). En ese caso, no hay mucho que puedas hacer.
Para los datos de misión crítica, en cualquier caso, no confiaría en que el software sea estable. Es muy importante crear copias de seguridad con regularidad y probarlas. Algunas bases de datos tienen múltiples formas de crear copias de seguridad. H2, por ejemplo, tiene una función de copia de seguridad en línea y una función para escribir un archivo de script SQL. Una alternativa es usar replicación o agrupamiento. H2 admite un modo de clúster simple, creo que Derby admite la replicación.
Pruebe SQLite si está buscando algo autónomo (no requiere servidor). Esto es lo que respalda la db api de android, y es altamente estable.
Trate de mirar en H2 . Fue creado por el tipo que originalmente creó HSQLDB pero que fue creado desde cero, por lo que no usa ningún código HSQLDB. No estoy seguro de cómo se compara su estabilidad con HSQL ya que no he usado HSQL en años y solo uso H2 para bases de datos de corta duración actualmente. Personalmente, encontré que el H2 es más fácil de seguir que Derby, pero tal vez sea porque el H2 tiene una página web de hojas de trucos.
Podría ser posible volver a codificar para usar una capa de abstracción y luego ejecutar pruebas para comparar H2 y Derby con los problemas que ha encontrado.
En el lado de la gestión de proyectos de la cerca, ¿su roadmap tiene una versión importante por venir? Ese podría ser un momento bastante apropiado para desgarrar las agallas de esta manera y no diría que estuvieras loco porque potencialmente podría eliminar muchas tareas difíciles de gestionar. Si desea realizar un cambio en el que podría afectar a los sistemas en vivo sin muchas advertencias y copias de seguridad en su lugar, puede estar loco.