powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Определение изменившихся записей со времени последнего запроса данных
8 сообщений из 8, страница 1 из 1
Определение изменившихся записей со времени последнего запроса данных
    #36501363
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, хочу спросить: какие варианты реализации кто предложит, может сами что применяете...

Абстрагируемся от средств разработки и конкретных СУБД.

Задача тривиальная.
Разрабатываемое приложение должно:
- с заданной периодичностью подключаться к БД
- запрашивать данные по определенному sql-запросу
- выполнять некоторые "танцы с бубном" по полученным данными
- отключаться

"танцы с бубном" - не конкретизируем, ну к примеру поле А + поле Б - результат сохранить в файл на диск.
Процесс требует оптимизации, то есть первая итерация обрабатывает все записи, последующие итерации - только те записи, которые изменились с предыдущей итерации.

Самое интересное:
Базу данных трогать нельзя!
Т.е. нельзя добавлять служебные поля ("обработано/не обработано"), нет гарантии, что в выборке будет некое поле "дата изменений" и пр.

Есть только следующие изветсные параметры:
- текст sql-запроса
- перечень ключевых полей, однозначно определяющих запись.

Вопрос - какие варианты?

Придется каким-то образом на клиенте кэшировать полученные данные, при следующем получении данных сравнивать и для изменившихся вызывать "танцы с бубном"...
Как именно это лучше делать?



---------
Когда все способы испробованы, а результата все нет, - прочтите наконец инструкцию!
...
Рейтинг: 0 / 0
Определение изменившихся записей со времени последнего запроса данных
    #36501466
shorewall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MustDie,

В любом случае придется определять из пришедших данных те что уже были обработаны. А значит по любому будет цикл по данным запроса. Единственное что можно оптимизировать это способ хранения уже обработанных данных. Собственно способов ровно два: бинарное дерево или хэш-таблица. Хранение уже обработанных данных в простом отсортированном виде в динамическом массиве не подойдет потому-что добавление туда данных будет дорогим.
...
Рейтинг: 0 / 0
Определение изменившихся записей со времени последнего запроса данных
    #36501468
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MustDie,

а)Если можно, добавить в БД отдельную таблицу 1:1 (ключ, обработано)
б)Хранить у себя список обработанных

Задача похожа на Веб-апп.
...
Рейтинг: 0 / 0
Определение изменившихся записей со времени последнего запроса данных
    #36501697
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
а)Если можно, добавить в БД отдельную таблицу 1:1 (ключ, обработано)

Нельзя.

Siemargl
б)Хранить у себя список обработанных

Это даже не обсуждается. Хранить придется по-любому. Но не только список обработанных, а все полученные данные, так как уже обработанные могут снова измениться в БД и их надо будет еще раз обрабатывать.
...
Рейтинг: 0 / 0
Определение изменившихся записей со времени последнего запроса данных
    #36501720
Фотография MustDie
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
shorewall
Собственно способов ровно два: бинарное дерево или хэш-таблица.

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

А каким образом для данной проблемы применимы бин.деревья?

shorewall
Хранение уже обработанных данных в простом отсортированном виде в динамическом массиве не подойдет потому-что добавление туда данных будет дорогим.

Думаю использовать табличку на клиенте, может MemoryTable... Хранить все-равно придется соответсвия ключ/хэш-значение.
...
Рейтинг: 0 / 0
Определение изменившихся записей со времени последнего запроса данных
    #36501799
shorewall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MustDie,

Насчет хэш-таблицы я слегка борщанул - надо использовать хэш набор(HasSet). Т.к. надо лишь опредилить был ли элемент обработан или нет, поэтому весь элемент сохранять не нужно, достаточно работать только с ключевыми полями.

Собственно поскольку набор полей состовляющих клющ можно сравнивать друг с друго то их можно использовать при построении дерева.

Дерево хороше тем что операция добавления элемента очень дешева. В хэш-наборе при его заполнении придется его переодически пересобирать(только если этот HashSet не построен поверх дерева), а поскольку в твоем случае количество обработанных данных будет непрерывно расти то и HashSet придется переодически пересобирать.
...
Рейтинг: 0 / 0
Определение изменившихся записей со времени последнего запроса данных
    #36501822
Фотография Пилотажный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MustDie,
а вот на ветках sql.ru по конкретным СУБД много раз обсуждалось, например,
по MSSQLSERVER
Журналирование изменений (названия разные)

Там и ссылки на теоретические статьи по вопросу.
...
Рейтинг: 0 / 0
Определение изменившихся записей со времени последнего запроса данных
    #36503414
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если нет возможности читать время изменения записей в таблице и нельзя читать транзакционный лог, то ответ остается один-единственный:
MustDieПридется каким-то образом на клиенте кэшировать полученные данные, при следующем получении данных сравнивать и для изменившихся вызывать "танцы с бубном"...
Ставь на машину которая будет заниматься репликацией вторую базу данных, при каждом сеансе репликации она будет вытягивать к себе оригинальную базу целиком, сравнивать ее с сохранненой копией, разницу отправлять в базы-получатели.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Определение изменившихся записей со времени последнего запроса данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]