|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
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 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 12:48 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, нет времени. вчера было собеседование. на большинство вопросов по java core я ответил и как по мне, все прошло неплохо. Не знаю, конечно, какое мнение у той стороны, ответ будет недели через 1.5 и они будут учитывать задание. первую задачу с кэшем я уже отправил. может быть успею что-то состряпать по второй, чтобы было хоть что-то. думаю, это может сыграть роль. маленький плюсик. если кто-то вообще ничего не сделает, а у меня хоть какие-то наработки будут сделаю так, создам две таблицы. основную и с изменениями. никак постгре, возьму sqlite инмемори да и все. это же просто сферический конь в вакууме. jdbctemplate "самодельный". и пропишу триггеры для основных операций изменений таблицы. ну и как-то надо завернуть это все в метод, получения изменений. думаю как-то так ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 12:48 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR сделаю так, создам две таблицы. основную и с изменениями. никак постгре, возьму sqlite инмемори да и все. это же просто сферический конь в вакууме. jdbctemplate "самодельный". и пропишу триггеры для основных операций изменений таблицы. ну и как-то надо завернуть это все в метод, получения изменений. думаю как-то так Вместо постгри другую бд? Изменения только одной таблы? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:04 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR это может сыграть роль. маленький плюсик. если кто-то вообще ничего не сделает, а у меня хоть какие-то наработки будут Уточнить задание тоже может быть плюсом. Кому на работе нужен джун, который что-то там делает, а потом приносит фигню какую-то на SQLite, когда у нас Postgres? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:17 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
PetroNotC Sharp еще раз подробнее. Вместо постгри другую бд? Изменения только одной таблы? Да. опять же нет времени разбираться прямо сейчас с постгри, я ней никогда не работал. возьму sQLITE Для эксперимента создам простейшую таблицу. house adress price metro что то типа того и пропишу простейшие методы. insert update delete. затем создам второй сервис TriggerService или что то типа того, где будут прописаны триггеры для каждой операции и попробую в какую -нибудь коллекцию получить изменения таблицы при выполнении операций с ней. Формально ТЗ будет выполнено? "Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора". Вот только как быть со временем или идентификатором? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:20 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR Формально ТЗ будет выполнено? Нет, не будет. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:22 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
skyANA, я вижу ваши советы на счет уточнения. Я понимаю. Большое спасибо за них. Просто дело в том, что задание выдали аж перед новым годом и я несколько подзабил на них, потому что со всех сторон слышал, что это слишком сложные задания на джуна, а тут на собеседовании спросили, мол, прислал ли хотя бы одну из двух. и я решил активизироваться. А сейчас уже как-то даже неудобно спрашивать спустя месяц. Поэтому попробую сделать какую-то простую реализацию. Учебную, так сказать ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:23 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR Вот только как быть со временем или идентификатором? Если делать на DDL триггерах, то в момент его срабатывания пишите куда-то время этого самого срабатывания. А потом мониторинг должен показывать, что за последние 30 минут ничего не происходило. А за неделю произошло вот это. Вот только в SQLite нет DDL триггеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:27 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR skyANA, я вижу ваши советы на счет уточнения. Я понимаю. Большое спасибо за них. Просто дело в том, что задание выдали аж перед новым годом и я несколько подзабил на них... А сейчас уже как-то даже неудобно спрашивать спустя месяц. Смотря ведь как спрашивать. Можно спросить так, что показать свою заинтересованность работать именно у них и адекватность в подходе к решению задачи. А то ведь может получиться так, что спустя месяц прислал фигню какую-то, разве не мог за это время спросить, что надо? На фиг нам такой не нужен. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:30 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR Для эксперимента создам простейшую таблицу. house adress price metro что то типа того и пропишу простейшие методы. insert update delete. затем создам второй сервис TriggerService или что то типа того, где будут прописаны триггеры для каждой операции и попробую в какую -нибудь коллекцию получить изменения таблицы при выполнении операций с ней. Формально ТЗ будет выполнено? 1. Один триггер для всех операций 2. Он пишет в таблу время, тип_операции_буква, прошлое значени_строка. 3. Коллекция не нужна. Просто вывод раз в 5 сек этой таблы в файл/лог Всё ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:44 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR, Насчет двух сервисов. - решить данное ТЗ одним сервисом по REST без спринга с Java EE JAX-RS. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 13:50 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
а что если я в таблицу с "изменениями" в строку внесу дополнительную ячейку datetime и потом при запросе метода Collection getИзмененияБД (date) буду получать выборку по времени? А, ну вот как PetroNotC Sharp и говорил, время добавить ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:12 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
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.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:19 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR устраиваюсь в один из банков "Проясните, в каком виде должны быть представлены результаты этого вашего мониторинга изменений в базах данных." Мне сложно рассуждать на эту тему, потому что я не знаю в каком виде это бывает в реальности. Могу предположить, что при INSERT или UPDATE метод должен возвращать true. В задании же указано: "Спроектировать алгоритм (фунцию) определяющую есть ли изменения в СУБД или нет начиная с какого-либо времени или идентификатора." Может при каждом INSERT или UPDATE надо передавать что-то еще, чтобы потом понять "с какого-либо времени или идентификатора" какие то триггеры. А может быть было бы не плохо, если бы метод возвращал не просто true false, а конкретные изменения Есть классические методы основанные на блокировке for update, а также стратегии когда это делать, можно блокировать сразу при чтении, можно делать попытку блокирования при изменении клиентом данных прочитанных в клиентский интерфейс, можно делать попытку блокирования при сохранении клиентом измененных данных. Можешь погуглить про пессимистические и оптимистические блокировки. Смысл в том, что если запись в БД была изменена, изменять ее уже неправильно, в такой ситуации необходимо выдать сообщение, что данные были изменены и перечитать их. Но у тебя речь идет похоже именно о инвалидации "кеша", т.е. твой микросервис считал некий объем данных из БД которые ты обзываешь горячими, необходимо понимать изменились ли эти данные в БД и соответствует ли закешированное в сервисе состояние состоянию БД. Так вот делать это можно только для конкретного частного случая, в общем случае задача нерешаема, собственно поэтому тебе ничего нагуглить и не удалось. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:31 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR А как один? мне же все равно нужны разные запросы на разные типы операций ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:33 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR getИзмененияБД (date) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:35 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
iOracleDev в общем случае задача нерешаема, У него руки чешутся пописать). ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:38 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Есть некий сложный запрос (в тз фигурируют аналитические функции и явно написано, что запросы тяжелые), сервис загрузил выборку к себе, каким образом понять, что какое то поле из какой то записи этой выборки было изменено? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:44 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
By the way, В Oracle такая функциональность есть. Включая кэширование результатов запросов и их обновление при изменении данных, на стороне сервере и стороне клиента (OCI). Насколько хорошо работает и как это использовать в мирных целях - не знаю. Не использовал. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 14:49 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
iOracleDev PetroNotC Sharp, Есть некий сложный запрос (в тз фигурируют аналитические функции и явно написано, что запросы тяжелые), сервис загрузил выборку к себе, каким образом понять, что какое то поле из какой то записи этой выборки было изменено? В веб проектах есть кеш хибера, эксплорера, субд. Этого достаточно. И кешируется каждый раз свои объекты. База запросы, эксплорер страничку, хибер сущност и сессию хибера. Разговаривать про #абстрактныйкешнепонятночего глупость. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 15:07 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
Для PostgreSQL есть готовое: https://jdbc.postgresql.org/documentation/head/replication.html можно в виде JSON: https://debezium.io/documentation/reference/1.0/postgres-plugins.html ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 18:48 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
Локшин Марк, Дык для всех бд есть готовое - репликация. Не осилит. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 19:03 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
GrossmasteR Вариации:
... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 19:25 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Локшин Марк, Дык для всех бд есть готовое - репликация. Не осилит. И то, что есть в PostgreSQL нет для большинства БД в которых есть штатная репликация. Вы не название ссылки прочитайте, а то, что там внутри. Там на Java писать пару десятков строк кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 19:29 |
|
Мониторинг изменений в базах данных
|
|||
---|---|---|---|
#18+
PetroNotC Sharp Локшин Марк, Дык для всех бд есть готовое - репликация. Не осилит. Получается во всех система управления базами данных (как минимум, распространенных) такие механизмы уже встроены, да? из ТЗ: "часто возникает необходимость синхронизации горячих данных.." ну то есть необходимость репликации, так? в тоже время мне не предлагаю написать "свою репликацию", да? а скорее алгоритм, который определит, есть ли сейчас необходимость или нет, так? Я пока гуглил, наткнулся на статью: https://habr.com/ru/post/149431/ "Исследование изменений в базе данных посредством контрольных сумм" По-сути, и такой метод был бы как вариант ... |
|||
:
Нравится:
Не нравится:
|
|||
29.01.2020, 19:32 |
|
|
start [/forum/topic.php?fid=59&msg=39920174&tid=2120918]: |
0ms |
get settings: |
22ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
547ms |
get tp. blocked users: |
2ms |
others: | 335ms |
total: | 1012ms |
0 / 0 |