Как создать реплики чтения из нескольких баз данных postgres в одну базу данных?

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

Я работаю в архитектуре микросервисов, где у нас есть около десятка или приложений, каждое из которых поддерживается своим экземпляром базы данных Postgres (который находится в RDS, если это помогает). Каждая из баз данных микросервисов содержит несколько таблиц. Можно с уверенностью предположить, что между именами схем и таблиц нет конфликтов имен и что в базах данных нет разделения на части.

Одна из проблем, с которыми мы сталкиваемся, - это желание анализировать / объединять данные в базах данных. Сейчас мы полагаемся на сторонний инструмент, который кэширует наши данные и позволяет выполнять запросы к нескольким источникам базы данных (через общий кеш).

Можно ли создать реплики чтения / чтения схем / таблиц из всех наших производственных баз данных и сделать их доступными для запроса в одной базе данных?

Есть ли другие способы настроить Postgres или RDS, чтобы сделать возможным объединение наших баз данных?

1 ответ

Можно ли создать реплики чтения / чтения схем / таблиц из всех наших производственных баз данных и сделать их доступными для запроса в одной базе данных?

Да, это возможно, и это на самом деле довольно легко.

Настройте один сервер Postgres, который действует как мастер.

Для каждого удаленного сервера создайте сторонний сервер, а затем используйте его для создания сторонней таблицы, которая делает данные доступными с главного сервера.

Если у вас есть несколько таблиц на нескольких серверах, которые должны просматриваться как одна таблица в главном сервере, вы можете настроить наследование, чтобы все эти таблицы выглядели как одна. Если вы можете определить ключ "sharding", который идентифицирует отдельный атрибут между этими серверами, вы можете даже заставить Postgres запрашивать данные только с определенного сервера.

Все внешние таблицы могут быть объединены, как если бы они были локальными таблицами. В зависимости от типа запроса, некоторые (или многие) критерии фильтра и объединения могут даже передаваться на удаленный сервер для распределения работы.

Так как Postgres Foreign Data Wrapper доступен для записи, вы даже можете обновлять удаленные таблицы с главного сервера.

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

Другими (более сложными) вариантами являются проект BDR или pglogical. Похоже, что логическая репликация будет встроена в следующую версию Postgres (будет выпущена в конце этого года).

Или вы можете использовать распределенную систему без общего доступа, такую ​​как Postgres-XL (которая, вероятно, является самой сложной системой для настройки и обслуживания).

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