powered by simpleCommunicator - 2.0.30     © 2024 Programmizd 02
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Мониторинг изменений в базах данных
153 сообщений из 153, показаны все 7 страниц
Мониторинг изменений в базах данных
    #39919656
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, здравствуйте!
Нужен ваш совет.

Алгоритм определения изменений схемы данных.
Введение:
В крупной системе, реализующей минросервисную архитектуру часто возникает необходимость синхронизации горячих данных между различными компонентами (исполняемыми модулями). Как правило единой точкой правды для всех компонентов является СУБД, а именно какая либо схема или набор объектов СУБД. Но частые обращения к этим объектам, в особенности запросы содержащие агрегатные или аналитические функции, негативно влияют на производительность СУБД в целом. Поэтому для разных ситуаций разрабатывают различные тактики определения разности состояний тех или иных объектов СУБД для синхронизации с приложением.
Что нужно сделать:
Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора.
Вариации:
  • Вычисление изменение всей схемы целиком.
  • Вычисление изменений заданных объектов (таблиц, колонок).
  • Вычисление, реализованное только на JAVA без использования системных объектов СУБД.
  • (повышенной сложности) Вычисление, реализованное только на SQL на СУБД Postgres.
  • Вычисление допускает введение дополнительных сущностей в схему данных, либо рекомендации к проектированию схемы.
Критерии оценки:
Код должен быть покрыт нагрузочными тестами, приведены оценки планов запроса.

Написано относительно сложно, суть, как я понимаю, необходимо написать на java какую-нибудь простую реализацию: класс, который будет отслеживать изменения данных.

Я гуглил-гуглил и так и этак. Кто-то предлагает на основе анализа журнала транзакций, использовать механизм триггеров. Вроде бы в MS Sql Server и в postgresql есть какие-то встроенные инструменты для этого, кто то предлагал делать это посредством контрольных сумм, в то же время чего-то простого доступного мне найти не удалось. Может быть есть возможность подсказать?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919659
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,

Что будет считаться изменением в СУБД, изменение одного значения
в одной из сотен миллионов записей в одной из нескольких тысяч таблиц
будет считаться изменением?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919665
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а что есть изменения? схемы или данных которые туда льют?

если первое то хз но наверное что то есть если второе - у некоторых бд есть стриминг интерфейс - куда шлются все изменения в реальном или околореальном времени. всё что надо - это просто захендлить этот стрим.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919666
andreykaT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну или топорный вариант - написать свой ждбс драйвер, или ой вэй у нас же ооп - отнаследоваться от реального ждбс драйвера и перекрыть те методы что пишут, чтоб они сами стримили данные куда надо когда их просят что-то записать. мне кажется, что речь об этом.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919676
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR

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


Давайте сделаем микросевисы, а потом поверх них обернем монолит) Сложно комментировать и что-то подсказывать при такой каше в голове, эт не упрек, а скорее камень в сторону модных трендов. Какая нафиг единая точка правды в микросервисной архитектуре(Которая и делается для того чтобы разбить монолит на непересекающиеся участки)?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919680
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Алгоритм определения изменений схемы данных.

Поиск на ключевое слово Репликация.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919681
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник,
+1
))) единая точка правды))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919683
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Что с вашей прошлой темой?
Она одинакова с данной.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919687
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Введение

GrossmasteR
Что нужно сделать:

Вы забыли самое главное.
Вставить между ними абзац
Проблема:
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919693
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Поиск на ключевое слово Репликация.

Куда?

Скорее автор топика хочет инвалидацию данных прочитанных из БД микросервисами,
чтобы их перечитывать только в случае, если они изменились.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919706
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
PetroNotC Sharp
Поиск на ключевое слово Репликация.

Куда?

Скорее автор топика хочет инвалидацию данных прочитанных из БД микросервисами,
чтобы их перечитывать только в случае, если они изменились.

Предполагаю чего хочет автор даже он сам не знает
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919725
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник
iOracleDev
пропущено...

Куда?

Скорее автор топика хочет инвалидацию данных прочитанных из БД микросервисами,
чтобы их перечитывать только в случае, если они изменились.

Предполагаю чего хочет автор даже он сам не знает

Автор хочет устроиться на работу.

Любопытно, где ему выдали такое тестовое задание.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919727
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
Скорее автор топика хочет инвалидацию данных прочитанных из БД микросервисами,
чтобы их перечитывать только в случае, если они изменились

Нет, написано же, что изменение схемы данных: всей целиком, или конкретной таблицы, колонки.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919730
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Как правило единой точкой правды для всех компонентов является СУБД

Это провал, надо пилить монолит взад.
На распределённых системах консистентность в конечном счете.
Если это ТЗ, то они или нихрена не понимают или это ТЗ типа принеси ведро с жидкой трансмиссией.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919734
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Написано относительно сложно, суть, как я понимаю, необходимо написать на java какую-нибудь простую реализацию: класс, который будет отслеживать изменения данных.

Не данных, а схемы данных.
Типа что где-то в схему добавили поле (колонку), переименовали, изменили тип, разнесли по таблицам...
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919738
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
Это провал, надо пилить монолит взад.

Почему сразу монолит? Написано про какие-то исполняемые модули.
Типа есть БД у какого-то сервиса, а ещё есть кэши, поисковые индексы, очереди там всякие.
И тут бац, в схеме БД что-то меняется, и в остальных местах надо синхронизировать.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919742
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
PetroNotC Sharp
Поиск на ключевое слово Репликация.

Куда?

Скорее автор топика хочет инвалидацию данных прочитанных из БД микросервисами,
чтобы их перечитывать только в случае, если они изменились.
согласись, что инвалидацию слово надо заменить на более понятное и русское.
Есть данные в БД, и надо убедится что.... они правильные?
Он уже прошлый топик так же решил, и результат был никому не нужен.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919747
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
В крупной системе, реализующей минросервисную архитектуру
седьмой топик про баззворд микросервисы
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919749
Фотография crutchmaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
И тут бац, в схеме БД что-то меняется, и в остальных местах надо синхронизировать.

Почему в остальных местах должна кого-то волновать чья-то схема в БД? Вот, например, на форуме поменяется схема БД, кого это должно озаботить? И там также.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919754
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
skyANA
И тут бац, в схеме БД что-то меняется, и в остальных местах надо синхронизировать.

Почему в остальных местах должна кого-то волновать чья-то схема в БД? Вот, например, на форуме поменяется схема БД, кого это должно озаботить? И там также.
skyANA просто оптимист по жизни)
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919758
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp ,
получилась так, что прошлая тема превратилась в тему про кэш и это правильно, как по мне. Надо было с самого начала разделить эти вопросы.

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

Как я нагуглился, несмотря на удобные современные функции, интерфейсы для работы с БД, могут быть ситуации (вмешательство админа БД, взлом SQL-injection, прямые изменения в БД что еще). Получается, что одного журнала событий прикладной системы недостаточно — необходим аудит изменения данных на уровне базы, который будет дополнительным инструментом для обеспечения безопасности и исключения ошибок при эксплуатации системы. Основным критерием для выбора механизма, обеспечивающего мониторинг, является минимальное влияние внедряемого решения на производительность системы.

