Viktar
Почему будут пропускаться?
Narek
Почему будут пропускаться?
Потому-что если грубо говоря у тебя подряд десять записей с updatedat=100, ты получил первый такой и сделаешь ge 100 он про пустит остальные девять
Viktar
Я не совсем понимаю вашу задачу. Вывести документы отсортированные по апдейту + пагинация?
Narek
Да, при этом чтобы если мы дошли до конца и у какого-то документа обновился updatedat - можно было следующим чтением получить его
Viktar
Narek
Ну
Viktar
Если у вас 100 документов с одинаковым апдейтом, то выведется все 100
Narek
А если я хочу доставать по 5 штук?
Viktar
Так делайте скип и лимит.
Narek
Это медленно)
Viktar
Сделайте индекс на поле)
Viktar
Плюс кеш, по схеме что я описывал выше
Narek
Индекс не поможет при скипе
Narek
Скип за o(n) работает, это медленно
Viktar
Не быстро, но сразу скажу, если вы передвигается по курсору больше 5-6 страниц, и вам это реально надо, что бы это было мгновенно, то что то вы с архитектурой не то сделали.
Vladimir
Viktar
Грузите в кеш например. Или используйте инмемори дБ.
Narek
Narek
Например в нашем случае это нужно чтобы синхронизировать записи в монге и в эластике
Narek
Narek
Narek
Достаточно неконсистентно
Vladimir
Narek
Система конечно
Narek
Вероятность ненулевая
Viktar
Почему не консистентно? Оборачиваете код в транзакцию и пишете и туда и сюда, иначе откатываете.
Vladimir
Система конечно
ну понятно ,что в базу пишет не человек. но в конечном итоге кто делает изменения в документах?
Narek
Narek
Viktar
Транзакцию делаете в коде который пишет изменения. Не в монге.
Vladimir
Тоже система
ну ок тогда. можно тогда в updateAt вместо времени ObjectID делать :) он в себе и время содержит и монотонно возрастает
Viktar
Вернее и в монге, но это уже низкоуровневая транзакция
Narek
Narek
Narek
Я правда не очень понял, судя по документации objectid это 4 байта на время, 5 рандомных и 3 - инкрементальный каунтер
Narek
Если порядок именной такой, то из-за рандомных значений тоже может произойти «запись в прошлое»
Narek
Почему, как раз решит
Viktar
Каким образом? Тот же скип лимит придется применять
Narek
Нет, ge
Narek
Objectid гарантирует что одинаковых значений не будет
Viktar
Хорошо, у вас будет 100 документов больше, а вам надо по 5
Narek
Ну лимит сделаем
Narek
Скипа то не будет
Narek
Лимит не дорогая операция, скип дорогая
Viktar
20 курсоров будет?
Narek
С чего бы?
Viktar
Тогда как вы пейджинг сделаете по этим 100 записям?
Narek
Да в смысле? Достаешь первые 10, сохраняешь значение updatedAt последнего в курсор
Narek
Потом делаешь ge по этому курсору
Narek
И так далее
Viktar
)) это будет новый курсор
Narek
А, в этом смысле
Narek
Ну да, так работает пагинация курсорная
Viktar
Это пейжин запросом. Он будет медленнее чем скип на существующем.
Narek
Нет конечно
Viktar
Этот метод, что вы описываете это инкрементная загрузка. Она подходит для етл процессов с большим количеством записей. Обычно это называют батчами. Пейджинг это обычно для вывода используют.
Viktar
Да для большого объема данных, что бы побить на батчи этот способ лучше.
Narek
Для вывода пользователей это тоже лучше
Narek
Пагинация курсорами всегда будет аутперформить пагинацию по лимит офсет
Narek
Плюс не будет проблем с дублями
Alexander Cheprasov
Всем привет! Реябята, помогите пожалуйста, 4 часа мучаюсь с проблемой, уже не знаю что делать......
Alexander Cheprasov
Alexander Cheprasov
уже удалял коллекцию, потом удалял таблицу, потом удалял полностью mongo .... в чем может быть тут проблема?
Viktar
Alexander Cheprasov
так все уникальное((
Alexander Cheprasov
у меня в схеме только одно поле уникальное text
Alexander Cheprasov
cookie.predictions index: usersRated_1 dup key: { : undefined }
можете ее расшифровать эту ошибку?
Viktar
В уникальном индексе usersRated_1 дубликат
Viktar
Подозреваю он у вас по полю usersRated.
Viktar
Там стоит у вас свойство уникальности
Alexander Cheprasov
usersRated - удалил как уникальный, все равно ошибка сохраняется
Я уже пробовал в схеме оставлять только текст, все равно ошибка
Alexander Cheprasov
db.dropDatabase() после внесения правок в схему помогло
Alexander Cheprasov
Как я понял индексы живут всегда, не зависимо есть они в схеме или уже нет?