У меня есть кластер postgresql с разными таблицами, находящимися в разных шардах (разные физические серверы postgresql).EG:
shard A + user_group (user_group_id, user_group_name)
shard B + user (user_id, user_group_id (NULL), user_name)
shard C + комментарий (comment_id,user_id, comment_content)
Мне нужно выполнить запросы, которые, если бы все 3 таблицы находились в одном и том же шарде, это выглядело бы примерно так:
SELECT comment_id, comment_content ОТ комментария INNER ПРИСОЕДИНЯЙТЕСЬ к пользователю НА комментарий.user_id = user.user_id ВЛЕВО ПРИСОЕДИНЯЙТЕСЬ к user_group ON user.user_group_id = user_group.user_group_id WHERE user_group_id> 10 И user_name LIKE 'foo%' ORDER BY user_group_name ASC, user_name ASC, комментарий_id ASC
* 1012 будет такой запрос будет выполнен, как ASC *1011* 1012если эти 3 таблицы находятся в трех разных физических осколках postgresql?
Я читал о ссылках, что нужно было бы выполнить объединение на уровне приложения, но я не уверен, как это сделать.Некоторые из сложностей включают в себя: 1. Мощность различных таблиц неизвестна (или может меняться со временем), поэтому на уровне приложений (например, php, python и т. Д.) Мы не будем знать, следует ли нам сначалавыполнить запрос user_group, получить все группы пользователей, затем запросить пользователя, получить всех пользователей и т. д. ... или сначала запросить комментарий, получить все комментарии, затем отфильтровать полученные комментарии по пользователям, затем выполнить фильтрацию по группам пользователей и т. д...
Я ищу общий способ преобразования sql в объединения на уровне приложений, и приведенная выше схема является лишь гипотетическим примером.