Apache Ignite с помощью Posgresql - PullRequest
0 голосов
/ 30 мая 2018

Цель: Чтобы масштабировать существующее приложение, в котором 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. Как насчет, если эта нагрузка удвоится в течение следующего года?

Быстрый ответ очень важен и спасибо заранее.

Ответы [ 2 ]

0 голосов
/ 30 мая 2018

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

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

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

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

0 голосов
/ 30 мая 2018
  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. 120GB не звучит ничего страшного в том, что касается Apache Ignite.

...