Непрерывно выбирайте данные из базы данных с помощью Java

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

Если таблица имеет 10 строк первоначально, и 2 строки добавляются пользователем, она должна обнаружить это и возвратить строки.

Моя программа не должна использовать Ajax и таймеры.

7
задан Martin 26 May 2010 в 11:14
поделиться

6 ответов

без Ajax и таймеров, похоже, не справиться с этой задачей.

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

Для этого вы можете использовать Server push AKA "Comet" программирование.

В коменте

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

Также для отслеживания изменений в БД можно использовать две вещи,

  1. некий триггер/таймер (посмотрите Quartz Scheduler)
  2. механизм на основе событий, который подталкивает данные в канал по определенным событиям.

В принципе, клиент не может знать, что происходит на стороне сервера, поэтому вы должны передать некоторые данные или событие, чтобы сообщить клиенту, что, у меня есть новые данные, пожалуйста, вызовите некоторый метод. Это своего рода уведомление. Поэтому, пожалуйста, проверьте в comet/server push с уведомлением о событии.

надеюсь, это поможет.

спасибо.

2
ответ дан 7 December 2019 в 12:15
поделиться

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

Если у вас БД с высоким трафиком, я бы не рекомендовал этого, потому что опрос создает много дополнительного трафика.

0
ответ дан 7 December 2019 в 12:15
поделиться

Если вы используете базу данных Oracle, рассмотрите возможность использования триггеров, которые вызывают java хранимую процедуру, которая уведомляет вашего клиента об изменениях в базе данных (используя JMS, RMI или то, что вы хотите).

3
ответ дан 7 December 2019 в 12:15
поделиться

Не самая простая задача, на самом деле.

Давайте разделим ее на 2 небольшие проблемы:

1) как включить перезагрузку без таймеров и ajax

2) как реализовать на стороне сервера

  1. Нет способа уведомлять клиентов с сервера. Поэтому для создания толстого клиента нужно использовать flash или silverlight или JavaFX или Applets. Если проблема с Ajax в том, что вы не знаете, как его использовать для решения этой задачи, то вы можете изучить некоторые готовые библиотеки jsp тегов или jsf компонентов с поддержкой ajax.

  2. Если у вас только 1 сервер, то просто добавьте кэш. Если у вас несколько серверов, то рассмотрите возможность использования распределенного кэша.

0
ответ дан 7 December 2019 в 12:15
поделиться

сервер, уведомляющий клиента, не является хорошей идеей (рассмотрим сценарий с 1000 клиентами). Используете ли вы какой-то уровень сохраняемости или вам нужно придерживаться чистого JDBC?

0
ответ дан 7 December 2019 в 12:15
поделиться

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

0
ответ дан 7 December 2019 в 12:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: