Мне нужно разбить на страницы (ограничение + смещение ) результатов нескольких запросов с высокой производительностью.
Сначала я имитировал разбиение на страницы с помощью генератора питона
first = 100
# Offset
skip = 50
cursor = 0
# Generator is returned by neo4j so we don't have a significant performance impact
q1_results = tx.run(.....)
q2_results = tx.run(.....)
for result in q1_results:
if cursor < first:
yield result
cursor += 1
for result in q2_results:
if cursor < first:
yield result
cursor += 1
Однако проблема здесь заключается в принудительном выполнении смещения: чтобы достичь его программным путем, мне придется повторить итерации по первым результатам и сделать это следующим образом:
first = 100
# Offset
skip = 50
cursor = 0
skip_cursor = 0
# Generator is returned by neo4j so we don't have a significant performance impact
q1_results = tx.run(.....)
q2_results = tx.run(.....)
for result in q1_results:
if cursor < first & skip_cursor > skip:
yield result
cursor += 1
else:
skip_cursor += 1
for result in q2_results:
if cursor < first & skip_cursor > skip:
yield result
cursor += 1
else:
skip_cursor += 1
Затем я попытался объединить запрос в один большой запрос, но для этого потребовались агрегирующие функции (например, collect
и distinct
), поэтому это оказало огромное влияние на производительность, и запросы стали очень медленными.
Мне интересно, что я что-то упустил и есть ли правильный способ добиться нумерации страниц в этом сценарии.