Я так понимаю, выдавшие задание предлагают "порассуждать" (реализовать несложный алгоритм) на эту тему. Вопрос, как это сделать
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919760
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
То есть вы сами выдумываете задачи.
Раздела ПРОБЛЕМА нет. И вы его боитесь.

GrossmasteR
Как я нагуглился, несмотря на удобные современные функции, интерфейсы для работы с БД, могут быть ситуации (вмешательство админа БД, взлом SQL-injection, прямые изменения в БД что еще). Получается, что одного журнала событий прикладной системы недостаточно — необходим аудит изменения данных на уровне базы, который будет дополнительным инструментом для обеспечения безопасности и исключения ошибок при эксплуатации системы. Основным критерием для выбора механизма, обеспечивающего мониторинг, является минимальное влияние внедряемого решения на производительность системы.

Вот это бред выше.
ДОКАЖИТЕ что НЕДОСТАТОЧНО.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919761
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
журнала событий прикладной системы
журналы СУБД а не прикладной системы.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919762
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Ну и старайтесь сопровождать топик. Почаще отвечайте мемберам.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919765
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Автор хочет устроиться на работу".
на какую должность?
Так как если на архитектора, то недостатки одни. Если на прогера то другие)
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919769
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

на джуна. задачу по кэшу из прошлого топика и эту по БД, мне дали как ТЗ на джуна
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919773
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смотрите, а вот это не то, что мне нужно?
https://jdbc.postgresql.org/documentation/91/listennotify.html
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919775
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
PetroNotC Sharp,

на джуна. задачу по кэшу из прошлого топика и эту по БД, мне дали как ТЗ на джуна
для джуна кода в топике должно быть 90%
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919778
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Как думаете, почему прошлый топик не смогли протестировать?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919779
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Смотрите, а вот это не то, что мне нужно?
https://jdbc.postgresql.org/documentation/91/listennotify.html
вам выше профи сказали - НЕОНЯТНА ЧТО ТРЕБУЕТСЯ
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919793
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
crutchmaster
skyANA
И тут бац, в схеме БД что-то меняется, и в остальных местах надо синхронизировать.

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

Потому что это тестовое задание.
Прикладной смысл его нулевой, практический - тупо проверить соискателя.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919795
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
Потому что это тестовое задание.
Прикладной смысл его нулевой, практический - тупо проверить соискателя.
для этого джуну нужно впарить микросервисы и поговорить о смысле жизни в ТЗ.
Угу.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919796
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Как я нагуглился, несмотря на удобные современные функции, интерфейсы для работы с БД, могут быть ситуации (вмешательство админа БД, взлом SQL-injection, прямые изменения в БД что еще). Получается, что одного журнала событий прикладной системы недостаточно — необходим аудит изменения данных на уровне базы, который будет дополнительным инструментом для обеспечения безопасности и исключения ошибок при эксплуатации системы. Основным критерием для выбора механизма, обеспечивающего мониторинг, является минимальное влияние внедряемого решения на производительность системы.

Я так понимаю, выдавшие задание предлагают "порассуждать" (реализовать несложный алгоритм) на эту тему. Вопрос, как это сделать
А как это должно выглядеть?
Вот запустил я его и в каком виде должен получить результат его работы?

Хорошо бы вы сначала не постеснялись и выяснили все вопросы у тех, кто вам задание выдал.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919799
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Смотрите, а вот это не то, что мне нужно?
https://jdbc.postgresql.org/documentation/91/listennotify.html

Проясните, в каком виде должны быть представлены результаты этого вашего мониторинга изменений в базах данных.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919808
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,

напомните, вы случаем не в DevArt устраиваетесь?

https://www.devart.com/dbforge/postgresql/datacompare/
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919810
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А нет, у них C# :)
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919826
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA,
устраиваюсь в один из банков

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

Мне сложно рассуждать на эту тему, потому что я не знаю в каком виде это бывает в реальности. Могу предположить, что при INSERT или UPDATE метод должен возвращать true. В задании же указано: "Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора."
Может при каждом INSERT или UPDATE надо передавать что-то еще, чтобы потом понять "с какого-либо времени или идентификатора" какие то триггеры. А может быть было бы не плохо, если бы метод возвращал не просто true false, а конкретные изменения
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919830
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если надо сделать универсальный механизм:
1) если на уровне СУБД, то смотри триггеры
2) если на уровне приложения - АОП
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919831
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Могу предположить, что при INSERT или UPDATE метод должен возвращать true
может с псевдокода начать?
private boolean getЛюбыеИзменения()
Так?
Параметры будут?
...
2. Вы промолчали про репликацию, ddl, dml.
Термины знакомы?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919833
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
Если надо сделать универсальный механизм:
1) если на уровне СУБД, то смотри триггеры
2) если на уровне приложения - АОП

Для джуна что именно смотреть должно быть в ТЗ.
Согласись.
И почему постгри в банке?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919834
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Мне сложно рассуждать на эту тему, потому что я не знаю в каком виде это бывает в реальности.
ищите работодателя с нормальным ТЗ для джуна.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919835
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Итого, соискатель джун.
Вы не начнете писать код, пока не будет вменяемой постановки.
И как потом тестировать результат (юз кейс).
И гугление не поможет.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919836
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
устраиваюсь в один из банков

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

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

Так уточните у банка, в чем проблема?
Вам дали задание, задайте по нему вопросы, не стесняйтесь.
Куда выводить результаты: в консоль, в файл, в голову проверяющему?
И в каком виде.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919837
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan
АОП
лучше на акторах)))))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919840
SpringMan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp

Для джуна что именно смотреть должно быть в ТЗ.
Согласись.
И почему потгри в банке?

В банках мне кажется есть все базы) Это ТЗ больше похоже на "Сделай самое умное, что сможешь". В ТЗ только одна проблема - непонятно, кого им надо: или самого_умного или напишу_любой_код_главное_чтобы_работало. Да и к ТЗ тестовым заданиям ИМХО надо проще относиться: главное показать какие умные слова ты знаешь и что можешь писать нормальный код
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919844
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SpringMan,
Согласен. Только тут вообще ничего нет и даже зацепиться не за что без консультаций с ними.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919850
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Критерии оценки:
Код должен быть покрыт нагрузочными тестами, приведены оценки планов запроса.
функционал и работоспособность кода Не оценивается вообще))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919875
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
"...репликацию, ddl, dml..."
Термины не знакомы. Насколько я понимаю триггеры как раз таки относятся к dml.

