yopp
Монговцам пора пилить инструменты для OLAP
Alex
Вам в @dba_ru
я уже там админа мучаю )
Andriy
я вам настоятельно рекомендую распланировать обновление минимум до 3.6
привет, обновил, но проблема так и осталась, какое то время запрос работает, а потом начинает отдавать все результаты
Andriy
3.6
Гена
Искать запросы которые приводят к такой нагрузке. Ну или покупайте подписку, помогу найти https://db-ai.co
Вчера разресерчил Получается у нас база весит не в сжатом виде 30гб ОЗУ у нас 46 гб Помимо этой бд там еще есть, к которым тоже идут запросы Также на севрене замечены аномальные показательи чтения и записи на диск. Получается что монге не хватает кэша из-за того что база разрослась.
Гена
Вы всю базу читаете постоянно?
Среда для тестирование перфоманса. Там идут запросы любого рода. Монгостат показал на апдейт пик 40к
yopp
3.6
В какой момент происходит «потом»?
Гена
Вы всю базу читаете постоянно?
Ну и это не всегда, но в момент нагрузки монго старадает
Andriy
В какой момент происходит «потом»?
не знаю, я обновляю запрос на любой другой, могу убрать какой то параметр, могу добавить, и оно начинает работать и выдавать правильные результаты, но проходит где то 5 мин, и оно отдает все результаты, пока опять не обновлю запрос
yopp
Среда для тестирование перфоманса. Там идут запросы любого рода. Монгостат показал на апдейт пик 40к
Очевидно что ваша тестовая среда не выдерживает тестовой нагрузки. Без информации что у вас там конкретно происходит, зачем вы это делаете посоветовать что-то сложно.
Alisher
Всем привет! Подскажите пожалуйста, как лучше сделать поле, выводимое из нескольких других в документе? Например, есть поля {"a": 1, "b": 2}. Нужно c = a+b. Видел несколько вариантов: встроенной функцией на javascript или запросом mapReduce. Либо читать поля и рассчитывать сумму каждый раз. Каковы лучшие практики?
yopp
Это клиент делает) а мы должны конструктивно сказать «а-та-та! Так нельзя»
Ссылочку я вам уже дал :) приходите, помогу и разобраться и сформулировать что именно приводит к проблемам.
Serhii
@dd_bb подскажите пожалуйста, есть две коллекции (_id, name, lastName and userId, test: [], test1: []) - нужно сделать хитренький запрос который вернет один обьект в котором будет _id, name, lastName, test, test1(из другой коллекции)
Andriy
В mongo shell проблема воспроизводится?
в mongo shell вроде как все ок, когда шлю запрос с php, то есть эта проблема, но там всегда один и тот же запрос, он не меняется, поэтому не думаю что проблема в php
yopp
Нет, на стороне приложения
yopp
Если в шелле проблема не воспроизводятся, то это практически гарантированно проблема у клиента
Serhii
@dd_bb а можно внутри output отфильтровать некоторые значения? Допустим вторая коллекция включает поля которые я бы не хотел видеть в output поле
Alisher
Считать при обновлении документа
В update запросе, которые обновляют "a" и "b" или можно встроить неявное обновление "c" при изменении "a" или "b"?
Serhii
@dd_bb спасибо
Serhii
@dd_bb а если к примеру, полей много и я хочу сделать project: true для нескольких полей, а остальные откинуть
Anonymous
Использовать полнотекстовый поиск
в монге FTS тормозной :( а эластик лажа, я 500ГБ буду 2 месяца грузить только.... пока "выкрутился" поставив limit 10. заказчика устроило.... 🙄
yopp
И на какого рода запросах?
Anonymous
с сортировкой по скорингу. порядки кратные.... типа, ищет lucene за 100мс, монга 10 сек :)
Anonymous
ну это оффтопик, смысл обсуждать? 500ГБ и FTS монга ну вообще никак не вытянет, что смеяться? описанные выше проблемы были даже на 700МБ коллекциях (список названий ЮЛ РФ)
Anonymous
я монгу люблю.... но за другое 😂
yopp
Но я так понимаю что всё идёт к тому что FTS выпилят вообще
Serhii
@dd_bb подскажите, как избавится от вложенности, к примеру есть field: { a: [], b: [] }, на выходе нужно избавится от поля field, а внутренние поля а и б вынести на верхний уровень
Serhii
@dd_bb а если к примеру поле [[]], и мне нужно избавится от одной вложенности, тоже с помощью project?
Mike
Всем привет! У товара >150 аттрибутов, стоит ли 150 полей делать или упростить как то часть полей в строку например.
Гена
Ссылочку я вам уже дал :) приходите, помогу и разобраться и сформулировать что именно приводит к проблемам.
А зчем Монга юзает и свой кэш и кэш ОС? Она типа упирается в свой потолок кэшсайза, а потом идет просить у ОСи?
Гена
И как монга может знать когда у нее память хаканчивается?
yopp
где _id идентификатор аттрибута
Serhii
@dd_bb я сделал таким образом, это окей? { $unwind: { path: '$a’, preserveNullAndEmptyArrays: true } }, { $unwind: { path: '$b’, preserveNullAndEmptyArrays: true } }
yopp
в кеше wt хранятся оригинальные страницы, они сжимаются только когда wt сбрасывает их на диск
yopp
а операционная система кеширует страницы блочного устройства в свободной памяти
Andriy
Наиболее вероятно что у вас где-то кешируются результаты
у меня большой трафик на сайте и после того как я выполняю этот запрос db.promote_ads.find({approved: true, status: {$nin : ["completed", "stop"]} }), я выполняю следующий запрос db.promote_ads.update({ _id: "MY_ID" }, { $inc: { view_count: 1 } }), это может быть как то связано с тем что оно начинает выдавать мне все результаты с бд?
Mike
где _id идентификатор аттрибута
спасибо, а потом как фильтровать потом? если надо будет клиенту показать лишь с некими аттрибутами? проблем не возникнет? это не дольше будет { 'attrs.Number': 'somevalue} чем {'somefield': 'somevalue'}?
yopp
запрос будет вида attrs._id $eq <id>
yopp
в 4.2 можно в принципе использовать wildcard индекс. но на мой взгляд вложенный массив документов в одинаковой структурой это более практичный спобос организации
yopp
у вас в итоге будет фиксированная схема у документа
yopp
/me off
Alisher
Начиная с 4.2 можно: https://www.mongodb.com/blog/post/coming-in-mongodb-42-pipeline-powered-updates-and-more-expressive-queries
Немного не то. Нужно что-то, что будет неявно обновлять поле "c" при изменении "a" и "b". А в статье предлагается способ отправить запрос на обновление "c" без чтения "a" и "b".
yopp
вы можете в pipeline через $set какие угодно вычисления делать
Alisher
Но это всё таки явный update.
yopp
Да
yopp
У вас ещё есть вариант с (materialized) view, но в вашем случае мне кажется это оверхед
Alisher
Понятно. Спасибо!
yopp
если вы хотите по этому полю искать или сортировать то или при обновлении a||b обновлять c, либо materialized view
yopp
если у вас небольшие выборки где другие поля используются в качестве фильтров и итоговый срез документов не очень большой, то можно вообще считать при чтении
Dmitriy
@dd_bb а подскажите, пожалуйста, можно ли как-то вытащить инфу о дате создания коллекции?
yopp
дата создания файла хранилища
yopp
см в uri в wiredTiger в collStat
yopp
и дальше в dbPath
Dmitriy
ага, спасибо
Антон
Друзья, подскажите, пересекающиеся индексы и должны фэйлить в таких условиях или таки можно что-то подкрутить? compound индексы делать не могу, т.к. запросы очень разноплановые. :( Суть проблемы: есть коллекция (300ГБ, 1млрд++ доков, 1 сервер). поля не особо уникальные, уникальны их сочетания.... поля например: фамилия, имя, отчество, год, месяц, день, ещё что-нибудь.... индексы построены по каждому из полей . если идешь запетрищенко василий петрович 2000 12 31, есно ищет за секунду и меньше. а вот "василий петрович 2000 12" выполняется бесконечно. хотя реально васильпетровичей с др 2000.12" немного. а вот каждого из аттрибутов по отдельности явно миллионы....
аналогичная проблема, слишком много составных индексов. Вчера советовали неопределенный индекс, не дождался пока он построится и в документации указано его ограничение на составной индекс, то есть будет проблема поиска по нескольким полям. Есть возможность использования пересечения индексов? или какой нибудь еще механизм?
Alexey
Все добрый вечер! Может кто сталкивался с проблемой при конфигурации tls соединения sudo mongod --tlsMode requireTLS --tlsCertificateKeyFile test-server1.pem --tlsCAFile test-ca.pem при запуске сервера все ок но при попытке подключения mongo --tls --host HOSTNAME --tlsCertificateKeyFile test-client.pem --tlsCAFile test-ca.pem происходит ошибка SSL peer certificate validation failed: certificate signature failure CN ведет на HOSTNAME домен в X509v3 Subject Alternative Name для серверного сертификата также указан HOSTNAME для dns и реальный ip