Apache Ignite с Posgresql

Цель: Для масштабирования существующего приложения, в котором PostgreSQL используется в качестве хранилища данных.

Как может помочь Apache Ignite: У нас есть приложение, в котором много модулей, и все модули используют некоторые общие таблицы. Итак, у нас есть только одна основная база данных PostgreSQL, и она уже находится на больших SSD-машинах AWS. У нас уже есть Redis для кеширования, но, поскольку у нас нет ограничений Redis, это непростые частичные обновления и запросы по вторичным индексам.

Наш вариант использования: У нас есть две большие таблицы, одна для участников, а вторая - для подписок. Это много ко многим отношениям, когда один участник подписан в нескольких группах, и мы поддерживаем подписки в таблице подписок. Размер таблицы элементов составляет около 40 миллионов, а размер этой таблицы составляет около 40 МБ x 1,5 КБ и более ~ = 60 ГБ.

Вызов

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

Моя мысль:

Apache Ignite может помочь предоставить слой кеширования поверх таблицы PostgreSQL, как я прочитал из документации.

  • Теперь у меня есть пара вопросов с точки реализации Посмотреть.

    1. Подойдет ли Apache Ignite в нашем случае? Если да, то
    2. Сохранит ли apache Ignite все данные в ОЗУ объемом 60 ГБ? Или мы можем распределить нагрузку на оперативную память на несколько машин?
    3. При обновлении таблицы базы данных PostgreSQL мы используем python и SQLALchamy (ORM). Будет ли отдельный призыв к Apache Ignite обновить ту же запись в памяти ИЛИ есть ли способ, которым Apache Ignite может синхронизировать его сразу из базы данных?
    4. Достаточно ли поддержки Python?
    5. Есть ли поддержка REST API для взаимодействия с Apache Ignite. Я могу избежать подключения ODBC.
    6. Как насчет того, чтобы в следующем году эта нагрузка увеличилась вдвое?

Мы очень ценим быстрый ответ и заранее спасибо.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
1 240
2

Ответы 2

  1. Да, это должно соответствовать вашему случаю.

  2. Apache Ignite имеет постоянство, что означает, что он может хранить данные на диске по желанию, но если вы используете его только для кеширования, он с радостью сохранит все в ОЗУ.

  3. Есть два подхода. Вы можете делать свои обновления в Apache Ignite (который будет распространять их на PostgreSQL) или вы можете делать свои обновления в PostgreSQL, и Apache Ignite загружает их при первом использовании (извлечение из PostgreSQL). Как вы можете себе представить, последнее работает только для новых записей. Нет поддержки распространения данных из PostgreSQL в Apache Ignite, я думаю, вы могли бы сделать что-то подобное, используя триггеры, но это не проверено.

  4. Есть Сторонний клиент. Я не пробовал. Apache Ignite пока имеет только встроенных собственных клиентов для C++ / C# / Java, другие платформы могут подключаться только через JDBC / ODBC / REST и используют только часть функциональности.

  5. Есть REST API, и он недавно улучшился.

  6. С точки зрения Apache Ignite, 120 ГБ - ничего страшного.

в дополнение к ответу Аламара:

  1. Вы можете хранить свои данные в памяти на многих машинах, поскольку Ignite поддерживает многораздельные кеши, которые делятся на части и распределяются между машинами. Вы можете установить размещение данных и количество резервных копий.

  2. В Apache Ignite есть интересная модель памяти, которая позволяет быстро сохранять данные на диске. Как заявили разработчики Ignite, база данных за кластером будет работать медленнее, чем постоянство Ignite, потому что связь проходит через внешние протоколы.

  3. В нашей компании есть огромный кластер Ignite, который хранит в оперативной памяти гораздо больше данных.

Другие вопросы по теме