Получается я могу сделать так
CREATE TRIGGER IF NOT EXISTS "" AFTER INSERT ON "" BEGIN INSERT INTO (new_...
как-то так.

То есть у меня появляется вторая таблица с изменениями
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919884
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Термины не знакомы
ужас.
Может прервемся на пару дней?
Это базовые знания.
....
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919889
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
CREATE TRIGGER
в посгри уже есть такие триггеры.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919895
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
PetroNotC Sharp,
"...репликацию, ddl, dml..."
Термины не знакомы. Насколько я понимаю триггеры как раз таки относятся к dml.

Получается я могу сделать так
CREATE TRIGGER IF NOT EXISTS "" AFTER INSERT ON "" BEGIN INSERT INTO (new_...
как-то так.

То есть у меня появляется вторая таблица с изменениями

В Постгресе есть так называемые триггеры событий.

В отличие от обычных триггеров, которые подключаются к конкретной таблице и работают только с командами DML, триггеры событий определяются на уровне базы данных и работают с командами DDL.

https://postgrespro.ru/docs/postgrespro/12/event-triggers
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919896
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
нет времени. вчера было собеседование. на большинство вопросов по java core я ответил и как по мне, все прошло неплохо. Не знаю, конечно, какое мнение у той стороны, ответ будет недели через 1.5 и они будут учитывать задание. первую задачу с кэшем я уже отправил. может быть успею что-то состряпать по второй, чтобы было хоть что-то. думаю, это может сыграть роль. маленький плюсик. если кто-то вообще ничего не сделает, а у меня хоть какие-то наработки будут

сделаю так, создам две таблицы. основную и с изменениями. никак постгре, возьму sqlite инмемори да и все. это же просто сферический конь в вакууме. jdbctemplate "самодельный".
и пропишу триггеры для основных операций изменений таблицы.
ну и как-то надо завернуть это все в метод, получения изменений.
думаю как-то так
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919899
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
сделаю так, создам две таблицы. основную и с изменениями. никак постгре, возьму sqlite инмемори да и все. это же просто сферический конь в вакууме. jdbctemplate "самодельный".
и пропишу триггеры для основных операций изменений таблицы.
ну и как-то надо завернуть это все в метод, получения изменений.
думаю как-то так
еще раз подробнее.
Вместо постгри другую бд?
Изменения только одной таблы?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919905
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
это может сыграть роль. маленький плюсик. если кто-то вообще ничего не сделает, а у меня хоть какие-то наработки будут

Уточнить задание тоже может быть плюсом.

Кому на работе нужен джун, который что-то там делает, а потом приносит фигню какую-то на SQLite, когда у нас Postgres? :)
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919906
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
еще раз подробнее.
Вместо постгри другую бд?
Изменения только одной таблы?


Да. опять же нет времени разбираться прямо сейчас с постгри, я ней никогда не работал. возьму sQLITE
Для эксперимента создам простейшую таблицу. house adress price metro что то типа того и пропишу простейшие методы. insert update delete.

затем создам второй сервис TriggerService или что то типа того, где будут прописаны триггеры для каждой операции и попробую в какую -нибудь коллекцию получить изменения таблицы при выполнении операций с ней. Формально ТЗ будет выполнено? "Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора". Вот только как быть со временем или идентификатором?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919907
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Формально ТЗ будет выполнено?

Нет, не будет.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919908
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA, я вижу ваши советы на счет уточнения. Я понимаю. Большое спасибо за них.
Просто дело в том, что задание выдали аж перед новым годом и я несколько подзабил на них, потому что со всех сторон слышал, что это слишком сложные задания на джуна, а тут на собеседовании спросили, мол, прислал ли хотя бы одну из двух. и я решил активизироваться. А сейчас уже как-то даже неудобно спрашивать спустя месяц. Поэтому попробую сделать какую-то простую реализацию. Учебную, так сказать
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919910
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Вот только как быть со временем или идентификатором?

Если делать на DDL триггерах, то в момент его срабатывания пишите куда-то время этого самого срабатывания.
А потом мониторинг должен показывать, что за последние 30 минут ничего не происходило.
А за неделю произошло вот это.

Вот только в SQLite нет DDL триггеров.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919912
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
skyANA, я вижу ваши советы на счет уточнения. Я понимаю. Большое спасибо за них.
Просто дело в том, что задание выдали аж перед новым годом и я несколько подзабил на них... А сейчас уже как-то даже неудобно спрашивать спустя месяц.

Смотря ведь как спрашивать.
Можно спросить так, что показать свою заинтересованность работать именно у них и адекватность в подходе к решению задачи.

А то ведь может получиться так, что спустя месяц прислал фигню какую-то, разве не мог за это время спросить, что надо?
На фиг нам такой не нужен.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919916
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Для эксперимента создам простейшую таблицу. house adress price metro что то типа того и пропишу простейшие методы. insert update delete.

затем создам второй сервис TriggerService или что то типа того, где будут прописаны триггеры для каждой операции и попробую в какую -нибудь коллекцию получить изменения таблицы при выполнении операций с ней. Формально ТЗ будет выполнено?
это ТЗ для джуна. В начале треда не для джуна ТЗ. Сами решайте.
1. Один триггер для всех операций
2. Он пишет в таблу время, тип_операции_буква, прошлое значени_строка.
3. Коллекция не нужна. Просто вывод раз в 5 сек этой таблы в файл/лог
Всё
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919917
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Насчет двух сервисов.
- решить данное ТЗ одним сервисом по REST без спринга с Java EE JAX-RS.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919926
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а что если я в таблицу с "изменениями" в строку внесу дополнительную ячейку datetime и потом при запросе метода Collection getИзмененияБД (date) буду получать выборку по времени?
А, ну вот как PetroNotC Sharp и говорил, время добавить
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919932
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
GrossmasteR
Для эксперимента создам простейшую таблицу. house adress price metro что то типа того и пропишу простейшие методы. insert update delete.

затем создам второй сервис TriggerService или что то типа того, где будут прописаны триггеры для каждой операции и попробую в какую -нибудь коллекцию получить изменения таблицы при выполнении операций с ней. Формально ТЗ будет выполнено?
это ТЗ для джуна. В начале треда не для джуна ТЗ. Сами решайте.
1. Один триггер для всех операций
2. Он пишет в таблу время, тип_операции_буква, прошлое значени_строка.
3. Коллекция не нужна. Просто вывод раз в 5 сек этой таблы в файл/лог
Всё


А как один? мне же все равно нужны разные запросы на разные типы операций
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TRIGGER IF NOT EXISTS after_insert AFTER INSERT ON house " +
                    "BEGIN" +
                    " INSERT INTO house2 (new_adress, new_metro, new_price, new_address, date, operation)" +
                    "    VALUES (NEW.adress, NEW.metro, NEW.price, NEW.address, datetime('now'), 'insert');" +
                    "END;"
"CREATE TRIGGER IF NOT EXISTS after_update AFTER UPDATE ON house " +
                    "BEGIN" +
                    "    INSERT INTO house2(new_adress, new_metro, new_price, new_address, date, operation)" +
                    "    VALUES (OLD.adress, OLD.metro, OLD.price, OLD.address, datetime('now'), 'update');" + "END;"
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919941
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
устраиваюсь в один из банков

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

Мне сложно рассуждать на эту тему, потому что я не знаю в каком виде это бывает в реальности. Могу предположить, что при INSERT или UPDATE метод должен возвращать true. В задании же указано: "Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора."
Может при каждом INSERT или UPDATE надо передавать что-то еще, чтобы потом понять "с какого-либо времени или идентификатора" какие то триггеры. А может быть было бы не плохо, если бы метод возвращал не просто true false, а конкретные изменения

Есть классические методы основанные на блокировке for update, а также стратегии когда это делать,
можно блокировать сразу при чтении, можно делать попытку блокирования при изменении клиентом
данных прочитанных в клиентский интерфейс, можно делать попытку блокирования при сохранении
клиентом измененных данных. Можешь погуглить про пессимистические и оптимистические блокировки.
Смысл в том, что если запись в БД была изменена, изменять ее уже неправильно, в такой ситуации
необходимо выдать сообщение, что данные были изменены и перечитать их.

Но у тебя речь идет похоже именно о инвалидации "кеша", т.е. твой микросервис считал некий объем данных из БД
которые ты обзываешь горячими, необходимо понимать изменились ли эти данные в БД и соответствует ли
закешированное в сервисе состояние состоянию БД. Так вот делать это можно только для конкретного частного случая,
в общем случае задача нерешаема, собственно поэтому тебе ничего нагуглить и не удалось.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919943
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
А как один? мне же все равно нужны разные запросы на разные типы операций
в триггере есть флаг какая именно операция
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919946
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
getИзмененияБД (date)
да
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919948
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
в общем случае задача нерешаема,
нерешаема. Поэтому он плюнул на начальное ТЗ и написал свой "цветочный магазин").
У него руки чешутся пописать).
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919951
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp,

