Size: a a a

2019 December 23

Е

Евгений in pro.elixir
Alexander Beniaminov
ZREVRANGEBYSCORE - этто и есть оптимизированный LIMIT OFFSET, SELECT не нужен, так как все лежит в памати уже в виде двунаправленного отсортированного по пойнтам списка
в чем оптимизация? Чтобы найти сотую запись, придетсч перебрать первые сто записей, об этом кстати, прямо сказано в описании:
Keep in mind that if offset is large, the sorted set needs to be traversed for offset elements before getting to the elements to return, which can add up to O(N) time complexity.
источник

AB

Alexander Beniaminov in pro.elixir
ну а как иначе? ведь не строить каждый раз индекс по позиции? Перебрать - это пройти по N указателям
источник

Е

Евгений in pro.elixir
Alexander Beniaminov
ну а как иначе? ведь не строить каждый раз индекс по позиции? Перебрать - это пройти по N указателям
тогда нет никакой оптимизации, и для подобных запросов больше подходит zrevrange без byscore
источник

Е

Евгений in pro.elixir
то же самое в psql
источник

Е

Евгений in pro.elixir
Alexander Beniaminov
ну а как иначе? ведь не строить каждый раз индекс по позиции? Перебрать - это пройти по N указателям
насколько я понял, сейчас автор вопроса как раз и пытается строить индекс по позиции
источник

Е

Евгений in pro.elixir
точнее формально не строит, просто сразу располагает записи в нужном порядке
источник

AB

Alexander Beniaminov in pro.elixir
в случае  ZREVRANGE  вам придется  выбирать весь список и самому делать LIMIT OFFSET - вы ведь не знаете текущие значения points
источник

Е

Евгений in pro.elixir
Alexander Beniaminov
в случае  ZREVRANGE  вам придется  выбирать весь список и самому делать LIMIT OFFSET - вы ведь не знаете текущие значения points
зачем весь? там же аргументы есть, min и max
источник

AB

Alexander Beniaminov in pro.elixir
вот их вы и не знаете
источник

Е

Евгений in pro.elixir
Alexander Beniaminov
вот их вы и не знаете
их как раз знаем, это же тот самый top 100-105
источник

AB

Alexander Beniaminov in pro.elixir
Все, я пас
источник

Е

Евгений in pro.elixir
Alexander Beniaminov
Все, я пас
возможно я путаю, zrevrange выбирает по диапазону ключей или таки по диапазону позиций?
источник

AB

Alexander Beniaminov in pro.elixir
ключей
источник

Е

Евгений in pro.elixir
Alexander Beniaminov
ключей
тогда ок, ты прав, он тут не подходит
источник

Е

Евгений in pro.elixir
аналог WHERE по сути
источник

AB

Alexander Beniaminov in pro.elixir
ну это как выдай мне все фильмы с 1945 по 1978 год
источник

AB

Alexander Beniaminov in pro.elixir
точно
источник

Е

Евгений in pro.elixir
Alexander Beniaminov
ну это как выдай мне все фильмы с 1945 по 1978 год
я понял, я просто с редисом очень редко работаю, решил, что zrevrange 10 20 это как zrevrangebyscore -inf +inf 10 20
источник

Е

Евгений in pro.elixir
к сожалению, видимо offset не оптимизируетсч никак, иначе давно бы уже оптимизировали
источник

AB

Alexander Beniaminov in pro.elixir
только +inf -inf  - это REV
источник