Как ограничить количество выборок из базы данных (РЕДАКТИРОВАТЬ: Использование нумерации страниц)? - PullRequest
0 голосов
/ 26 сентября 2019

Так что я не знаю, имеет ли мой заголовок смысл, но я надеюсь, что смогу объяснить его лучше здесь:

У меня есть этот код:

let rsps = await Promise.all([
    fetch(`/api/trace?id=${task.ID}`),
    fetch(`/api/trace?parentid=${task.ID}`),
    fetch(`/api/trace?where=${task.Where}`),
    fetch(`/api/trace?kind=${task.Kind}`),
]);

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

Мой вопрос: возможно ли установить ограничение на количество точек данных, которые он должен получить?Как, например, сделать цикл for, чтобы закончить, сколько точек данных я хочу?Я хочу сказать, что из 4000 возможных точек данных, которые он может извлечь, можно выбрать только первые 200 или около того.Возможно ли это?

Спасибо

1 Ответ

2 голосов
/ 26 сентября 2019

Вы должны использовать нумерацию страниц.Таким образом, возможный вызов выборки может быть:

/api/trace?id=${task.ID}&page=1&per_page=20

Это означает, что вы хотите получить первые 20 результатов из базы данных.

/api/trace?id=${task.ID}&page=2&per_page=20

Это означает, что вы хотите всегда получать 20 результатов, начиная с 21-го.строка набора результатов из базы данных).

Итак, page позволит вам создать смещение для запроса к базе данных.

Смещение определяется в вашем бэкэнде следующим образом:

offset = page * per_page - per_page.

Итак, согласно переданным параметрам выборки, вВо втором примере, который я привел, смещение будет:

смещение = 2 * 20 - 20 = 20

В этом случае ваш запрос к базе данных должен быть:

SELECT ....
.....
LIMIT 20 OFFSET 20;

(я хочу получить 20 результатов из 21-й строки набора результатов из базы данных)

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

...