Есть некий сложный запрос (в тз фигурируют аналитические функции и явно написано, что запросы тяжелые),
сервис загрузил выборку к себе, каким образом понять, что какое то поле из какой то записи этой выборки
было изменено?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919956
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
By the way,

В Oracle такая функциональность есть. Включая кэширование результатов запросов и их обновление при изменении данных, на стороне сервере и стороне клиента (OCI).

Насколько хорошо работает и как это использовать в мирных целях - не знаю. Не использовал.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39919973
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
PetroNotC Sharp,

Есть некий сложный запрос (в тз фигурируют аналитические функции и явно написано, что запросы тяжелые),
сервис загрузил выборку к себе, каким образом понять, что какое то поле из какой то записи этой выборки
было изменено?
забудь то ТЗ. Там странные люди его писали.
В веб проектах есть кеш хибера, эксплорера, субд.
Этого достаточно. И кешируется каждый раз свои объекты. База запросы, эксплорер страничку, хибер сущност и сессию хибера.
Разговаривать про #абстрактныйкешнепонятночего глупость.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920148
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920157
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин Марк,
Дык для всех бд есть готовое - репликация.
Не осилит.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920168
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Вариации:
  • (повышенной сложности) Вычисление, реализованное только на SQL на СУБД Postgres.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920172
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
Локшин Марк,
Дык для всех бд есть готовое - репликация.
Не осилит.

И то, что есть в PostgreSQL нет для большинства БД в которых есть штатная репликация. Вы не название ссылки прочитайте, а то, что там внутри. Там на Java писать пару десятков строк кода.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920174
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
Локшин Марк,
Дык для всех бд есть готовое - репликация.
Не осилит.

Получается во всех система управления базами данных (как минимум, распространенных) такие механизмы уже встроены, да?

из ТЗ: "часто возникает необходимость синхронизации горячих данных.." ну то есть необходимость репликации, так?

в тоже время мне не предлагаю написать "свою репликацию", да? а скорее алгоритм, который определит, есть ли сейчас необходимость или нет, так?
Я пока гуглил, наткнулся на статью: https://habr.com/ru/post/149431/
"Исследование изменений в базе данных посредством контрольных сумм"
По-сути, и такой метод был бы как вариант
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920183
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Да. Встроены.
У них же задача - "передать удаленно всё что изменилось"))))))
Только не притягивай это к твоему ТЗ. Оно у тебя глупое.
Так как у репликации есть четкий юз кейс для теста и проверки.
У тебя в ТЗ нет юз кейса, цели и задачи.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920188
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
пока гуглил, наткнулся на статью: https://habr.com/ru/post/149431/
2012 год да и то, тольуо список измененных таблиц.
А у тебя время, плюс тип операции, плюс имя поля, плюс старое значение.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920201
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iOracleDev
GrossmasteR,

Что будет считаться изменением в СУБД, изменение одного значения
в одной из сотен миллионов записей в одной из нескольких тысяч таблиц
будет считаться изменением?

Интересно что считать drop table успешным по факту его подачи или по факту фиксации удаления самой таблички?
И что делать на slave системе которая может успешно грохнуть табличку в то время как master ее удалял но не смог.
И дальше - продолжают катится транзакции которые в мастер вливаются а в slave уже нет т.к. табличка улетела.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920235
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот, что у меня получилось:
JDBCTemplate, будем говорить, самодельный.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
public class TriggerService {
    private final String dataSource;

    public TriggerService(String dataSource) {
        this.dataSource = dataSource;
    }

    public void init() {
        JdbcTemplate.executeInit(
                dataSource,
                "CREATE TABLE IF NOT EXISTS houses(id INTEGER PRIMARY KEY, price INTEGER NOT NULL, district TEXT NOT NULL, underground TEXT NOT NULL);"
        );
    }

    public House insert(House house) {
        JdbcTemplate.executeCreateQuery(
                dataSource,
                "INSERT INTO houses (price, district, underground) VALUES(?, ?, ?);",
                pstmt -> {
                    pstmt.setInt(1, house.getPrice());
                    pstmt.setString(2, house.getDistrict());
                    pstmt.setString(3, house.getUnderground());
                }
        );
        return house;
    }

    public House update(House house) {
        JdbcTemplate.executeCreateQuery(
                dataSource,
                "UPDATE houses SET price = ?, district = ?, underground = ? WHERE id = ?;",
                pstmt -> {
                    pstmt.setInt(1, house.getPrice());
                    pstmt.setString(2, house.getDistrict());
                    pstmt.setString(3, house.getUnderground());
                    pstmt.setInt(4, house.getId());
                }
        );
        return house;
    }

    public void initTrigger() {
        JdbcTemplate.executeInit(
                dataSource,
                "CREATE TABLE IF NOT EXISTS houses_trigger(new_id INTEGER PRIMARY KEY, new_price INTEGER NOT NULL, new_district TEXT NOT NULL, new_underground TEXT NOT NULL, date TEXT NOT NULL, operation TEXT NOT NULL);"
        );
        JdbcTemplate.executeInit(
                dataSource,
                "CREATE TRIGGER IF NOT EXISTS after_insert AFTER INSERT ON houses BEGIN INSERT INTO houses_trigger(new_id, new_price, new_district, new_underground, date, operation) VALUES (NEW.id, NEW.price, NEW.district, NEW.underground, datetime('now'), 'ins');END;"
        );
        JdbcTemplate.executeInit(
                dataSource,
                "CREATE TRIGGER IF NOT EXISTS after_update AFTER UPDATE ON houses BEGIN INSERT INTO houses_trigger(new_id, new_price, new_district, new_underground, date, operation) VALUES (OLD.id, OLD.price, OLD.district, OLD.underground, datetime('now'), 'upd');END;"
        );
    }

