По некоторым причинам масштабируемости я хотел бы разбить запрос SPARQL на конечную точку Stardog. В настоящее время я генерирую несколько запросов с различными параметрами LIMIT и OFFSET. Я не хочу использовать ORDER BY, так как он очень медленный. Однако я не могу понять, гарантирует ли реализация Stardog одинаковые результаты для каждой конфигурации LIMIT и OFFSET.
ps: единственное обсуждение этой проблемы, которое я смог найти в Интернете, — это здесь.





Здесь инженер Stardog. Вы правы, что ORDER BY имеет заметные накладные расходы. Без ORDER BY Stardog не может гарантировать, что порядок результатов будет одинаковым при нескольких запусках с разными значениями OFFSET. Однако, особ. для более простых запросов и при отсутствии изменений данных в целом должно работать именно так.
Обычно Stardog пытается оценивать запросы в ленивой потоковой манере, поэтому часто можно использовать набор результатов постепенно без внешней разбивки на страницы. Если вы поделитесь планом запроса (или, что еще лучше, используете профилировщик запросов), мы сможем помочь с производительностью.
HTTP-сервер Stardog делает это автоматически независимо от запроса (мы используем фрагментированные ответы). Однако верно то, что обычно большая часть серверной работы выполняется для 1-го чанка. Если у вас есть конкретная проблема с производительностью запросов, мы можем обсудить оптимизацию на форуме сообщества Stardog.
Спасибо за ваш ответ. Кстати, у вас есть предложение выполнить разбиение на страницы для большого запроса? В идеале запрос должен полностью выполняться на стороне сервера, а результаты будут передаваться на сторону клиента отдельными порциями.