2010-07-09 2 views
0

Существует два разных процесса, разработанных в Java, работающих независимо, Если какой-либо из процессов изменяет таблицу, могу ли я получить какие-либо намеки? По мере изменения таблицы. Моя цель: я хочу, чтобы объект всегда синхронизировался с таблицей в базе данных, если какая-либо модификация происходит в таблице, я хочу изменить объект. Если таблица изменена, я могу получить какие-либо намеки относительно этого? Предоставляет ли база данных такое средство?Изменен способ узнать таблицу

+0

Что вы подразумеваете под «изменением»? Вы говорите о том, что фактическое определение таблицы изменяется с помощью DDL (alter table) или только данные строки, которые изменяются с помощью DML (insert/update/delete)? –

ответ

1

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

3

Мы используем SQL Server и запускаем определенные триггеры, которые срабатывают при изменении таблицы и вызывают внешний двоичный файл. Двоичный вызов, который мы вызываем, отправляет сообщение с сообщением Tib, чтобы уведомить другие приложения о том, что таблица была обновлена.

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

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

0
  • Вы можете добавить столбец временной метки (last_modified) в таблицы и периодически проверять его на наличие обновлений или порядковых номеров (которые увеличиваются на обновлениях, аналогичных концепции для оптимистической блокировки).
  • Вы можете использовать jboss cache, который предоставляет механизмы обновления.
+0

Вы должны создать отдельную таблицу для отслеживания изменений - столбцы внутри самой таблицы не могут отслеживать, было ли удаление – Joe

0

Один из способов, вы можете сделать это: Просто приложите ваше заявление базы данных в методе, который должен возвращать 'true' когда успешно выполнена. Поддерживайте область действия флага в вашем коде, чтобы всякий раз, когда вы хотите проверить, была ли эта таблица изменена или нет. Почему бы вам не попробовать?

0

Если вы готовы взломать подход, и ваша база данных хранит таблицы в виде файлов (например, mySQL), вы всегда можете найти что-то, что может проверить время модификации файлов на диске и посмотреть, он изменился.

Конечно, базы данных, такие как Oracle, где таблицы назначаются табличным пространствам, а табличные пространства - это хранилище на диске, это не сработает.

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

Смежные вопросы