Max
да и я пока юзаю много где монгузовский populate. ... хз как оно на нём работает
Yurii
да и я пока юзаю много где монгузовский populate. ... хз как оно на нём работает
популейт работает быстрее, чем $lookup, так что не парся
Max
популейт работает быстрее, чем $lookup, так что не парся
а мне говорили что наоборот - что агрегейшен фреймворк работает шустрее - так как на уровне БД-шки
Max
ну из-за того, что нет индексов, скорее всего, монга пробует закешировать твои выборки, забывает память и своп, вот и получаешь проседание. Да, select - обрезает на момента базы, это правильно. Добавь ещё всюду lean, где нет изменений.
а про индексы - по какому принципу их сейчас добавлять если я не знаю где в итоге они реально будут нужны.? я планировал запилить стресс-тесты, но пока рано
Yurii
а мне говорили что наоборот - что агрегейшен фреймворк работает шустрее - так как на уровне БД-шки
да, сам агрегейш фреймворк работает быстрее, но populate агрегированных данных - лучше $lookup
Yurii
да, сам агрегейш фреймворк работает быстрее, но populate агрегированных данных - лучше $lookup
с этим у нас тоже был перформенс ишью, выборка длилась около 5 секунд, а когда убрали лукап внутри монги и делали популей уже полученой выборки (50 итемов), то с популейтом скорость стала 0.6 секунды
Max
"но populate агрегированных данных - лучше $lookup" - странно, почему так то?
Max
я вообще хотел запилить аггрегированые вюшки в потрохах которых буде лукап
Max
что бы не делать туёву кучу популейтов
Max
я вкурсе уже)
倫太郎
А lookup исполняет монга
倫太郎
У меня все на lookup, по мне так удобнее
Max
Yurii , спасибо, буду ковырять)
Yurii
тип лукап работает на всех данных коллекций?
работает на всех, но когда ты делаешь популейт - он делает один запрос в базу - find({_id: {$in: [ids]}}) а lookup на каждый документ делал дополнительный запрос (до 4 версии точно, сейчас не изучал). Тем самым популейт разруливает тем, что потом в памяти связывает полученные объекты
Konstantin
Всем привет! Есть вопросы про шардинг. Имеется система учета статистики посещения сайтов и ее БД. Ожидается очень активный рост количества сайтов в системе, отсюда встал вопрос масштабирования заранее. Важное условие: все запросы к БД всегда выполняются по одному сайту. В данный момент id сайта имеет тип int, растет инкрементально. Насколько я понимаю, логично сделать shard key из id сайта или на его основе. Вопросы: 1. инкрементально растущий int в качестве shard key - допустимо или плохо? в принципе, есть возможность замапить его на guid например. 2. при добавлении нового шарда нагрузка отбалансируется автоматически? и к чему стремится баланс: к разделению диапазона shard key на равные диапазоны? или учитывается нагрузка на каждый шард и распределяется равномерно она? можно ли как-то влиять на процесс распределения (например указывать диапазон значений shard key для шарда)? Заранее извиняюсь, вопросы возможно очень нубские, поэтому буду рад даже если просто ткнете в ссылки/книги.
Nick
Всем привет! Есть вопросы про шардинг. Имеется система учета статистики посещения сайтов и ее БД. Ожидается очень активный рост количества сайтов в системе, отсюда встал вопрос масштабирования заранее. Важное условие: все запросы к БД всегда выполняются по одному сайту. В данный момент id сайта имеет тип int, растет инкрементально. Насколько я понимаю, логично сделать shard key из id сайта или на его основе. Вопросы: 1. инкрементально растущий int в качестве shard key - допустимо или плохо? в принципе, есть возможность замапить его на guid например. 2. при добавлении нового шарда нагрузка отбалансируется автоматически? и к чему стремится баланс: к разделению диапазона shard key на равные диапазоны? или учитывается нагрузка на каждый шард и распределяется равномерно она? можно ли как-то влиять на процесс распределения (например указывать диапазон значений shard key для шарда)? Заранее извиняюсь, вопросы возможно очень нубские, поэтому буду рад даже если просто ткнете в ссылки/книги.
1. инкремент - оченб плохо, про это написано в доке по выборку ключа, если не будет вариантов, то монга поддерживает автохеширваоние без изменения самого типа ключа https://docs.mongodb.com/manual/core/sharding-shard-key/#monotonically-changing-shard-keys https://docs.mongodb.com/manual/core/hashed-sharding/ 2. да начнет балансирвоаться само, если собственно включен балансинг - его можно выключать как весь, так и для отдельных коллекций. баланс стремится только к равному количеству чанков, т.е. предполагается, что у вас все равномерно распределено по диапазонам и нет перкосов - это достаточн осерьезная пробелма если у вас данные очень неравномерны по наргрузке и может сложиться ситуация что все горячие данные на одном шарде. монга будет бить на чанки когда они достигнут одного из двух событий - размер выше порога либо количество доков выше опредленного порога. Но тут нужно понимать, что если чунк уже содержит один ключ и его нельяз разделить, то данный чанк будет помечен фагом jumbo и перестанет кудалибо перемещаться. Влиять на распределние можно - есть понятие зон https://docs.mongodb.com/manual/core/zone-sharding/, да и вообще можно ручками/скриптами перекидывать чанки между шардами - ест ьспец команды
Konstantin
1. инкремент - оченб плохо, про это написано в доке по выборку ключа, если не будет вариантов, то монга поддерживает автохеширваоние без изменения самого типа ключа https://docs.mongodb.com/manual/core/sharding-shard-key/#monotonically-changing-shard-keys https://docs.mongodb.com/manual/core/hashed-sharding/ 2. да начнет балансирвоаться само, если собственно включен балансинг - его можно выключать как весь, так и для отдельных коллекций. баланс стремится только к равному количеству чанков, т.е. предполагается, что у вас все равномерно распределено по диапазонам и нет перкосов - это достаточн осерьезная пробелма если у вас данные очень неравномерны по наргрузке и может сложиться ситуация что все горячие данные на одном шарде. монга будет бить на чанки когда они достигнут одного из двух событий - размер выше порога либо количество доков выше опредленного порога. Но тут нужно понимать, что если чунк уже содержит один ключ и его нельяз разделить, то данный чанк будет помечен фагом jumbo и перестанет кудалибо перемещаться. Влиять на распределние можно - есть понятие зон https://docs.mongodb.com/manual/core/zone-sharding/, да и вообще можно ручками/скриптами перекидывать чанки между шардами - ест ьспец команды
благодарю! ясность появилась, пойду вдумчиво читать ссылки
Nick
мониторьте нагрузку на сервер монги для начала, если не будет ясности, то уже саму монгу
Andrew
На сервере посмотри iostat -kx 3
Andrew
Процент утилизации диска если близко ко 100, то серв не справляется
Andrew
Ну контейнер все равно к диску закреплен, можно на сервере, где докер посмотреть диски
Andrew
Процессор
Andrew
А count по всей коллекции?
Andrew
Или с запросом
Andrew
А сорян
Andrew
Вижу
Andrew
Индекс же есть?
Andrew
Еще одна штука, которая очень помогает ускориться если диск не справляется кидать индексы и файлы на разные тома
Andrew
В конфиг файле указывается что индексы в отдельную папку, а в этой папке символическая ссылка на другой диск
Andrew
Мне лично такой подход помог разгрузить сервер даже с большей нагрузкой
Andrew
В общем чтобы понять нужно знать какая утилизация диска, сколько процессор жрет
Nick
"version" : "4.1.3",
Nick
это что за зверь?
Nick
а постабильнее не хотите?
Nick
прост 4.1 девелоперская ветка
Nick
какие нормы? ищите что заявлено производителем и равно ли оно в точности тому что у вас по нагрузке, а так же окружению, свежести дисков и партии
Nick
тогда может какуюто норму и поулчите, а так исключительно нагрузочное тестирвоание под ваш ворклоад на вашем железе с вашими операционками и дровами
Nick
NFS - самое поганое что может быть для БД
Nick
если вы хотя бы индексы перенесете на локальынй диск то получите дикий буст по запросам, которые покрываются индексами
Nick
тут не помогу, знаю что это можно сделать, но сам не делал
Sardor
Ребят, а можно применять этот способ без значений ключей в .project() ? db.collection.find({ 'cuisine' : 'Brazilian' }).project({ 'name' : 1, 'cuisine' : 1 }) Или какие есть альтернативные варианты найти объект в коллекции и взять из него только нужные ключи?
yopp
В collStats. Но изменить их нельзя. Можно сделать симлинки
yopp
Я не уверен, но можно попробовать covered query и count.
yopp
В проекции _id:0, countField:1 и дальше count на курсоре
yopp
В проекции _id:0, countField:1 и дальше count на курсоре
Если это прокатит, поиск может быть на порядки быстрее. Индексы меньше чем коллекция и сканы дешевле.
Sardor
Что значит без назначения ключей в project?
. project же позволяет взять в резалт только нужные ключи, верно? Я не знаю, какие значения у ключей, но хочу взять несколько нужных только на данный момент ключей и их значения, а не весь объект Может, я не понял работу .project()...
yopp
Да, project позволяет отфильтровать ключи. Значение ключа знать и не нужно, только имя ключа. 0/1 это флаг «скрыть»/«показать»
yopp
Или вы хотите скрыть все ключи, кроме конкретного?
Sardor
Или вы хотите скрыть все ключи, кроме конкретного?
Да, например, получить айди юзера, его линк и номер
yopp
Да, например, получить айди юзера, его линк и номер
https://docs.mongodb.com/v3.2/tutorial/project-fields-from-query-results/#return-the-specified-fields-and-the-id-field-only
yopp
Если вы указываете ключи через name: 1, то оно так и работает
Алишер Абдуллаев
¢: { "user": { "_id": "5bdjakfkdks", "title": "Hello World", "course": [ { "_id": "5bdjakdbhd", "name": "Lololo" } ] }} How to remove subdocument course id?
Алишер Абдуллаев
Hi everyone
Алишер Абдуллаев
Remove subdocument, u mean?
Yep, i use mongoose
Алишер Абдуллаев
Sardor
Vadim
всем привет
Sardor
Vadim
https://core.telegram.org/ не доступен
Anonymous
Буду рад, если у кого-то есть годный мануал, по интеграции MongoDB + mongodb (node) + express
Constantin
Буду рад, если у кого-то есть годный мануал, по интеграции MongoDB + mongodb (node) + express
Лучше изучите эти вещи по отдельности, и вам станет ясно как их связать. Проблема такого запроса в том, что Express — это про HTTP API, а mongodb — это про данные. В целом — это два разных слоя в приложении (модели и интерфейса). Модель данных должна описывать процессы приложения и их взаимодействие с данными (в т. ч. базой данных), а Express — это просто библиотека, на основе которой вы даете другим приложениям доступ к методам этих моделей Если очень хочется, то по express mongodb гуглится очень много, в т. ч. вот эта статья. Но рекомендовать ее вам, я не могу
Konstantin
Буду рад, если у кого-то есть годный мануал, по интеграции MongoDB + mongodb (node) + express
Книга есть на эту тему, называется "Стек MEAN". Mongo+Express+Angular+Nodejs
Aga
Здравствуйте господа, небольшой вопрос. [ name: "John", chats: ["first", "second", "third"] Как проверить, чтобы в chats присустовали first и second, без учёта порядка?
Aga
Пробовал $in, но он реагирует, только если first или second Пробовал $eq, но он по порядку судит
Aga
$elemMatch смотрю, кажется нашёл
Artemy
$elemMatch смотрю, кажется нашёл
https://docs.mongodb.com/manual/reference/operator/query/all/
Anonymous
пермач