    public List<House> getAllChanges(String date) {
        return JdbcTemplate.executeQuery(
                dataSource,
                "SELECT new_id, new_price, new_district, new_underground, date FROM houses_trigger WHERE date LIKE '" + date + "%'",
                rs -> new House(
                        rs.getInt("new_id"),
                        rs.getInt("new_price"),
                        rs.getString("new_district"),
                        rs.getString("new_underground"),
                        rs.getString("date")

                )
        );
    }
}


Как по мне, работает. Единственное, я не понял, как мне в IDEA вторую таблицу увидеть
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920246
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Интересно что считать drop table успешным по факту его подачи или по факту фиксации удаления самой таблички?
И что делать на slave системе которая может успешно грохнуть табличку в то время как master ее удалял но не смог.
И дальше - продолжают катится транзакции которые в мастер вливаются а в slave уже нет т.к. табличка улетела.

Во первых не создавать и не удалять таблицы налету, а если все же решили сделать подобную архитектуру,
обрабатывать возможные нештатные ситуации.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920249
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как быть с этим? "Код должен быть покрыт нагрузочными тестами, приведены оценки планов запроса"
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920252
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR

Как по мне, работает. Единственное, я не понял, как мне в IDEA вторую таблицу увидеть

Это капец. А если у тебя 100 таблиц будет. Сколько тебе кода надо наколбасить. И сколько
протестировать.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920274
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Код: java
1.
2.
CREATE TABLE IF NOT EXISTS houses_trigger(new_id INTEGER PRIMARY KEY, new_price INTEGER NOT NULL, new_district TEXT NOT NULL, new_underground TEXT NOT NULL, date TEXT NOT NULL, operation TEXT NOT NULL);"
        );


-Никогда не называй таблицы программисткими терминами - items/trigger. Только бизнес и сущность.
- new_id переименовать в id и автосчетчик
- date НЕ ТЕКСТ
- Операция тип поля char, одна буква
- новые значения можно кидать в одно поле текст. Как захочешь. Оно не not null
...
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920276
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
С памятью хорошо? Я говорил что один триггер.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920278
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Код: java
1.
public class TriggerService {

что делает твой микросервис в кавычках?
Почему такое название?
Где обработка ошибок БД.
Где комментарии у класса и методов?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920279
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Код: java
1.
public List<House> getAllChanges(


Это в другой микро))))) сервис или класс перенеси.
Почему класс возврата House?
А те что удалены как назовем? Delete_House?
Подпиши комментарий метода.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920280
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
как мне в IDEA вторую таблицу увидеть
перечитай моё ТЗ.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920281
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
GrossmasteR
Для эксперимента создам простейшую таблицу. house adress price metro что то типа того и пропишу простейшие методы. insert update delete.

затем создам второй сервис TriggerService или что то типа того, где будут прописаны триггеры для каждой операции и попробую в какую -нибудь коллекцию получить изменения таблицы при выполнении операций с ней. Формально ТЗ будет выполнено?
это ТЗ для джуна. В начале треда не для джуна ТЗ. Сами решайте.
1. Один триггер для всех операций
2. Он пишет в таблу время, тип_операции_буква, прошлое значени_строка.
3. Коллекция не нужна. Просто вывод раз в 5 сек этой таблы в файл/лог

Всё

То что выше сделано пока двойка.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920290
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Вот, что у меня получилось

Бред какой-то.
Вы сами-то задание своё читали? Или оно у вас из головы вылетело?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920296
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA
GrossmasteR
Вот, что у меня получилось

Бред какой-то.
Вы сами-то задание своё читали? Или оно у вас из головы вылетело?
вы в гостях поменьше выражайтечь. Соблюдайте приличия.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920306
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

исключения обрабатываются в JdbcTemplate.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
public class JdbcTemplate {

    private static <T> T execute(String dataSource, String sql, PreparedStatementExecutor<T> executor) {
        try (
                Connection connection = DriverManager.getConnection(dataSource);
                PreparedStatement preparedStatement = connection.prepareStatement(sql)
        ) {
            return executor.execute(preparedStatement);
        } catch (SQLException e) {
            throw new DataAccesException();
        }
    }

    public static void executeInit(String dataSource, String sql) {

        try (
                Connection connection = DriverManager.getConnection(dataSource);
                Statement statement = connection.createStatement()

        ) {
            statement.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }

    public static void executeCreateQuery(String dataSource, String sql, PreparedStatementSetter setter) {
        execute(dataSource, sql, pstmt -> {
            setter.set(pstmt);
            pstmt.execute();
            return null;
        });
    }

    public static <T> List<T> executeQuery(String dataSource, String sql, RowMapper<T> mapper) {
        return execute(dataSource, sql, pstmt -> {
            try (ResultSet resultSet = pstmt.executeQuery()) {
                List<T> result = new LinkedList<>();
                while (resultSet.next()) {
                    result.add(mapper.map(resultSet));
                }
                return result;
            }
        });
    }
}



ну и интерфейсы, которые передаются в параметры методов, написаны
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920313
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp

- new_id переименовать в id и автосчетчик

По-моему, имеет смысл все же new_id, потому что нам, возможно, для чего-то может быть интересно объект с каким id в изначальной таблице попал в новую
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920319
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
skyANA

Бред какой-то.
Вы сами-то задание своё читали? Или оно у вас из головы вылетело?


Задание:
"...Спроектировать алгоритм (функцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора..."
У меня есть некая таблица, при каждом insert и update в эту таблицу, я сохраняю эти изменения в другую таблицу и могу выгрузить в LIST. То есть не только сам факт "есть ли изменения", а еще и посмотреть, что изменилось.
Вызываю, к примеру
Код: java
1.
System.out.println(triggerService.getAllChanges("2020-01-29"));


и вижу, что изменилось за вчерашний день.
Неужели все так ужасно?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920320
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
PetroNotC Sharp

- new_id переименовать в id и автосчетчик

По-моему, имеет смысл все же new_id, потому что нам, возможно, для чего-то может быть интересно объект с каким id в изначальной таблице попал в новую

Приведите Модель таблиц. Перед программированием ее обязательно делают. В любой форме. Лучше со стрелочками, но можно и без них)
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920322
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Вариации:
  • Вычисление изменение всей схемы целиком.
  • Вычисление изменений заданных объектов (таблиц, колонок).
и где это?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920323
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
и могу выгрузить в LIST.
этого в задании нет. Ни в первом ни в моем.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920324
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
GrossmasteR
Вариации:
  • Вычисление изменение всей схемы целиком.
  • Вычисление изменений заданных объектов (таблиц, колонок).
и где это?
а вы знаете понятие СХЕМА ЦЕЛИКОМ?
Вы не прогер чтобы такие ТЗ давать.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920325
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, а как мне создать метод, который бы уничтожил изначальную таблицу, чтобы я потом мог создать новую с нуля, пожалуйста, подскажите?

Что-то типа
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public void close() {
        try {
            preparedStatement.close();
            statement.close();
            connection.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }


подойдет?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920326
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Вычисление, реализованное только на JAVA без использования системных объектов СУБД.
где это?
GrossmasteR
Вычисление, реализованное только на SQL на СУБД Postgres.
а это?

Вообщем ничего по заданию не сделано.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920327
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
уничтожил изначальную таблицу
drop table t
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920330
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дмитрий Мух,
Предполагаю, что под "вариациями" подразумевается сделать хотя бы один из пунктов, возможно я ошибаюсь))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920332
Дмитрий Мух
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Дмитрий Мух,
Предполагаю, что под "вариациями" подразумевается сделать хотя бы один из пунктов, возможно я ошибаюсь))

