Vadim
Заметил что недавно добавленные пользователи находятся быстро, а старые медленно
Vadim
да вот запрос let user = await User.findOne({_id:user_id}).exec();
Vadim
пробовал, не помогло
Alchemist
Можно ли шардировать коллекции по элементу в массиве?
Vadim
я пробовал findById но проблема осталась, старые пользователи ищутся медленней Если недавно добавленный находится за 0,060 с, то старый 1 сек, В базе около 300 записей
Alchemist
Например { _id: '8192471', set: [ { token: '123' }, { token: '345' } ] }, { _id: '8192472', set: [ { token: '789' } ] }
Alchemist
На поле token есть индекс
Alchemist
Можно ли шардировать коллекцию по нему?
Nick
интересный вопрос, видимо охото пострелять себе в ногу. как вы себе представляете куда отправить балансер ваш док, если значения внутри массива будут в разных диапазонах?
Nick
монга выгружает не используемые данные обратно на диск и подгружает только при необходимости, вот ваши юзеры и лежат на дисках
Nick
если они тянутся редко - то легко могут улететь на диск
Nick
и мы не знаем еще какая стурктура у юзера, может он 10 метров там весит
Nick
опять же индексы так же могут быть свопнуты на диск
Nick
на самом деле легко првоеряется, деалется просто два запрсоа подряд, если второй запрос отрабатывает мгновенно - то значит монга вываливает на диск
AstraSerg
ага, точно! хороший тест. Я вот только не могу себе представить, что б запрос к коллекции в 300 документов занимал секунду
Nick
если диски выбиты по IO то изи
Nick
опять же - дешевый хостинг не честно выделяющий io или вообще подрезающий
Nick
куча факторов, которые могут все затормозить. да даже пресловутая ошибка самого способа измерения времени запроса
AstraSerg
@vosyukov Всё вам на заметку :)
Nick
может в сети дроп пакетов 90% и слава богу что вообще хоть чтото отвечает
Nick
так ведь и не 100% дроп)
Nick
это так разминка для мозга понапридумывать причины. в реальности все как правило банально
AstraSerg
так ведь и не 100% дроп)
тогда правльнее охарактеризовать дроп не "90%", а "периодически большой"
Nick
наверное да, просто так сразу нагляднее и понятно о чем речь
M
Привет) может кто подскажет в какую сторону смотреть, нужно найти друзей пользователя (их количество), друзей друзей пользователей (их количество) и вернуть в форме друзья: кол-во, друзья друзей: кол-во. Не понимаю как такое сделать, может рекурсией какой? Я представлял что-то вроде aggregate $match: $in: userid, $project: friends: $$root И далее не знаю
M
В какую сторону смотреть вообще, чтобы выполнить два раза $match и сформировать в ответ типа $match1: results, $match2: results
Yaroslav
Хай товарищи монговоды , подскажите по админской части : Есть кубер в нем монга без реплика сета , сделал реплика сет (1 primary 2 secondary ). Реплика сет при старте поднимается чистый, без данных , я с помощью mognorestore раскатываю дамп на primary ноде , насколько я корректно делаю и можно ли обойтись без этого ? У меня не получилось в кубере настроить PVC и реплика сет не видит старых данных или для реплики сета такое поведение нормально ?
Yaroslav
и если накатывать дамп то правильно я понимаю что сначало поднимаем primary ноду > накатываем дамп на нее > затем только поднимаем secondary ноды ?
Yaroslav
Данные не должны теряться Инструкция здесь: https://docs.mongodb.com/manual/tutorial/deploy-replica-set/
даа там готовые чарты кубера , я сам ручками эту дичь не настраивал , чисто через конфиги включал отключал опции , но похоже проблема все таки pvc в самом кубере . а насчёт раскатывания спасибо надеюсь на проме все будет ок )
ep4sh
какой аналог в mongo primary_key Auto increment? собственно не понимаю, как выглядит мало-мальски энтерпрайз БД, не тащятся же записи чисто по текстовым полям?
yopp
Можно руками, на атомарном inc, монотонно возрастающий счетчик сделать
ep4sh
ххмммм, окау, запилил я такой таблицу с видами сыров и делаю вывод юзеру: 5ba13f7fc22819d582b15eab | Голландский | 399 руб 5ba13f7fc225454a5211fca11| Российский | 500 руб 5ba13f7fc225454a5211f2222| Российский | 600 руб И тут произошел крах человечества и Российский за шесть драных соток (!!!!!) перестал существовать, и надо его удалить. Я как вижу в SQL: DETELE from cheese where id=5ba13f7fc225454a5211f2222 А в mongo не вижу, направьте То ли этот ужасный oid таскать, то ли в моем чердаке проблемы со структурами устройства мира (что вероятно!!!)
ep4sh
Простите, коллекцию :))
ep4sh
таблицы пусть в mysql живут
yopp
Да, таскать object id
ep4sh
yopp
Вы можете его с более высокой базой кодировать. Например в base63
yopp
Он будет визуально короче.
ep4sh
}{ммм
ep4sh
Хм
ep4sh
Спасибо за ответ)
ep4sh
В теории, можете и не «таскать». Вы же сами говорите: пропал Российский за 600 рублей, вот и удаляйте {name: "Российский", price: "600 руб"}
Хммм, у меня нет большого опыта, вот родился вопрос: при работе клиентского приложения не произойдет каких косяков?
ep4sh
Хотя в принципе...эти данные достаточно определяют уникальность элемента...
ep4sh
Верно?
ep4sh
Даж если будет два сыра Российских по 600... тогда разные производители... ведь не бывает, что полностью одинаковые сущности с разным oid
ep4sh
🤔
Alex ZeroDub
Бывает и так. Зависит от бизнес логики.
AstraSerg
Верно?
Именно. Зачем притягивать синтетический идентификатор, если есть исчерпывающее определение без него?
ep4sh
хахха) у меня крутое ощущение как будто жил до этого дня и не знал а теперь увидел и прозрел
ep4sh
А где-нибудь можно глянуть примеры готовых mongo-баз (используемых в Ынтерпрайзе)
ep4sh
ну или просто в обиходе
AstraSerg
Буду у компа, смогу дать несколько линков.
ep4sh
Буду у компа, смогу дать несколько линков.
Буду премного благодарен еще сам погляжу сейчас
Constantin
Именно. Зачем притягивать синтетический идентификатор, если есть исчерпывающее определение без него?
Синтетический id нужен для того, чтобы при изменении предметной области или бизнес-логики их было проще менять
AstraSerg
Буду премного благодарен еще сам погляжу сейчас
Не знаю на сколько юзабельная, но реальная: https://s3.amazonaws.com/edu-downloads.10gen.com/enron/enron.zip Описание: Enron was an American corporation that engaged in a widespread accounting fraud and subsequently failed. In this dataset, each document is an email message. Like all Email messages, there is one sender but there can be multiple recipients.
Alchemist
Как происходит апдейт на шардированной коллекции, если в условии не то поле, по которому шардировалась коллекция?
Alchemist
Есть где про это почитать может?
yopp
https://docs.mongodb.com/manual/core/distributed-queries/#write-operations-on-sharded-clusters
Alchemist
спасибо
Yaroslav
здравствуйте, Товарищи монговоды ! есть инстанс монги версия 3.4 есть реплика сет 4.0 Могу ли я добавить инстанс монги в реплика сет и назначить этот инстанс primary нодой без остановки этого инстанса и реплика сета, на горячую короче ?
Bro
хм что-то туплю
Bro
$nin and $ne queries cannot be answered by indexes, and force collection scans. If you need to use these ensure you are filtering down using indexes as much as possible and leaving the $nin and $ne terms to the very last part of the query selector.
Bro
действительно так?
Bro
селекты по 100м коллекции с $ne занимают несколько миинут
Bro
эксплэйн показывает что идет сканирование коллекции