Гость
Map
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация данных основного хранилища (PG) и ElasticSearch / 8 сообщений из 8, страница 1 из 1
28.09.2020, 00:24
    #40003159
student42
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
Доброго вечера!

Имеется некотрое приложение приложение:
- SpringBoot2
- Hiberante (ORM)
- PostgreSQL

Требуется реализовать механизм поиска данных (по достаточно большому) объему данных. С учетом того
что PG горизонтально плохо масштабируется было принято решение использовать для этого ElasticSearch (Rest client).

Вопросы:
1. Как гарантировать консистентность данных в разных хранилищах?
2. Как элегантно в связке Hibernate/Spring передавать изменения в ElasticSearch?

P.S. Я понимаю что в конце методов CustomerServiceImpl.customerCreate() или CustomerServiceImpl.customerUpdate()
можно передавать данные в ES. Но подозреваю что это плохое решение.


Поделитесь пожалуйста опытом. Как подобную задачу решали вы?

Заранее благодарю!

P.P.S Надеюсь Ваш ответ пригодится не только мне.
...
Рейтинг: 0 / 0
28.09.2020, 06:49
    #40003182
mad_nazgul
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
student42

Вопросы:
1. Как гарантировать консистентность данных в разных хранилищах?
2. Как элегантно в связке Hibernate/Spring передавать изменения в ElasticSearch?


Сага и Event Sourcing ?!
<:o)
...
Рейтинг: 0 / 0
28.09.2020, 08:16
    #40003201
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
student42,
Что значит плохое?
В java нет одного золотого решения.
Вот решение выше с микросервисами))
Вы бы хотя бы 5 минут почитали про инструмент поиска.
Или гугл на слово "синхронизация".
Без микросервисов есть паттерн OLAP/OLTP
Когда есть бд только для чтения. И она догоняет всегда бд текущую оперативной работы.
Для этого ничего не надо ставить дополнительно.
Ни контейнеров, ни микросервисов, ни server messenger
...
Рейтинг: 0 / 0
28.09.2020, 08:31
    #40003202
PetroNotC Sharp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
student42,
авторТребуется реализовать механизм поиска данных (по достаточно большому) объему данных. С учетом того
что PG горизонтально плохо масштабируется было принято решение использовать для этого ElasticSearch (Rest client).
Не логично и анекдотично пишите.
Что такое горизонтальное масштабирование навернов PHP лучше знают.
https://habr.com/ru/company/oleg-bunin/blog/319526/
Лучше бы написали - бд плохо ищет. Было бы логичнее.
...
Рейтинг: 0 / 0
28.09.2020, 09:29
    #40003214
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
student42

1. Как гарантировать консистентность данных в разных хранилищах?

Что бы гарантировать, надо что бы был драйвер PostgreSQL и Elastic поддерживали XA. Бегло поискав в гугле, рядом стоящими слов Elastic + XA лично я не увидел.

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

Лучше бы написали - бд плохо ищет. Было бы логичнее.

+100500
...
Рейтинг: 0 / 0
28.09.2020, 11:08
    #40003252
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
student42
Доброго вечера!

Имеется некотрое приложение приложение:
- SpringBoot2
- Hiberante (ORM)
- PostgreSQL

Требуется реализовать механизм поиска данных (по достаточно большому) объему данных. С учетом того
что PG горизонтально плохо масштабируется было принято решение использовать для этого ElasticSearch (Rest client).

Вопросы:
1. Как гарантировать консистентность данных в разных хранилищах?
2. Как элегантно в связке Hibernate/Spring передавать изменения в ElasticSearch?

P.S. Я понимаю что в конце методов CustomerServiceImpl.customerCreate() или CustomerServiceImpl.customerUpdate()
можно передавать данные в ES. Но подозреваю что это плохое решение.


Поделитесь пожалуйста опытом. Как подобную задачу решали вы?

Заранее благодарю!

P.P.S Надеюсь Ваш ответ пригодится не только мне.


Такс. а теперь попридержи коней.
Попробуй разобраться что тебе конкретно нужно, по большей части с точки зрения бизнес-логики. У тебя есть два варианта.
1) Чтобы система работала абсолютно консистентно. То есть если данные появились в одной системе(PG) то сразу же должны быть отражены в другой. Не спеши с ответом, может тебя устроит что данные появятся в ES через 2 секунды после инсерта в PG? Ну или 10. Если тебятакой вариант не устраивает - значит скорее всего тебе ES и не нужен, все что ты можешь выиграть на так называемой масштабируемости, ты проиграешь в производительности. Ибо кроме как распределенными транзакциями ты это не сделаешь, и это будет долго, больно и дорого. Но выполнимо.
2) Ты можешь жить с eventual consistency. И хоть это и размытый термин, но смысл в том, что читающий ES будет видеть согласованную картину(если в системе нету записи, то нет и той что произошла после нее), хотя она возможно будет немного "запоздалой". В этом случае есть множество вариантов, начиная от вызова триггера в PG который вызывает ES, до евент сорсинга и батчинга. Вот тут можешь почитать варианты - https://stackoverflow.com/questions/41456752/would-using-transactions-to-make-sure-elasticsearch-and-postgres-data-are-sync-a

Но в целом, тебе надо понять что это ограничение фундаментально. Невозможно сделать быстрый и консистентный вторичный индекс в распределенной системе. Либо ты теряешь в скорости либо в консистентности. Так что начни с того что определись что тебе реально надо
...
Рейтинг: 0 / 0
28.09.2020, 12:25
    #40003305
Kachalov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
student42
Как элегантно в связке Hibernate/Spring передавать изменения в ElasticSearch?

- насчет "элегантно" не уверен, но есть готовое решение Hibernate Search
...
Рейтинг: 0 / 0
28.09.2020, 12:31
    #40003310
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Синхронизация данных основного хранилища (PG) и ElasticSearch
del
чушь сморозил
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Синхронизация данных основного хранилища (PG) и ElasticSearch / 8 сообщений из 8, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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