дак ведь не один из пунктов не сделан
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920333
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух,
Вам в шарп ветку.
ТС наконец то начал код писать.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920334
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий Мух
дак ведь не один из пунктов не сделан
так это ТЗ ты писал?))))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920362
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня где-то был исходник CDC который все изменения всех таблиц БД складывает в EAV-табличку.

Могу автору пошарить его.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920369
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
У меня где-то был исходник CDC который все изменения всех таблиц БД складывает в EAV-табличку.
Могу автору пошарить его.

Автор дату как строку пишет, а мы ему счас легаси сунем.
А что это CDC?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920370
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp
GrossmasteR,
С памятью хорошо? Я говорил что один триггер.


Я так понимаю, что должен делать как-то так:
Код: sql
1.
2.
3.
CREATE OR REPLACE TRIGGER UpdateHouseLog
AFTER INSERT OR UPDATE ON houses
BEGIN



В тоже время ведь в SQLite я использую модификаторы OLD для Update (OLD.price, OLD.district...) и NEW для INSERT (NEW.price, NEW.district...). Может быть в SQLite не удастся объединить триггеры?
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920375
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
Может быть в SQLite не удастся объединить триггеры?
не знаю. Он вроде еще до БД не дошел.
Модель таблички рисует.
Это нам тут невтерпёж))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920390
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
я так погуглил...
По-моему, вот это об этом, нет?
"...At this time, SQLite supports only FOR EACH ROW triggers, not FOR EACH STATEMENT triggers. Hence, explicitly specifying FOR EACH ROW is optional..."

Судя по всему не поддерживается объединение.

Плюс на счет даты:
"...Как известно, в базе данных SQLite нет типа данных для хранения даты или времени. Предполагается хранить дату и время либо в строковом поле, либо в виде числа, т.е. использовать один из трех вариантов:

TEXT - Для хранения даты/времени в формате "YYYY-MM-DD HH:MM:SS.SSS" (подробнее см.ниже)
REAL - Для записи даты/времени в виде числа - Юлианского дня
INTEGER - Чтобы сохранить дату/время как время Unix (число секунд с 1970-01-01 00:00:00 UTC)..."

Я с тригеррами разбирался по этому мануалу : https://zametkinapolyah.ru/zametki-o-mysql/tema-13-triggery-v-sql-na-primere-bazy-dannyx-sqlite.html#UPDATE_AFTER_UPDATE_BEFORE_UPDATE

Вторую таблицу переименовал в houseLog.

Думаю, с этим ТЗ надо закругляться. Я сделал все на что хватало моего уровня.
Возможно больший смысл имело бы разобраться с этим: "...код должен быть покрыт нагрузочными тестами, приведены оценки планов запроса..." Не представляю, как это сделать
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920394
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Про триггер и формат даты - ОК. Если ты бд такую взял.
А остальные ошибки не исправил дело твоё. Двойка с плюсом.
Модель не рисовал тоже дело твоё.
Устраивайся джуном. Там научат.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920406
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
У меня где-то был исходник CDC который все изменения всех таблиц БД складывает в EAV-табличку.
Могу автору пошарить его.

Автор дату как строку пишет, а мы ему счас легаси сунем.
А что это CDC?

Да сорян. Аббревиатура редкая. Вот тут https://en.wikipedia.org/wiki/Change_data_capture
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920409
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
GrossmasteR
Может быть в SQLite не удастся объединить триггеры?
не знаю. Он вроде еще до БД не дошел.
Модель таблички рисует.
Это нам тут невтерпёж))

А мне вообще плевать на репликацию сердставми чистого PG. Тут уж или покупать коробочное
решение или отказаться от амбиций.

В качестве лирического отступления я просто предлагаю вспомнить старика Эрика Брювера
и поговорить о том какую систему мы строим?

Что будет если между master-slave сеть мигнула? Мы замедлим транзакции в мастере?
Мы будем их буферизировать? Куда? Как долго? Что будет если сеть отсутствовала сутки?
Где хранить изменения по CDC? Как восстанавливать slave после простоя если мы приняли
решение что данные по CDC уже неактуальны? Что будет если мы отказываемся от синхронности?
Бизнес будет с этим ОК? Такие потери возможны для бизнеса в случае временнОго рассогласования
master-slave?

Вот пока мы не ответим на эти вопросы - дизайнить нет смысла.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920413
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Крутая ссылка.
И даже пример картинки Модели есть.
Что очень не любят делат два мембера тут.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920415
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Тут уж или покупать коробочное
решение или отказаться от амбиций.
да. Автор выше отказался и четко сказал. Рассматривает одну таблу.
На ТЗ архитектора он не тянет.
А ты предлагаешь поговорить?))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920421
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
mayton
Тут уж или покупать коробочное
решение или отказаться от амбиций.
да. Автор выше отказался и четко сказал. Рассматривает одну таблу.
На ТЗ архитектора он не тянет.
А ты предлагаешь поговорить?))

Топик течет как река. И кто запретит нам тут поговорить о том что наболело?
Но если автор будет сильно в обиде - мы уйдем на север в другой топик.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920422
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот пока мы не ответим на эти вопросы - дизайнить нет смысла.
мое имхо что ТЗ в топике на архитектора или сеньора но без кода.
Просто оговорить на пальцах возможные решения. Их море.
По твоей ссылке море решений.
...
Но автор сказал - на джуна и в банк)))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920424
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
И кто запретит нам тут поговорить о том что наболело?

mayton
Топик течет как река.

Сам ответил. Видно будет.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920438
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Что будет если между master-slave сеть мигнула?
Мы замедлим транзакции в мастере?
Мы будем их буферизировать? Куда? Как долго?
Что будет если сеть отсутствовала сутки?
Поскольку разработка корректного мультимастер-клиента - задача не самая тривиальная, то давайте исходить из простейшего сценария репликации: минимизация простоя.
Если ещё и ставить достижимые задачи, то ведомый имеет право отставать от ведущего. В нормальной ситуации - на минуты, при обрыве связи - на время обрыва.
Куда буферизировать - особого выбора нет: держать изменения только в памяти - так себе решение. В том числе и по соображениям надёжности.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920452
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Что будет если между master-slave сеть мигнула? Мы замедлим транзакции в мастере?
Мы будем их буферизировать? Куда? Как долго? Что будет если сеть отсутствовала сутки?
Где хранить изменения по CDC? Как восстанавливать slave после простоя если мы приняли
решение что данные по CDC уже неактуальны? Что будет если мы отказываемся от синхронности?
Бизнес будет с этим ОК? Такие потери возможны для бизнеса в случае временнОго рассогласования
master-slave?
если про репликацию, то все вопросы решены так же, как в спецификсции javaEE для beans.
Если что... или война, то есть админка админу для разрешения коллизий в очереди.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920462
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вчера все нормально работало.
сегодня создаю таблицу, добавляю в таблицу объект
Код: java
1.
service.insert(new House(0,1,"d", "u"));


