Ограничить доступ postges от клиентов Java с помощью программы Java на сервере - PullRequest
1 голос
/ 23 октября 2008

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

Я хочу ограничить доступ из настольного Java-приложения к postgres.

Фон:

Предположим, у вас работает 2 приложения, и первое приложение должно выполнить несколько сложных вычислений на основе данных в БД. Чтобы закрепить неизменность данных в базе данных, я бы хотел заблокировать базу данных для операций вставки, обновления и удаления. На стороне клиента я думаю, что с этим поведением нельзя справиться удовлетворительно. Поэтому я подумал об использовании небольшого Java-приложения на стороне сервера, которое работает как прокси. Поэтому задача состоит в том, чтобы передать операции CRUD (Create Read Update Delete), пока не получит команду на блокировку. После блокировки он отклоняет все операции CUD, пока не получит команду разблокировки от клиента блокировки или не истечет тайм-аут.

Вопросы:

Что вы думаете об этом подходе?

Можно ли заблокировать базу данных при использовании такого подхода?

Вы бы предпочли Java SE или Java EE в качестве серверного Java-приложения?

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

Ответы [ 3 ]

3 голосов
/ 23 октября 2008

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

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

1 голос
/ 23 октября 2008

Действительно ... есть несколько правильных способов решить эту проблему.

  1. Просто заблокируйте таблицы в своем коде. В Postgresql есть команды для блокировки целых таблиц, которые вы можете запустить из своего клиентского приложения
  2. Выберите уровень изоляции транзакции, у которого нет проблемы чтения данных, которые были зафиксированы после того, как ваш txn запустился (BEGIN TRANSACTION ISOLATION LEVEL REPEATABLE READ).

Из них, безусловно, наиболее эффективным является использование повторяемого чтения в качестве уровня изоляции. Postgres поддерживает это довольно эффективно и дает вам согласованное представление данных без такой сильной блокировки базы данных.

0 голосов
/ 24 октября 2008

Год, когда я думал о транзакциях, но в этом случае я не могу их использовать. Извините, я не упомянул это точно. Итак, предположим следующий простой случай: Расчет закрывает одну область ответственности. После calc открывается новый и ему назначаются новые вкладки. Но во время процесса расчета вставка, обновление или удаление данных не допускаются к данным (в настоящее время рассчитывается) области ответственности. Более того, удаление строго запрещено, поскольку данные должны быть заархивированы.

Итак, использование транзакций не соответствует этому требованию. Или я что-то пропустил?

ps: (не по теме) @jsight: я сейчас читаю, что намеренно отправляет mapps «повторяемое чтение» в «сериализуемое», поэтому использование «повторяемого чтения» дает вам больше ограничений, чем вы, возможно, ожидаете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...