Я сумасшедший?Переключение установленного продукта с HSQLDB на Apache Derby - PullRequest
22 голосов
/ 30 июня 2010

У меня установлен программный продукт, который использует HSQLDB в качестве внутренней базы данных настроек. Проекты клиентов хранятся в этой базе данных. На протяжении многих лет HSQLDB служил нам достаточно хорошо, но у него есть некоторые проблемы со стабильностью / коррупцией, которые нам приходилось кодировать, и даже тогда мы не можем полностью защитить себя от них.

Я рассматриваю возможность изменения внутренних баз данных. Делать это было бы довольно болезненно с точки зрения разработки, но поврежденные базы данных (и потерянные данные ) неинтересно объяснять клиентам.

Итак, мой вопрос: у кого-нибудь достаточно опыта, чтобы оценить долговременную стабильность Apache Derby? Я нашел сообщение через Google с жалобой на нестабильность Дерби, но это было в 2006 году, поэтому я бы хотел развеять мысль, что за последние 4 года она улучшилась. Или есть другая чистая Java-встраиваемая (в процессе) база данных, которую я мог бы использовать (коммерческая или с открытым исходным кодом). Производительность не очень важна для меня. Стабильность - король. Целостность данных при потере питания, хорошая BLOB-поддержка и горячее резервирование - все это необходимо.

Пожалуйста, не предлагайте что-то, что не является базой данных на основе SQL. Я пытаюсь дооснастить существующий продукт, а не начинать с нуля, спасибо.

Ответы [ 8 ]

18 голосов
/ 03 июля 2010

Для каждого механизма базы данных существует определенный риск повреждения.Я являюсь основным автором базы данных H2, и я также получил отчеты о сломанных базах данных.Тестирование может снизить вероятность ошибок, но, к сожалению, почти невозможно гарантировать, что какое-то программное обеспечение «не содержит ошибок».

Что касается трех баз данных Java: HSQLDB, Apache Derby и H2, я не могу сказать, какие именноодин самый стабильный.Я могу говорить только о H2.Я думаю, что для большинства операций H2 теперь стабильна.Есть много тестов, которые специально проверяют наличие поврежденных баз данных.Это включает в себя автоматические тесты на потерю мощности (с использованием таймера рождественских огней).С помощью тестов на сбой питания я обнаружил, что стабильность также зависит от файловой системы: иногда я получаю сообщения «CRC error», означающие, что операционная система не может прочитать файл (это была Windows).В этом случае вы мало что можете сделать.

Для критически важных данных в любом случае я бы не стал полагаться на стабильность программного обеспечения.Очень важно регулярно создавать резервные копии и проверять их.Некоторые базы данных имеют несколько способов создания резервных копий.Например, H2 имеет функцию резервного копирования в онлайн-хранилище и функцию записи файла сценария SQL.Альтернативой является использование репликации или кластеризации.H2 поддерживает простой кластерный режим, я думаю, что Derby поддерживает репликацию.

12 голосов
/ 30 июня 2010

Я использовал Derby 24/7 в качестве внутренней базы данных, поддерживающей систему автоматизации сборки и управления тестами в течение 4 лет. Он использовался всемирной командой и никогда не падал, не терял данные и не портил мои записи. Единственная причина, по которой мы перестали его использовать, заключается в том, что наша компания была куплена другой компанией, и было принято решение более высокого уровня. Дерби надежен и заслуживает вашего внимания.

7 голосов
/ 03 июля 2010

Этот поиск показывает 215 сообщений в списке рассылки HSQLDB Users, содержащем строку «поврежден». 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

Этот поиск показывает 264 сообщения в списке рассылки Derby Users, содержащем ту же строку. 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

Это показывает 1003 сообщения в списке рассылки Derby Dev с той же строкой 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

Взгляд на некоторые посты показывает возможные или реальные случаи повреждения базы данных, несмотря на все усилия разработчиков баз данных.

HSQLDB имел свою долю проблем с повреждением базы данных, но с годами улучшился. В последних версиях были введены меры предосторожности и исправления, чтобы предотвратить все проблемы, о которых сообщалось в последние несколько лет.

Однако новая функция хранения логов, как оказалось, содержит логическую ошибку, которая приводит к тому, что лобы "забываются" после обновления. Это исправлено прямо сейчас, с более обширными тестами для поддержки исправления.

Такие пользователи, как CarlG, много лет помогали в исправлении ошибок в Derby и HSQLDB.

Фред Тусси, Проект HSQLDB

7 голосов
/ 30 июня 2010

У кого-нибудь достаточно опыта, чтобы оценить долговременную стабильность Apache Derby?(...)

