Дмитрий
yopp
Почему?
Дмитрий
так же есть вторая проблема, параллельные запросы, чем больше их одновременно запустить, тем больше будешь ждать ответа
Дмитрий
я имею ввиду запросы по агрегации
Дмитрий
и не совсем понятна работы монги с памятью
Дмитрий
пробовал в режиме in-Memory и все равно прироста сильного не добился, хотя коллекцию всю можно было загрузить в память и все операции производить с ней
yopp
Мне у сожалению все ещё не понятно почему время выполнения этой агрегации является проблемой
Дмитрий
формируется дашборд, параметры могут быть любые
запросов дашборд посылает 4
Дмитрий
нужны данные в реальном времени
Дмитрий
ждать 15-20 секунд это много
yopp
У вас есть несколько вариантов:
1) изменить схему и сделать её более подходящей к вашим выборкам
2) преагрегировать данные в отдельной коллекции при вставке
3) шардировать коллекцию, например по времени, чтоб за счёт горизонтального масштабирования увеличить доступную вычислительную мощность
Дмитрий
да, я понимаю пути оптимизации, но я ждал бОльшего от самого фреймворка, думалось, что операции в памяти выполняются быстрее и что при группировке будут использоваться индексы
yopp
Не очень понимаю почему
Дмитрий
я привык к работе с реляционками и они отдают результат в 5 раз быстрее
Дмитрий
применительно к агрегациям
Дмитрий
при плоских данных
yopp
У вас получается пережевывать около 165мб в секунду, со всеми накладными расходами. Это очень неплохой результат. Монга скорее всего упирается в железо
yopp
Дмитрий
yopp
Тогда зачем сравнивать?
Дмитрий
yopp
А почему монга?
Дмитрий
наследие)
yopp
у вас данные хранятся в неподходящем для ваших выборок виде
yopp
Скорее всего у вас коллекция из множества маленьких событий
Дмитрий
да и есть мысли складывать в документ много событий, с разбивкой например в час
yopp
И очевидно что слабоструктурированный bson при прочих равных будет более затратным чем zero copy структуры
Дмитрий
спасибо за мысли, за комменты
буду думать какой вариант выбрать
yopp
yopp
Час это очень много, особенно если событий много
yopp
https://www.mongodb.com/blog/post/building-with-patterns-the-bucket-pattern
yopp
https://www.mongodb.com/blog/post/paging-with-the-bucket-pattern--part-1
yopp
https://www.mongodb.com/blog/post/paging-with-the-bucket-pattern--part-2
Дмитрий
👍
Leonid
привет. кто сталкивался с "развалившимися" индексами в монге?
столкнулся что в какой-то момент времени индекс заточенный под специфический запрос перестал быть winning, и вместо него начал использоваться базовый индекс.
yopp
Leonid
да. указал. и результат реально хуже.
yopp
Покажите explain
Leonid
интересует какие мануалы читать по этому поводу. это больше копание в глубину.
сек
yopp
https://docs.mongodb.com/manual/core/query-plans/
yopp
Leonid
gist.github.com
https://gist.github.com/Dr-klo/e21c124cf52185fd745c6fe28f325d62
Leonid
база в наследство досталась. из 200гб данных индексы уже 160гб занимают. меня это напрягает
yopp
yopp
_id.T это уже очень плохо
yopp
Уверен что у вас в итоге есть ещё один индекс по _id.T
Leonid
Ожидал что будет использоваться TimeTypeEventSigntype. Но если его хинтом бахнуть то запрос 2м выполняется вместо 30сек, эксплейн которого я скинул
Leonid
Да. По _id.T там много индексов. Поскольку данные - банальные лог данные. И _id.T (время) много где используется
yopp
Это очень большая ошибка
Leonid
Там исторически сложилось что айди составной (время. Айди устройства. Айди приложения. Айди айди компонента)
Хотел бы переделать. Но аргументов убедить начальство не хватает
yopp
yopp
Если с хинтом запрос выполняется 2 минуты вместо 30с, вероятно по этому планировщик этот индекс и не выбирает
Leonid
Пару мин
yopp
yopp
Но в целом, если это логи, то как и выше я вам рекомендуюрассмотреть bucket pattern
Leonid
😊 они просто веник на 1тб воткнули в стойку
yopp
Веник?
Leonid
Расширили дисковое пространство на шардах
Leonid
yopp
Если у вас в _id лежат уже три ацдишника, то это отличный выбор для среза у бакета плюс время для сегментации.
В таком случае, собирая например в один документ сотню-другую событий, можно на порядки уменьшить размеры индекса
Leonid
@dd_bb https://gist.github.com/Dr-klo/a58065acf2de9dec2e392a82dc34a3f8
yopp
15с
yopp
На единственном шарде
yopp
На остальных шардах меньше 100мс
Leonid
я буквально перед этим индекс перестроил
Leonid
поэтому профит выше
Leonid
{
"_id.T" : -1,
"E" : 1,
"Y" : 1
} и partial по _t
Leonid
это хотфикс. проблему нужно концептуально решать
Araik
Подскажите пжл, не могу почему-то обновить расширение mongodb для PHP, стояло 1.5.2 версия, я обновил, обновилось до 1.6.1, обновляю так sudo apt update mongodb
Araik
Araik
собственно, пытаюсь поставить драйвер версии 1.6.0, но он требуется расширение версии 1.7, при этом до 1.7 не обновляется
Иван
Здравствуйте!
Нужен совет). Использую MongoBD.Driver 2.10.2 для c#.
Есть класс Card.
Вопрос:
можно ли создать индекс для поля Show в CardRepository, так чтобы индекс создавался в конструкторе CardRepository, при условии, что его нет? Например, если коллекция CARDS переименовалась или удалилась.
Корректно ли так создавать индексы?
Artem
Всем привет. Интересует такой вопрос, возможно ли изменять документ не зная точных данных?
Artem
Допустим, у меня есть счётчик посещений сайта, у меня есть документ с одним значением
{'CountOfViews': x}
. Могу ли я с помощью лишь одного запроса увеличить значение х на 1 пункт?
Vova
Vova
В описании операторов пишут что будет, если поля не существует или если в нём не число