|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Привет котаны-братаны. По мотивам Мониторинг изменений в базах данных Буду краток. Две базы. Два приложения. И 1 месседж брокер. Запускаем мастера и подчиеннного. Код: java 1.
Код: java 1.
Вобщем надо как-то так исхитриться чтоб изменения мастера попали в Slave. Топология сети - любая. База - любая (postgres как пример) Брокер - любой. Требований по SLA нету. Как сделаете так и будет. Изменения - только DML (Insert/Update/Delete) Go-go кодить. P.S. Ну триггерочки и служебные таблички там уж сами посоздавайте если надо. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 20:29 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
mayton Go-go кодить. нафига? https://google.gik-team.com/?q=postgresql master slave replication Ты же хорошо представляешь, сколько строк кода и сколько такая система реально стоит. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 20:45 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, сколько? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 21:14 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Понты делов. К воскресенье будет POC. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 21:57 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
mayton Понты делов. К воскресенье будет POC. Прям со сплит брейном и поддержкой оффлайн? И чтоб ни единого разрыва! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 22:16 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Вы уже процедуру main написали? А? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 22:17 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev mayton Go-go кодить. нафига? https://google.gik-team.com/?q=postgresql master slave replication Ты же хорошо представляешь, сколько строк кода и сколько такая система реально стоит. Абстрактный JDBC источник. Я-же писал в задании. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 22:22 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Victor Nevsky Если это тоже что и XA - то это тормозной кусок говна. Синхронная фиксация в две системы. Тормоз еще тот. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 22:25 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
mayton База - любая (postgres как пример) ... P.S. Ну триггерочки и служебные таблички там уж сами посоздавайте если надо. Бессмысленное занятие, каждая уважающая себя СУБД уже имеет механизмы репликации работающие на уровне ядра, триггерочками получится тормозной кусок говна)) Хотя если данных не много и репликация почтовая, то может и пригодится поделье, но даже в этом случае нативная для СУБД часть будет составлять основной объем кода, на промежуточном уровне будет только забор готовых upsert/delete и применение их на другой инстанс в нужном порядке. Основная проблема будет в том, что триггеры на операции срабатывают непосредственно при проведении операции, а фиксация происходит позже и триггера уровня строки на фиксацию нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 22:41 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
iOracleDev, Ты серьёзно так напрягся? Чувак. Это пятничный топик. Это брейншторм. Это челлендж. Здесь не ищут коробочных решений!!! Go-go!! ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 22:44 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
mayton, Смотрю с интересом на то что получится, особенно на часть касающуюся СУБД)) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 22:49 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Не стоит забывать о проблемах связанных с текущим временем. Если запрос содержит insert currentSystemTime или random - в общем нечто недетерминированное, то просто прогнать инсерт на реплике не получится ... |
|||
:
Нравится:
Не нравится:
|
|||
31.01.2020, 23:50 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
mayton Если это тоже что и XA - то это тормозной кусок говна. Синхронная фиксация в две системы. Тормоз еще тот. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2020, 00:44 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
забыл ник Не стоит забывать о проблемах связанных с текущим временем. Если запрос содержит insert currentSystemTime или random - в общем нечто недетерминированное, то просто прогнать инсерт на реплике не получится А что будет видеть триггер? ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2020, 10:57 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
В качестве первого закидона. Этот код я писал еще летом. И это еще не CDC. Это подготовка схемы БД к созданию служебных таблиц и триггеров. Код - требует улучшений. В частности - отвязки от Постгреса и привязки к генерализованной СУБД. Есть еще второй вариант такого-же CDC где EAV табличка заменяется на множество типизированных. Код: javascript 1. 2. 3. 4. 5. 6.
Код: javascript 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. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87. 88. 89. 90. 91. 92. 93. 94. 95. 96. 97. 98. 99.
Код: javascript 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. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85. 86. 87.
... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2020, 11:21 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Всё. Больше никаких тузов в рукаве у меня нет. Надо садиться и писать чортов код. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2020, 11:26 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Думаю над docker-compose. Исключительно в целях тестирования. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.02.2020, 13:42 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Docker-compose. Пока вот так вот. Еще не тестил. Возможно не хватает некоторых env-переменных для ApacheMQ. Логины-пароли там. Админка и прочее. Вобщем добавте кому не лень. Здесь /bigdata - это просто мой локальный путь где диск толстый и есть место для флуда. Замените его соотв на ваш путь как будет удобно. Код: 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.
... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2020, 00:31 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Дополнение №1 к базовому заданию. Для EAV-модели. Что делать с транзакциями на удаление строк в том случае если в таблице нет PK ? Скорее всего - ничего. Придется констатировать что мы не можем удалять такие строки на Slave системе. Итого: игнорируем delete/update для таблиц без PK. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2020, 00:38 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Вобщем в докер-композиции я всё напутал. Порты не те. Вот так работает. Можно уже заходить на админский порт MQ и смотреть чо как. Код: 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.
Еще надо придумать как автоматизировать создание и наполнение БД. Здесь я пока - пас. Надеюсь что у мемберов есть под рукой какая-то учебная базячка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2020, 01:36 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Дополнение к базовому заданию №2 Как передавать информацию о первичных ключах? Хотелось бы чтобы логика Slave(consumer) была максимально примитивной. Consumer должен просто принимать JMS/Json сообщения из канала и просто их трансформировать в целевой DML для целевой DBMS. (кстати из этого вытекает бонус. Тип DBMS может быть разный) При этом для формирования предложения WHERE он не должен заглядывать ни в какие справочники таблиц и ключей. Фактически JMS сообщение должно уже содержать эту информацию. Consumer - простой и деревянный. Producer - умный. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2020, 11:42 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
Неутешительные итоги. Насчет POC. Есть некий каркас вида двух консольных приложений. Master.java / Slave.java которые просто стартуют и умеют распознавать входные аргументы. И есть парочка сущностей типа EavEntity и JMSEntity. Первая нужна просто для маппинга таблички Код: java 1. 2. 3. 4. 5. 6. 7.
И вторая будет по сути месседжем. Ее еще надо будет доработать для признаков первичных ключей. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15.
В каркас встроенные фрагменты учебных туториалов из набора ApacheMQ (для быстрого старта). В принципе они должны поднятся в интеграции с env. +Создана конфигурация docker-compose которая поднимает environment из двух Постгресов и 1 Apache Active MQ последних версий. Постгресы я брал только лишь для того чтобы привязаться к какой-никакой реляционной внешней системе. Было пофиг что брать и я как и обещал буду строить независимую от dbms систему. В крайнем случае придется написать сет бриджей или адаптеров диалектов SQL так же как это делают Hibernate/Batis. Я просто всячески оттягиваю этот момент чтоб он не мешал на старте. +По мелочи. Добавлены логгеры и их конфигурации. SQL скрипик и докер-скриптик. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.02.2020, 21:43 |
|
Тяпничный CDC/JMS
|
|||
---|---|---|---|
#18+
mayton, Тормозить будет. При update таблички на сотню тысяч по where date > ХХХ будет событий 50000. И все встанет. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.02.2020, 09:10 |
|
|
start [/forum/topic.php?fid=59&msg=39921633&tid=2120916]: |
0ms |
get settings: |
8ms |
get forum list: |
5ms |
check forum access: |
1ms |
check topic access: |
1ms |
track hit: |
49ms |
get topic data: |
2ms |
get forum data: |
0ms |
get page messages: |
407ms |
get tp. blocked users: |
0ms |
others: | 6ms |
total: | 479ms |
0 / 0 |