Derby, от IBM Cloudscape (а теперь также распространяется Sun как JavaDB) - это ACID-совместимая база данных, которая может выдержать большое количество одновременных пользователей, работающих в режиме встроенного или в режиме сервераи известно, что он надежен и готов к производству.Это не так быстро, как HSQLDB (в Derby используются долговременные операции), но он надежен.Тем не менее, вы должны запустить свои собственные тесты против него.

См. Также

3 голосов
/ 27 января 2013

Что касается HSQLDB, то, чего нет у SQLite в качестве проекта, который есть у SQLite, так это о документации надежного пакета тестирования и онлайн-документации о тщательном соблюдении ACID.

Я не имею в видуубери что-нибудь из HSQLDB.Он предназначен служить альтернативой MySQL, а не fopen (), как задумано SQLite.Можно сказать, что сфера HSQLDB (в действительности все СУБД Java) гораздо более амбициозна.Фредт и его группа достигли выдающихся результатов с HSQLDB.Тем не менее, выполнение поиска Google «Является ли HSQLDB ACID-совместимым» не оставляет ощущения раннего пользователя столь же уверенным, как после прочтения о тестировании на веб-сайте SQLite.

При http://sqlite.org/transactional.html

"SQLite является транзакционным

Транзакционная база данных - это база данных, в которой все изменения и запросы выглядят как атомарные, согласованные, изолированные и долговременные (ACID). SQLite реализует сериализуемые транзакции, которые являются атомарными, согласованными, изолированнымии длительным, даже если транзакция прерывается из-за сбоя программы, сбоя операционной системы или сбоя питания компьютера.

Здесь мы повторяем и усиливаем предыдущее предложение для акцентирования: все изменения в одномтранзакции в SQLite происходят полностью или не происходят вообще, даже если процесс записи изменений на диск прерывается

  • сбоем программы,
  • сбоем операционной системы,или
  • сбой питания.

Требование предыдущего пунктаГрафик тщательно проверяется в наборе регрессионных тестов SQLite с использованием специального тестового набора, который имитирует воздействие на файл базы данных сбоев операционной системы и сбоев питания. "

At http://sqlite.org/testing.html

" 1.0Введение

Надежность и надежность SQLite частично достигается тщательным и тщательным тестированием.

Начиная с версии 3.7.14, библиотека SQLite состоит из примерно 81,3 KSLOC кода C.(KSLOC означает тысячи «исходных строк кода» или, другими словами, строк кода, исключая пустые строки и комментарии.) Для сравнения, у проекта в 1124 раза больше тестового кода и тестовых сценариев - 91421,1 KSLOC.

1.1 Краткое содержание

Три независимо разработанных тестовых пакета обеспечивают 100% охват тестов ветвлений в конфигурации после развертывания Миллионы и миллионы тестовых случаев Тесты вне памяти Тесты ошибок ввода-вывода Тесты на сбой и потерю мощности Fuzzтесты Тесты граничных значений Отключенные тесты оптимизации Регрессионные тесты Тесты с искаженной базой данных Широкое использование проверок assert () и времени выполнения Анализ Valgrind Проверка переполнения со знаком целого числа "

3 голосов
/ 30 июня 2010

Попробуйте заглянуть в H2 .Он был создан парнем, который изначально создал HSQLDB, но с нуля, поэтому не использует код HSQLDB.Не уверен, что его стабильность сравнивается с HSQL, так как я давно не использовал HSQL, и в настоящее время я использую H2 только для недолговечных баз данных.Я лично нашел, что H2 легче начать, чем Derby, но, возможно, это потому, что у H2 есть веб-страница шпаргалки.

Возможно, можно перекодировать код, чтобы использовать слой абстракции, а затем запустить тесты для сравнения H2и Дерби с проблемами, которые вы обнаружили.

На стороне управления проектом забора, есть ли у вашей дорожной карты основная версия?Возможно, это было бы подходящим временем для того, чтобы вырвать кишки таким образом, и я бы не сказал, что вы сошли с ума, потому что это потенциально может устранить множество трудностей, связанных с обходом.Если вы хотите внести изменения, которые могут повлиять на работающие системы, без большого количества предупреждений и резервных копий, то вы можете сойти с ума.

2 голосов
/ 17 мая 2017

Я использую Apache Derby с 2009 года во многих своих проектах, некоторые из них с круглосуточной работой и многими миллионами строк.

Никогда не было ни одного случая повреждения данных. Рок твердый и быстрый.

Я продолжаю выбирать его как свою СУБД, если только хорошая причина не всплывает.

1 голос
/ 15 июня 2012

Попробуйте SQLite, если вы ищете что-то автономное (без сервера). Это то, что поддерживает db api андроида, и очень стабильно.

...