id становится "1"
Пытаюсь обновить
Код: java
1.
service.update(new House(1,2,"d2", "u2")); 


получаю exception в этом методе:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 public House update(House house) {
        JdbcTemplate.executeCreateQuery(
                dataSource,
                "UPDATE houses SET price = ?, district = ?, underground = ? WHERE id = ?;",
                pstmt -> {
                    pstmt.setInt(1, house.getPrice());
                    pstmt.setString(2, house.getDistrict());
                    pstmt.setString(3, house.getUnderground());
                    pstmt.setInt(4, house.getId());
                }
        );
        return house;
    }



что изменилось, не пойму
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920464
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Ты не asv79?
Очень похожий стиль работы.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920502
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR

получаю exception в этом методе:

Ты серъезно? Вот мы щас должны включить телепатов и увидеть твой стектрейс.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920512
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересно зачем делать объект из класса
GrossmasteR
Код: java
1.
update(new House(1,2,"d2", "u2")); 


Чтобы сразу в стеке ниже из объекта обратно делать простые типы
Код: java
1.
.setInt(1, house.getPrice());
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920513
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Противники ООП пошутят - ООП головного мозга.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920635
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да тут непричем ООП. Я знавал разных админов и девопсов которые интуитивно подобные проблемы
решали просто глядя в логфайл. И приэтом они нихрена не знали Java. Базовый английский. И понимание
некоторых кодов ошибок БД - всё решало.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920653
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
Так тут конкретно в данном примере усложнение жизни.
Есть метод ЗаписатьВбд(
Внутри нужен String.
Занафига оборачивать в класс new MyClass()
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920682
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот это?

Код: java
1.
update(new House(1,2,"d2", "u2")); 
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920694
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да это какой-то пробный код или тестовый.

Если-б это была SpringData то там были-б другие методы. Типа.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
interface BaseRepository<T, ID extends Serializable> extends Repository<T, ID> {
 
    void delete(T deleted);
 
    List<T> findAll();
     
    Optional<T> findOne(ID id);
 
    T save(T persisted);
}

...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920700
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо-бы форкнуть какой-то топик относительно репликации CDC через JMX.
И я очень хотел отвязаться от БД. К сожалению получение мета-данных
о таблицах слишком уж по разному работает. И чаще я плевал и подключал
либо v$tables из Oracle или через information_schema.columns в PG.

(автор не переживай это не для тебя. Это отдельная идея).
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920703
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Вот это?

Код: java
1.
update(new House(1,2,"d2", "u2")); 

да

mayton
К сожалению получение мета-данных
о таблицах слишком уж по разному работает.

Да.
Все что там по ссылке я переделал и попробовал раньше на работах.
Но я все делал без Java. Средствами субд.
Именно по разному работает и специфично.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920752
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp

Но я все делал без Java. Средствами субд.
Именно по разному работает и специфично.

Я серъезно завис на семантике таких вещей как
- инстанс
- база
- схема (namespace)
- пользователь
Это как город-улица-дом в географии. Сколько сцука ты не придумывай правил
а найдется какая-то СУБД которая либо schema-less. Либо в ней пользователь == схема.
Либо в ней нет базы. Либо она выставляет еще кучу какой-то семантики типа dbo.*
или PUBLIC-пользователь.

Вобщм треш угар и содомия. Я забросил попытки обобщить эти сущности.
Просто без них ничего универсального не получалось.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920754
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые форумчане, посмотрите, пожалуйста, почему не работает UPDATE. Я уже всю голову сломал

вот что пытаюсь сделать в main
Код: java
1.
2.
3.
4.
5.
6.
7.
DeterminingDBChangesService service = new DeterminingDBChangesService("jdbc:sqlite:db.sqlite");
        service.drop("houses");
        service.drop("houses_log");
        service.init();
        service.initTrigger();
        service.insert(new House(0,1,"d1","u1")); //отправляем c id 0 в таблице должен сработать автоинкремент, то есть в конкретном примере id будет 1.  Так и выходит [House(id=1, price=1, district=d1, underground=u1, date=2020-01-30 18:00:52)]
        service.update(new House(1,2,"d1","u1"));// хочу обновить строку с id 1


получаю
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
[House(id=1, price=1, district=d1, underground=u1, date=2020-01-30 18:02:21)]
Exception in thread "main" ru.itpark.exception.DataAccessException
	at ru.itpark.util.JdbcTemplate.execute(JdbcTemplate.java:21)
	at ru.itpark.util.JdbcTemplate.executeCreateQuery(JdbcTemplate.java:42)
	at ru.itpark.service.DeterminingDBChangesService.update(DeterminingDBChangesService.java:42)
	at ru.itpark.Main.main(Main.java:16)

Process finished with exit code 1



все ссылки по порядку
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 private static <T> T execute(String dataSource, String sql, PreparedStatementExecutor<T> executor) {
        try (
                Connection connection = DriverManager.getConnection(dataSource);
                PreparedStatement preparedStatement = connection.prepareStatement(sql)
        ) {
            return executor.execute(preparedStatement);
        } catch (SQLException e) {
            throw new DataAccessException();
        }
    }



Код: java
1.
2.
3.
4.
5.
6.
7.
 public static void executeCreateQuery(String dataSource, String sql, PreparedStatementSetter setter) {
        execute(dataSource, sql, pstmt -> {
            setter.set(pstmt);
            pstmt.execute();
            return null;
        });
    }



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public void update(House house) {
        String sql = "UPDATE houses SET price = ?, district = ?, underground = ? WHERE id = ?;";

        JdbcTemplate.executeCreateQuery(dataSource, sql, pstmt -> {
            pstmt.setInt(1, house.getPrice());
            pstmt.setString(2, house.getDistrict());
            pstmt.setString(3, house.getUnderground());
            pstmt.setInt(4, house.getId());
        });
    }
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920756
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У тебя внутри буквочки e - была ценная диагностическая информация. Ты ее - убил. И вместо этого
пере-вызвал своё исключение класса DataAccessException в котором нет ни кода ошибки ни текста
самой причины. Нет также стектрейса.

Код: java
1.
2.
3.
 } catch (SQLException e) {
            throw new DataAccessException();
        }
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920761
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
org.sqlite.SQLiteException: [SQLITE_CONSTRAINT]  Abort due to constraint violation (UNIQUE constraint failed: houses_log.new_id)
	at org.sqlite.core.DB.newSQLException(DB.java:941)
	at org.sqlite.core.DB.newSQLException(DB.java:953)
	at org.sqlite.core.DB.execute(DB.java:854)
	at org.sqlite.jdbc3.JDBC3PreparedStatement.execute(JDBC3PreparedStatement.java:56)
	at ru.itpark.util.JdbcTemplate.lambda$executeCreateQuery$0(JdbcTemplate.java:45)
	at ru.itpark.util.JdbcTemplate.execute(JdbcTemplate.java:19)
	at ru.itpark.util.JdbcTemplate.executeCreateQuery(JdbcTemplate.java:43)
	at ru.itpark.service.DeterminingDBChangesService.update(DeterminingDBChangesService.java:42)
	at ru.itpark.Main.main(Main.java:16)



