У меня есть сервис листинга продуктов, и он выдает список продуктов для зарегистрированных пользователей, и этот список постранично, с десятью продуктами на странице. Я реализовал эту пагинацию с помощью MySQL LIMIT
запроса.
Недавно я получил требование интегрировать его с сервисом релевантности; этот сервис будет предоставлять атрибуты продуктов, относящиеся к текущему пользователю, вошедшему в систему. Мне нужно отсортировать продукты на основе релевантности для пользователя.
var page_no = 0;
var url = "https://relevancy-service-url"
var query = "SELECT * FROM products LIMIT 10 OFFSET page_no;"
var product_list = query -> fetch
var relevent_attributes = api -> get(url, user_id)
Здесь relevent_attributes - это массив, содержащий элементы в следующем формате:
[attribite_1 : 40, attribute_2: 20, attribute_3: 10, attribute_4: 3]
Здесь ключ - это имя атрибута, а значение - рейтинг. На основе рейтинга атрибута мне нужно отсортировать список продуктов.
Каков наилучший способ сортировки этого списка?
Во-вторых, общая производительность предполагает, что вы хотите выполнять пагинацию на сервере базы данных, а не в памяти; просто чтобы избежать необходимости загружать все данные только для того, чтобы затем отфильтровать большую их часть снова.
Это приводит к неизбежному выводу, что вы должны знать свою сортировку заранее, до получения данных, поскольку запрос должен включать конкретный порядок сортировки.