Max
да и я пока юзаю много где монгузовский populate. ... хз как оно на нём работает
Yurii
Max
Yurii
Yurii
Max
"но populate агрегированных данных - лучше $lookup" - странно, почему так то?
Max
я вообще хотел запилить аггрегированые вюшки в потрохах которых буде лукап
Max
что бы не делать туёву кучу популейтов
Max
倫太郎
Max
я вкурсе уже)
倫太郎
А lookup исполняет монга
倫太郎
У меня все на lookup, по мне так удобнее
Max
Yurii , спасибо, буду ковырять)
Yurii
тип лукап работает на всех данных коллекций?
работает на всех, но когда ты делаешь популейт - он делает один запрос в базу -
find({_id: {$in: [ids]}})
а lookup на каждый документ делал дополнительный запрос (до 4 версии точно, сейчас не изучал).
Тем самым популейт разруливает тем, что потом в памяти связывает полученные объекты
Max
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
Sardor
Что значит без назначения ключей в project?
. project же позволяет взять в резалт только нужные ключи, верно? Я не знаю, какие значения у ключей, но хочу взять несколько нужных только на данный момент ключей и их значения, а не весь объект
Может, я не понял работу .project()...
yopp
Да, project позволяет отфильтровать ключи. Значение ключа знать и не нужно, только имя ключа. 0/1 это флаг «скрыть»/«показать»
yopp
Или вы хотите скрыть все ключи, кроме конкретного?
Sardor
yopp
Если вы указываете ключи через name: 1, то оно так и работает
Алишер Абдуллаев
¢:
{ "user": {
"_id": "5bdjakfkdks",
"title": "Hello World",
"course": [
{
"_id": "5bdjakdbhd",
"name": "Lololo"
}
]
}}
How to remove subdocument course id?
Алишер Абдуллаев
Hi everyone
Sardor
倫太郎
Sardor
Алишер Абдуллаев
Алишер Абдуллаев
Sardor
Vadim
всем привет
Sardor
Vadim
https://core.telegram.org/ не доступен
Kir
Anonymous
Буду рад, если у кого-то есть годный мануал, по интеграции MongoDB + mongodb (node) + express
Constantin
Буду рад, если у кого-то есть годный мануал, по интеграции MongoDB + mongodb (node) + express
Лучше изучите эти вещи по отдельности, и вам станет ясно как их связать.
Проблема такого запроса в том, что Express — это про HTTP API, а mongodb — это про данные. В целом — это два разных слоя в приложении (модели и интерфейса).
Модель данных должна описывать процессы приложения и их взаимодействие с данными (в т. ч. базой данных), а Express — это просто библиотека, на основе которой вы даете другим приложениям доступ к методам этих моделей
Если очень хочется, то по express mongodb гуглится очень много, в т. ч. вот эта статья. Но рекомендовать ее вам, я не могу
Anonymous
Konstantin
Anonymous
Aga
Здравствуйте господа, небольшой вопрос.
[ name: "John", chats: ["first", "second", "third"]
Как проверить, чтобы в chats присустовали first и second, без учёта порядка?
Aga
Пробовал $in, но он реагирует, только если first или second
Пробовал $eq, но он по порядку судит
Aga
$elemMatch смотрю, кажется нашёл
Aga
Anonymous
пермач