Roman
как дешево ордербаить
Roman
у меня там не индексировано ничего дельного
Roman
у меня идет "кое какой" процесс и он может встать, и я хочу его продолжать, но продолжать, просто по индексу в выдаче доков моей, но так вроде совсем неправильно, и вы будете меня ругать и дебилом назовете
Roman
а маркировать каждый док который прошел "кое какой" процесс я чет не хочу
Roman
доступное и понятное объяснение?
Roman
влияет ли индексация на скорость ордербая? 🤔🤔🤔🤔🤔🤔🤔
Nick
т.е. вместо стабильного решения с флагом обработки, вы хотите опираться на какойто порядок?
yopp
без индексов сортировка это вообще катастрофа
Roman
используйте порядок по _id
спасибо за очередной хинт
yopp
но надежнее использовать флаг
Roman
и превратить каждый документ в мусор :(
yopp
почему в мусор-то? если вам важна гарантированная обработка документа, вам в любом случае надо сохранять состояние обработки документа
Roman
то есть мне придется вводить поддокумент: shitTasks: [ { taskId: 'rf4387hfuh', done: true } ]
Roman
и делать дорогую выборку
yopp
https://docs.mongodb.com/manual/reference/operator/query-bitwise/
yopp
и используйте старые добрые флаги
yopp
одно поле tasks: Int
yopp
и выборки по маске
Roman
мне надо два поля видимо pendingTasks, doneTasks
yopp
0 pending, 1 done
Nick
мне надо два поля видимо pendingTasks, doneTasks
вам видимо нужны очереди, а не в базе это делать
Roman
вам видимо нужны очереди, а не в базе это делать
в базе нужно на случай падения скрипта
Roman
я работаю с нестабильными вещами к сожалению
Roman
и некоторые процессы занимают от нескольких часов до нескольких суток
yopp
8 бит это много 0 и 1, 0b0000_0000, на него кладём маску 0b1000_0000 и получаем состояние первого бита
yopp
если бит 0, значит pending, если 1 значит уже done
Nick
в очередь кладется сообщение - отправить аткойто док, посылатель вытаскивает, берет его из базы, если там данных ну оч много и в очередь не резон сохранять, и отправляет, если ок - удаляет из очереди
Nick
если для обработки необходим малый набор данных из сообщения, то все оно пихается в очередь
Roman
я глупый короче
Roman
я все понял
Roman
мне нужно по одной записи отбирать раз в 30 секунд, если я буду делать find, то он довольно шустро работать будет
Roman
мне не надо массив документов
Nick
давайте так, операция разовая или частая? по всем данным или только по новым спрошлого раза?
Roman
операция разовая, изначально по всем, в случае краша, нужно продолжить
Roman
таким образом я просто буду вешать флаг и выбирать где он есть по 1 доку
Roman
пока не получу null
Roman
таким образом в случае краша не запишется флаг, и я продолжу откуда надо
Roman
даже без ордера, порядок отбора доков мне не важен
yopp
и убедитесь что у вас операции индемпотентные
yopp
это сильно выручает
Roman
и убедитесь что у вас операции индемпотентные
не знаю что у меня может быть неиндемпотентного, таск создаю 1 раз, с уникальным ид, ничего не должно вроде бы пойти не так, запуск параллельного таска не даст никакого сбоя, всё будет привязано если речь об этом, одни и те же флаги не будут трогаться
Slava
я тут наткнулся на такое видео https://youtu.be/ZdYTPTQiXwc, в котором утвержадется, что в 4-й монге подтюнили балансировщик, и теперь миграция чанков на 40%(sic!) быстрее, интересно насколько это близко к реальности?есть у кого кластер с 4й монгой в проде?
yopp
там большая часть времени не передача данных, а непойми чо
Slava
вот и меня смутила такая цифра
yopp
я к тому что 40% быстрее это очень мало
yopp
на маленьких чанках особенно заметно насколько неэффективный этот процес
yopp
но вообще это легко проверяется через mlaunch
yopp
но я почти уверен что они на пустых чанках и меряли :)
Slava
но я почти уверен что они на пустых чанках и меряли :)
обычно когда говорят про скорость/производительность, прикладывают тесты, и/или описание как воспроизвести их mlaunch - это вот оно http://blog.rueckstiess.com/mtools/mlaunch.html ?
yopp
да, из mtools
yopp
обычно когда говорят про скорость говорят ВТЫЩУ РАЗ БЫСТРЕЕ и всё
yopp
а на тестах потом блоггеры зарабатывают :))))
Max
ксттаи, про чанки вопрос (опять из теории). если создать коллекцию, нарезать самостоятельно чанков и ждать, пока они разъедутся по шардам - ну это дня три занимает, 65к чанков. так вот, а что если пойти в config коллекцию да руками понаобновлять шард?
Max
то есть заранее известно, что коллекция пустая, никакие там rangeDeleter-ы и прочее не нужны. update и всё. в моём понимании же дложно работать.
yopp
там есть какие-то нюансы в коллекции когда она шардированная
yopp
там точно была какая-то штука которая следит за размерами чанков
yopp
можно конечно попробовать нарезать на всех нодах, а потом удалить ненужные
yopp
но тут могут быть нюнасы
yopp
и сюрпризы
Max
размер - что в данном случае? мегабайты? так мы говорим про нули :) Пока еще документов в коллекции нет. ...у меня нарезаются чанки часа за полтора. оно как бы заранее всё это делать можно, но ждать, когда расползутся пустые (!) чанки ну както неоправданно долго. потому и было интересно :) Вроде ж монгос посморел, в какой range попал - туда и пошёл. и за миграциями лежат всякие красивости - локи, проверки, вычищалки, вот это всё. на пустой коллекции можно пренебречь теоретически :)
yopp
я же и говорю, у коллекции есть менеджер чанков
yopp
не у монгоса, а у коллекции
Max
А что такое "менеджер чанков" у коллекции? это чтото внутреннее? или есть про это почитать?
yopp
да, это детали реализации chunk split
yopp
в исходниках читать
yopp
но не надо
yopp
ответ на ваш вопрос: это не поддерживается базой данных
yopp
попробовать можно, но вы это на свой страх и риск :)
yopp
гораздо проще не делать сразу 64к чанков, а сделать несколько и потом поделить их дальше на каждой из нод
Max
надо будет попробовать, спасибо.
yopp
сделать по количеству нод, каждый двинуть на нужную ноду руками и там уже шинковать
Max
руками при отставании реплики тоже не двигается проверено.
Max
но идея ясна, надо будет опыты поставить.
Max
кстати, а както можно от system.session избавиться?
yopp
зачем?