@1q2w1q2w
sudo make install

Какую распределенную базу данных выбрать для проекта на Spring Boot 2?

Необходимо адаптировать существующий проект на Spring Boot 2 c Spring Data JPA 2 (PostgreSQL) под новую архитектуру:
В систему гибко добавляются рабочие места с предустановленным и сконфигурированным ПО (одна и таже программа).
Рабочих мест не более нескольких десятков. С каждого рабочего места за день в распределенную базу данных поступает около 1 миллиона записей (различных сущностей в терминах JPA). База данных должна хранить основную массу данных на диске и может достигать нескольких Тб. Кэш в памяти IMDG(in memory data grid) для каждого рабочего места должен быть способен запросить актуальную информацию у каждого узла (кластера) системы. Возможно, по таймауту данные сбрасываются на диск. Сама база на диске должна бекапиться, чтобы можно было ее развернуть в случае сбоя системы.
Должна быть совместимость с Spring Data 2/JPA/Spring boot 2. Предполагается работа на Windows/Linux.

Из общей массы распределенных баз я выбрал Redis, Apache Ignite и Hazelcast как наиболее популярные и простые в освоении.
Но, насколько я понял, только Ignite имеет возможность сохранять данные на диск( Ignite Persistence) и подходит под вышеуказанные требования. Пробовал добавить сохранение сущностей на Redis - оно работает, но только как in-memory кэш. Мне же нужно, чтобы данные читались из персистентной базы(на диске) и, возможно, какой то объем хранился в оперативной памяти (для часто используемых элементов, или для последних добавленных).
1) возможно ли использование Redis с поставщиком персистентности в виде PostgreSQL? Или есть еще какие то способы заставить редис работать как описано (сбрасывать накопленные данные из оперативки на диск).

Также пробовал использовать Ignite, но последняя версия на данный момент это 2.6, в которой используется Spring Data 1, а мой проект работает на Spring Data 2, поддержка для которого будет добавлена в версии 2.7.
Я скачал nightly build 2.7, но не знаю как установить его в локальный maven репозиторий.
2) Кто нибудь знает как подсунуть скачанный Ignite в проект?

И наконец, оптимальный ли способ организации взаимодействия узлов системы выбран? Какую систему следует использовать в данном случае? Как настроить распределенную базу данных?
  • Вопрос задан
  • 868 просмотров
Решения вопроса 1
Зачем вам распределенная БД для 10 компьютеров и при такой маленькой нагрузке?
Redis умеет персистировать на HDD также как и Ignite https://redis.io/topics/persistence это решается настройками.
Но Ignite при запуске приложения будет прогревать кэши, а это может занять много времени при старте приложения. При этом Ignite делать бэкапы на соседних нодах для отказаустойчивости и все это хранится в ОЗУ.
Представляете какую инфраструктуру держать нужно и насколько ее непросто профилировать, отлавливать ошибки и др. по сравнению с реляционной СУБД.
Я уже молчу про консистентность данных в кэшах, посмотрите как сложно делаются простые вещи:
https://www.youtube.com/watch?v=YQGmJt_UP0E
При этом зачем привязываться к JPA. Нужно посмотреть, как часто он для ignite поддерживается. И не отомрет ли совсем. У Ignite и так неплохой API на Java.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы