Распределение SQL-запросов по кластеру PostgreSQL

Чтобы улучшить масштабируемость моей базы данных, я хотел бы иметь несколько экземпляров PostgreSQL, распределенных по нескольким машинам. (Горизонтальный шардинг)

Большинство операций, выполняемых в моей базе данных, являются INSERT - есть также несколько случайных SELECT, однако основной упор все еще делается на INSERT, и поэтому база данных быстро растет.

Например: представьте, у нас есть 3 таблицы с именем user, product а также activity(user_id, product_id, activity(viewed, bought...), timestamp),

Люди с деловой точки зрения используют pgAdmin для запроса (пока) уникальной базы данных. Что было бы отличным инструментом, который позволял бы распределять операторы SQL по кластеру и получать уменьшенный набор результатов без необходимости использовать UNION ключевое слово в наших запросах SELECT?

Например, рассмотрим следующий оператор SQL SELECT:

select u.name FROM user AS u INNER JOIN activity AS a ON u.id = a.id INNER JOIN 
product AS p ON p.id = a.id WHERE product.name='blabla';

В идеале для пользователей, использующих pgAdmin, ничего не изменится, но под капотом запрос будет разделен на более мелкие "кусочки" и распределен по всем серверам в кластере.

При поиске в Интернете я наткнулся на PL/Proxy Skype, но этот проект все еще активен? (Тот же вопрос для Postgres-XC.)

Любая помощь будет высоко ценится, спасибо.

1 ответ

Взгляните на pgpool http://www.pgpool.net/docs/latest/pgpool-en.html

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

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