Java-планирование против SQL-планирования - PullRequest
0 голосов
/ 15 ноября 2011

Вот мое требование:

дата добавляется в таблицу БД с каждой записью.За две недели до этой частичной даты отдельная запись должна быть занесена в другую таблицу.

Моим первоначальным решением было создание задания по расписанию SQL, но мой клиент настоял на том, чтобы оно обрабатывалось через Java.

  • Каков наилучший подход для этого?
  • Каковы преимущества и недостатки использования задания расписания SQL и планирования Java для этой задачи?

Ответы [ 2 ]

2 голосов
/ 15 ноября 2011

Задайте себе вопрос: к какому домену относится эта работа? Если это требуется для обеспечения целостности данных, то это, очевидно, проблема СУБД, и, вероятно, ее лучше всего там решить. Если это часть бизнес-сферы, а не данные, или может потребоваться информация или обработка, недоступная или естественная для СУБД, вероятно, лучше сделать ее внешней.

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

Но это то, что доступно практически в любой СУБД. Существует вероятность того, что другие базы данных не будут предлагать требуемые вам возможности планирования заданий. Если возможно, что когда-нибудь вы перейдете на другую СУБД, вы все равно будете вынуждены делать это на Java. В этом преимущество подхода Java: вы получаете функциональность независимо от базы данных. Если вы используете чистый JDBC со стандартными запросами SQL, у вас есть полностью переносимое решение.

Оба подхода кажутся действительными. Подумайте, что вызывает наименьшую работу и заботы. Если это сделано в Java, вам нужно убедиться, что процесс запущен или запланирован. Это какая-то внешняя зависимость. Если он находится в базе данных, вы будете уверены, что работа выполнена, пока работает БД.

0 голосов
/ 15 ноября 2011

Ну, во-первых, если вы хотите сделать это на Java, вы можете использовать Таймер для простой базовой повторяющейся работы или Кварц для более сложных вещей.

Лично я также считаю, что было бы лучше, если бы одна и та же сущность (приложение) выполняла все связанные действия с базой данных. Другими словами, если ваше Java-приложение читает / записывает в / из базы данных, оно должно быть согласованным и иметь дело с запланированным чтением / записью. И как плюс, таким образом, вы можете легче синхронизировать свои действия, например, если вы хотите убедиться, что запланированное задание запущено, запущено, завершено, вы можете сделать это намного проще, если все сделано в Java по сравнению с с другим процессом (таким как планировщик SQL), выполняющим это.

...