Пагинация и фильтрация выполняются, даже если есть только одна таблица, верно?
Итак, я думаю, что вопрос заключается в том, как объединить таблицы между микросервисами.
Я думаю, что люди используют микроуслуги, чтобы избежать объединения таблиц между микро-услугами в максимально возможной степени. Если они не могут, возможно, таблицы не должны разделяться в разных микро-службах вообще.
С другой стороны, иногда вам не нужны стыковые столы для достижения ваших целей. Например, предположим, что у вас есть две таблицы:
-- from hotel information service
create table t_hotel (
id VARCHAR(40) not null,
name varchar(50) not null,
location varchar(50) not null,
CONSTRAINT pk_hotel PRIMARY KEY (id)
);
-- from hotel comment service
create table t_hotel_comment (
id VARCHAR(40) not null,
hotel_id varchar(40) not null,
content varchar(50) not null,
CONSTRAINT pk_hotel_comment PRIMARY KEY (id)
);
Теперь вы хотите реализовать страницу, показывающую список отелей, каждая строка отображает комментарий кол.
____________________________
| name | location | comments |
| foo | foooooo | 2 |
| bar | barrrrr | 3 |
----------------------------
Вы можете осуществить с запросом присоединиться или с двумя API вызовов:
- Вызов информации гостиничных услуг в список отелей.
- Для каждого отеля позвоните в службу комментариев к отелю, чтобы суммировать комментарии.
Может быть, у вас есть озабоченность по поводу проблемы с производительностью N + 1, то вы можете кэшировать отсчитывать комментарии в t_hotel:
-- from hotel information service
create table t_hotel (
id VARCHAR(40) not null,
name varchar(50) not null,
location varchar(50) not null,
comments numeric not null,
CONSTRAINT pk_hotel PRIMARY KEY (id)
);
Каждый раз, гостиница комментарий сервис получить комментарий, он опубликовать HotelCommentedEvent
HotelCommentedEvent {
"comment_id": "id",
"hotel_id": "foo",
"content": "bar"
}
И информационная служба отеля обновляет кэш этого события. Поэтому вы можете реализовать эту функцию с помощью одного запроса таблицы.