Подтвердить что ты не робот

Я сумасшедший? Переключение установленного продукта из HSQLDB в Apache Derby

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

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

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

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

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

Ответ 3

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

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

См. также

Ответ 4

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

Ответ 5

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

Я не хочу ничего брать с HSQLDB. Это означало служить альтернативой MySQL не для fopen(), поскольку SQLite предназначен. Можно сказать, что объем HSQLDB (на самом деле Java RDBMS) гораздо более амбициозен. Фредт и его группа достигли выдающегося достижения с HSQLDB. Несмотря на это, поиск в Google "Является ли HSQLDB ACID совместимым" не оставляет ощущение уверенности в том, что он чувствует себя так уверенно, как чувствует себя после прочтения прогонов тестирования на веб-сайте SQLite.

В http://sqlite.org/transactional.html

"SQLite - это транзакция

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

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

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

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

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

"1.0 Введение

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

Начиная с версии 3.7.14, библиотека SQLite состоит из приблизительно 81.3 KSLOC кода C. (KSLOC означает тысячи "Source Lines Of Code" или, другими словами, строки кода, исключая пустые строки и комментарии.) Для сравнения, проект имеет в 1124 раза больше тестового кода и тестовых скриптов - 91421.1 KSLOC.

1.1. Резюме.

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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

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

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

Ответ 9

Итак, какой из них более стабилен? MySQL, например, не имеет таких проблем, я боюсь выбрать любой из них, но я должен. Derby дает больше доверия, поскольку Sun выбрал его для JDK.