Каковы подводные камни встроенного подключения к Derby по сети?

У нас есть настольное приложение Java, которое обращается к базе данных Derby, расположенной на сетевом общем диске, а не локально.

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

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

Мы понимаем, что в документах Derby говорится, что встроенные базы данных должны использоваться только для локального сохранения, но может ли кто-нибудь предложить какие-то конкретные ловушки, с которыми мы можем столкнуться при такой конфигурации?

Заранее спасибо!

Джим


person Marcos Vandel    schedule 08.02.2011    source источник
comment
похоже, вы уже столкнулись с большой ловушкой - повреждением базы данных.   -  person matt b    schedule 08.02.2011


Ответы (2)


В частности, что касается повреждения базы данных, я считаю, что есть (по крайней мере) две фундаментальные проблемы с размещением базы данных в общем сетевом хранилище: (1) когда Derby пытается выделить пространство путем увеличения файла, файловая система может сообщить о выделении как об успешном хотя на самом деле диск заполнен; (2) когда Derby пытается гарантировать, что запись на диск действительно полностью записывается на диск, файловая система может сообщить, что данные записываются на диск, хотя на самом деле они по-прежнему записываются только в память.

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

person Bryan Pendleton    schedule 08.02.2011
comment
(2) ‹- это. большинство сетевых файловых систем подделывают вызовы fsync. и большинству файловых баз данных требуется fsync для обеспечения целостности данных. - person jtahlborn; 08.02.2011

Мы понимаем, что в документах Derby говорится, что встроенные базы данных должны использоваться только для локального сохранения, но может ли кто-нибудь предложить какие-то конкретные ловушки, с которыми мы можем столкнуться при такой конфигурации?

Я бы сказал, что вы должны обратить внимание на то, что говорит документация. Люди, разработавшие Derby, вряд ли будут давать советы, которые ограничивают применимость Derby без уважительной причины.

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

Кроме того, почему бы вам не использовать метод Сетевой сервер версии Derby?

person Stephen C    schedule 08.02.2011
comment
@Marcos Vandel - похоже, бизнес-требования изменились ... если люди теперь пытаются обмениваться встроенными базами данных. Вам либо нужно сказать им прекратить это делать, либо вам нужно переключить свой продукт на использование клиент-серверной версии Derby. - person Stephen C; 08.02.2011
comment
Технически ничто не мешает нам использовать клиент-серверную версию Derby. Наша текущая конфигурация была создана для удовлетворения бизнес-требований отрасли, на которую нацелено наше программное обеспечение, и среды, в которой оно работает. - person Marcos Vandel; 08.02.2011
comment
Стивен, возможно, вам следует прочитать исходный пост немного внимательнее. Я спрашиваю не о том, считают ли люди эту конфигурацию хорошей идеей, а о том, какие конкретные проблемы мы можем ожидать при таком использовании Derby. И нет, бизнес-требования наверняка не изменились. - person Marcos Vandel; 08.02.2011
comment
@Marcos Vandel - возможно, вам не следует предполагать, что я не прочитал и не понял ваш первоначальный вопрос. Кроме того, на него уже был дан ответ. Я подумал, что вы, возможно, захотите решить свои проблемы, но, видимо, нет. - person Stephen C; 09.02.2011