аа-а, я кажется теперь понял. я же во вторую таблицу записываю изменения. и получается у меня insert уже ушел с id 1 а updatом я опять добавляю во вторую таблицу еще один id 1.
то есть мне надо без id их туда добавлять что ли
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920765
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну да, если я триггеры не инициализирую, все нормально работает. тьфу ты , всю голову сломал. Вопрос, как мне организовать логику, чтобы добавление во вторую таблицу при срабатывании триггера срабатывало нормально? думаю, надо просто не учитывать id да и все
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920766
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
И не надо обобщать. Это территория СУБД.
А субд это город. Ты правильно сказал.
А вопрос - что изменилось в городе глупый сам по себе.
Опять же нет обоснования Проблемы....которую решаем.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920767
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
ну да, если я триггеры не инициализирую, все нормально работает. тьфу ты , всю голову сломал. Вопрос, как мне организовать логику, чтобы добавление во вторую таблицу при срабатывании триггера срабатывало нормально? думаю, надо просто не учитывать id да и все
мы не знаем так не видим Модели.
Без нее ни одна задача не решается. Даже цветочные букеты в цветочном магазине.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920769
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,

а какая тут модель?

CREATE TABLE IF NOT EXISTS houses(id INTEGER PRIMARY KEY, price INTEGER NOT NULL, district TEXT NOT NULL, underground TEXT NOT NULL);

CREATE TABLE IF NOT EXISTS houses_log(new_id INTEGER NOT NULL, new_price INTEGER NOT NULL, new_district TEXT NOT NULL, new_underground TEXT NOT NULL, date TEXT NOT NULL, operation TEXT NOT NULL);

вот и вся модель.

ошибка была в том, что new id в houses_log был PRIMARY KEY. Убрал и теперь вроде бы как все в порядке
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920771
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR
вот и вся модель.
asv79, перелогинься)
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920778
GrossmasteR
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
PetroNotC Sharp,
да не, я это я.
Глянул его тему. У asv79 там какие-то продвинутые проблемы уже. А я еще совсем зеленый
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39920785
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GrossmasteR,
Неа. Это ты.
- он дату в строках, ты тоже
- он не отвечает на вопросы мемберов в топике, ты тоже
- он гонит код и плевать на _методологию создания ПО_, ты тоже.
GrossmasteR
Убрал и теперь вроде бы как все в порядке

Его коронная фраза.
После этого идет следующий топик или ТЗ
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921148
Фотография asv79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
GrossmasteR
вот и вся модель.
asv79, перелогинься)

мне не до форумов ,покрываю тестами наш адаптерсервис
покрывать тестами чужой код,когда сложно понять что хотели сделать авторы и куда и что запрятали -очень весело
мне дебагер уже снится
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921153
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
asv79
PetroNotC Sharp
пропущено...
asv79, перелогинься)

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

Кстати подумай на досуге как составить цифровой потрет sql-участника.
Я думаю если анализировать некоторые особые слова - то можно достаточно
точно указать - что дескыть да. Это Cтас акк поменял
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921156
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У нас на одной из прошлых работ, похожим образом заказчики определяли авторов отчетов по ошибках (что бы знать, к кому персонально за оперативным исправлением обращаться).

Если запятые - то это Лена
Если буквы в словах - то это Юра

(возможно перепутал местами, но суть думаю ясна)
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921158
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

Кстати подумай на досуге как составить цифровой потрет sql-участника.

Запиливай тему с коду

Парсер сайта (если надо), я могу написать
Вопрос, кто готов ИИ (нейронную сеть) разработать
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921159
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве первого приблежения (без ИИ) - база данных слов ==> словарный запас (частота использования слов), типовые ошибки в написании.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921161
iOracleDev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev,

Скорее типовые (любимые) словосочетания.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921168
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
mayton

Кстати подумай на досуге как составить цифровой потрет sql-участника.

Запиливай тему с коду

Парсер сайта (если надо), я могу написать
Вопрос, кто готов ИИ (нейронную сеть) разработать

Я помню что Базист писал парсер сайта. И парсил ПТ чтоб доказать преимущества
своего "движка".

А вот мне все веб-клиенты лень писать. Тоесть могу кошно ... но чёт ломает.
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev
У нас на одной из прошлых работ, похожим образом заказчики определяли авторов отчетов по ошибках (что бы знать, к кому персонально за оперативным исправлением обращаться).

Если запятые - то это Лена
Если буквы в словах - то это Юра

(возможно перепутал местами, но суть думаю ясна)

У меня была идея - строить Марковские сети для каждого акка.

Хотя ... может я просто невкурсе современных методов. Типа спамо-фильтров...
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921172
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton
Надо-бы форкнуть какой-то топик относительно репликации CDC через JMX.
И я очень хотел отвязаться от БД. К сожалению получение мета-данных
о таблицах слишком уж по разному работает. И чаще я плевал и подключал
либо v$tables из Oracle или через information_schema.columns в PG.

(автор не переживай это не для тебя. Это отдельная идея).

Обещал.

Сделал.

https://www.sql.ru/forum/1321816/tyapnichnyy-cdc-jms

Тьфу блин. Конешно же JMS. А я что? JMX написал...
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921175
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton

А вот мне все веб-клиенты лень писать. Тоесть могу кошно ... но чёт ломает.

Первую версию парсера написать за вечер/выходные вполне можно. Готов за выходные перелопатить пару тысячь сообщений в формат БД (insert'ов)

mayton

У меня была идея - строить Марковские сети для каждого акка.

Я даже слов таких не знаю "Марковские сети" )))
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921180
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Делали подобную систему - если без нейронок, то алгоритм следующий -

1) Склеиваем все сообщения автора в одну строку
2) Фильтруем стоп слова - предлоги и общеупотребительные
3) делаем TF\IDF индекс для выбора сотни самых значимых и необычных слов автора
4) Переводим все в векторный формат(каждому слову будет соответствовать double)
5) ищем симиларити между двумя мемюерами посредством Word2Vec лиюо другого алгоритма.

Тут есть пара нюансов - текста должно быть много, от 1000 постов - иначе не хватит выборки.
У нас работало с точностью 60-70%, можно было конечно заморачиться еще суффиксами\n-граммами, знаками препинания, заглавная ли первая буква и т.д но нам хватало.
В этом форуме могут еще сработать такие признаки как смайлики, формат кода(если вообще вставляет), время когда человек пишет(обычные рабочие часы), тематика вопросов и т.д - думаю дажебез нейронки можно построить точную модель. а на нейронке - так там вообще выборка сумасшедшая нужна для точности
...
Рейтинг: 0 / 0
Мониторинг изменений в базах данных
    #39921213
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Давайте так. Я уже свою пятницу "застолбил".

Но вы - поднимайте тему лучше в Программинге. Там - аудитория шире. Я возможно подключусь.
...
Рейтинг: 0 / 0
153 сообщений из 153, показаны все 7 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Мониторинг изменений в базах данных
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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