Yura
Если без init sync то только, как это называется, через физический бэкап. Останавливаете source ноду и делаете копирование дататопа на новый хост, потом rs.add() на сорсе и все
Yura
Еще учитывайте что при таком способе, для снятия консистентной копии нужно остановить или монгу на праймари, или запись в вашем сервисе, на все время бэкапа и рестора. А 4Тб данных копируются не быстро. Если такой длительный downtime невозможен для вас, то тогда только через репликацию
Сергей
Добрый день! Ситуация такая: кластер из 3 нод (1 мастер и 2 слейва). Необходимо отключить 1 слейв. Подскажите, пожалуйста, если отключу 1 слейв, кластер продолжит работать, я правильно понимаю? Когда запущу выключенный слейв, он автоматически подключится к кластеру или надо будет что-то набирать в консоли?
Yura
Сергей
Yura
Добрый день! Через остановку сервиса
Тогда кластер продолжит работать и после запуска подключится автоматически. Единственное: проверьте величину вашего oplog (количество часов которое он покрывает), если остановка слейва будет длительной и выйдет за рамки оплога - получите статус recovering после его запуска.
Сергей
М.А
Всем привет,
Подскажите есть ли тип интекса TEXT для понотекстового поиска в Atlas ?
Просто доки все время говорят (non-Atlas) а вроде другое говорит что можно ставить там
Nick
М.А
Привет,
Я попробовал Атлас Серч, он почему то медленно работает (
У меня есть строковое поле ActionId у которого атомарные значения , типа "acb123"
Я хотел сделать поиск по частичном совпадению, типа если в поиск вбить b12 то он найдёт совпадение
Я пробовал fuzzy, wildcard, nGram токенизацию - не работают быстро как хотелось
Если я просто делаю сканирование режексом ActionId: /b12/i - работает на такой же скорости как и атлас серч индекс
Может кто сталкивался с таким, как быть, подскажите плз
М.А
Правда документов для тестирования думаю чуть мало в коллекции, там где то 600 - 800 тысяч
Но и с таким количеством прямой поиск без индексов работает примерно так же как и через атлас серч
Nick
М.А
Что такое быстро? И зачем быстрее?
Поиск с Атлас Серчом иногда идет более 20ти секунд
А этот поиск через апи запрос, поиск по БД
Там максимум 3 секунды думаю допустимо, ну то есть пользователю будет дальше уже неудобно ждать
Nick
М.А
М.А
Окей, вот обычный поиск с реджексом
Возвращает 2647 документов
db.getCollection("LocalConnectorLogCollection").aggregate([
{ $match: { KeyValue: /248/i } },
])
Время выполнения: 11.9 секунд
А вот через атлас серч. Столько же документов возвращает
Время выполнения 12 секунд
db.getCollection("LocalConnectorLogCollection").aggregate([
{
$search: {
index: "connectorlog_keyvalue_si",
wildcard: {
query: "*248*",
path: "KeyValue",
allowAnalyzedField: true
}
}
},
])
Конфиг вот такой
{
"mappings": {
"dynamic": false,
"fields": {
"KeyValue": {
"analyzer": "keywordLowercase",
"searchAnalyzer": "keywordLowercase",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "keywordLowercase",
"tokenFilters": [
{
"type": "lowercase"
}
],
"tokenizer": {
"type": "keyword"
}
}
]
}
М.А
Есть какие идеи 🥲 ?
М.А
Я пробовал ещё nGramm токенизацию, он вроде быстрый но работает не очень
Типа, 1398 находит совпадения а по 139 нет, хотя я и указывал minToken как 3,
Либо я не очень понял как это работает и для каких случаев
Алексей
Добрый день! Подскажите, кто знает, пожалуйста: mongosh клиент добавляет в вывод prompt, —quiet не помогает. Как убрать? например, делаю echo 'show tables' | mongosh —quiet logs, он выдает: logs> db1\ndb2\n... \n logs> 🤦♂️
Nick
Алексей
CyberOps
Всем привет, кто нибудь настраивал в mongo OIDC ?? Кто бы мог подсказать пару моментов
Fops
Ребят, привет
Кто встречался с такой проблемой?
Fops
Подключается 1 раз из 10 примерно, в остальные разы истекает время
Usmon
Ребят, привет
Кто встречался с такой проблемой?
Ошибка connect ETIMEDOUT 159.41.66.146:27017 в MongoDB означает, что ваше приложение или клиентская библиотека не смогли установить соединение с сервером базы данных по указанному IP-адресу и порту в отведенное время. Другими словами, запрос на подключение "просрочил" тайм-аут из-за отсутствия ответа или недоступности сервера.
Возможные причины и шаги по устранению:
1. Сервер MongoDB недоступен или отключен
Проверьте, запущен ли сервер по IP 159.41.66.146 и слушает ли порт 27017. Можно выполнить команду, например, telnet 159.41.66.146 27017 или nc -zv 159.41.66.146 27017 для проверки доступности порта.
2. Межсетевые экраны или брандмауэры блокируют соединение
Убедитесь, что между клиентом и сервером нет правил, блокирующих входящие/исходящие соединения на порт 27017.
3. Сетевые проблемы или высокая задержка
Возможно, есть проблемы с сетью или маршрутизацией. Попробуйте проверить ping или traceroute к серверу.
4. Конфигурация клиента или неправильный IP-адрес/порт
Проверьте правильность конфигурации строки подключения.
5. Сервер перегружен или не работает
Если сервер работает, убедитесь, что он не перегружен и слушает соединения.
Рекомендуемые действия:
- Подключитесь к серверу напрямую через командную строку или инструменты, чтобы проверить его доступность.
- Проверьте логи MongoDB на сервере.
- Убедитесь, что ваш сервер или облачный сервис разрешает входящие соединения на порт 27017.
Sanity = nil
Здравствуйте, пытаюсь анализировать запросы с помощью db.collection.find().explain(), в доке пишут что план не кешируется, но почему-то если я запускаю первый раз explain на определенную квери, даёт 9.985 executionTimeMillisEstimate, если запускаю ещё раз, даёт уже 0.048. Неужто кеширует не квери план а результат запроса?
Anton K.
Sanity = nil
прогретый запрос
Да планирование одинаковое время у запросов, а выполнение намного быстрее, сразу понял что какое-то кеширвание играет роль. А как тогда анализировать запрос, нету возможности отключить какие-либо кеширования с эксплейном?
Anton K.
yopp
Здравствуйте, пытаюсь анализировать запросы с помощью db.collection.find().explain(), в доке пишут что план не кешируется, но почему-то если я запускаю первый раз explain на определенную квери, даёт 9.985 executionTimeMillisEstimate, если запускаю ещё раз, даёт уже 0.048. Неужто кеширует не квери план а результат запроса?
Здравствуйте!
Тут участвуют разные механизмы:
1) выбор плана: по шейпу запроса выбираются планы-кандидаты. Для каждого кандидата планировщик делает «тестовые» запросы, результаты взвешиваются и выбирается победитель.
После чего победитель сохраняется в кэше планов и дальше при совпадении шейпа запроса план берётся из кэша, без повторного тестирования.
Посмотреть можно вот тут: https://www.mongodb.com/docs/manual/reference/method/js-plan-cache/
По этому первый запрос когда план еще не составлялся (монга только была запущена или кэш был сброшен), время выполнения запроса существенно больше из-за происходящего анализа кандидатов
2) При выполнении запроса есть несколько вариантов: данные попадающие под выборку находятся на диске, в файловом кэше ОС или в кэше монги. Соотвественно первый запрос в который попадают данные будет читаться с диска, попадать в дисковый кэш и или быть в кэше запросов внутри монги. Это самый долги по времени путь.
Как следствие если сделать запрос с теми же условиями повторно, данные уже будут в кэше монги и это самый быстрый путь
Когда кэш монги переполнится, начнётся процесс вытеснения закешированных данных (page eviction). Но кэш ОС независим от кэша монги, по этому данные могут остаться в нем. Разница между ними в том, что в кэше монги данные хранятся как есть, а вот при сбросе на диск они сжимаются выбранным алгоритмом. Как следствие в кэше ОС данные хранятся более компактно. Но чтение назад в кэш требует декомпрессии что условно медленнее чем чтение напрямую из кэша монги
3) explain использует для estimatedMillis результат оценки планировщика. Эта оценка не всегда точная, так как была получена в п.1 и может существенно отличаться по разным причинам. Есть ситуации когда после «прогрева» монги, сброс кеша планов может помочь планировщику выбрать более эффективную стратегию
Sanity = nil
Здравствуйте!
Тут участвуют разные механизмы:
1) выбор плана: по шейпу запроса выбираются планы-кандидаты. Для каждого кандидата планировщик делает «тестовые» запросы, результаты взвешиваются и выбирается победитель.
После чего победитель сохраняется в кэше планов и дальше при совпадении шейпа запроса план берётся из кэша, без повторного тестирования.
Посмотреть можно вот тут: https://www.mongodb.com/docs/manual/reference/method/js-plan-cache/
По этому первый запрос когда план еще не составлялся (монга только была запущена или кэш был сброшен), время выполнения запроса существенно больше из-за происходящего анализа кандидатов
2) При выполнении запроса есть несколько вариантов: данные попадающие под выборку находятся на диске, в файловом кэше ОС или в кэше монги. Соотвественно первый запрос в который попадают данные будет читаться с диска, попадать в дисковый кэш и или быть в кэше запросов внутри монги. Это самый долги по времени путь.
Как следствие если сделать запрос с теми же условиями повторно, данные уже будут в кэше монги и это самый быстрый путь
Когда кэш монги переполнится, начнётся процесс вытеснения закешированных данных (page eviction). Но кэш ОС независим от кэша монги, по этому данные могут остаться в нем. Разница между ними в том, что в кэше монги данные хранятся как есть, а вот при сбросе на диск они сжимаются выбранным алгоритмом. Как следствие в кэше ОС данные хранятся более компактно. Но чтение назад в кэш требует декомпрессии что условно медленнее чем чтение напрямую из кэша монги
3) explain использует для estimatedMillis результат оценки планировщика. Эта оценка не всегда точная, так как была получена в п.1 и может существенно отличаться по разным причинам. Есть ситуации когда после «прогрева» монги, сброс кеша планов может помочь планировщику выбрать более эффективную стратегию
https://www.mongodb.com/docs/manual/reference/command/explain/
Спасибо за объяснение, примерно так и представлял, просто тут в доке пишут что не помещает выигравший план в кеш и не достает их оттуда.
Anton K.
Anton K.
Anton K.
yopp
Sanity = nil
.
https://www.mongodb.com/docs/manual/reference/method/cursor.explain/#mongodb-method-cursor.explain
yopp
.
Пожалуйста, не общайтесь в таком формате. Если вы знаете ответ, ответьте развернуто.
У нас профессиональное сообщество. Относитесь к участникам с уважением.
Здесь не принято посылать в «в Гугл» или «почитать документацию» без ссылки на релевантную статью или конкретных рекомендаций.
yopp
Sanity = nil
yopp
.
Оба этих запроса приведут к одному и тому же результату, так как выполнят одну и ту же команду explain: https://www.mongodb.com/docs/manual/reference/command/explain/
В случае с find() в mongosh возвращается объект связанный с курсором, который «лениво» выполняется. Как следствие на нем можно вызвать метод explain(). Под капотом все одно и тоже, не зависимо откуда был вызван метод
yopp
Ужас какой... Эх спасибо, попробую их доку читать.
Если у вас есть возможность использовать монгу, а не documentdb, это самый оптимальный вариант. Так как внутри там все иначе устроено и очень многие вещи между монгой и documentdb в итоге, ожидаемо, не совпадают
Sanity = nil
Да к сожалению используется авс для всей инфраструктуры, да и данных уже очень много там, так что увы, слишком дорого стоит будет переезд.
Anton K.
Sanity = nil
Здравствуйте, у монги есть альтернатива типа книга как Postgres Internals для постгреса?
Владимир Т
здравствуйте, подскажите какую ОС нынче модно юзать под mongodb? Есть mongodb 3.6, намечается ее переезд. CentOS я так понял уже не вариант, а RHEL8-9 просит лицензию.
CyberOps
Нуриддин
Владимир Т
Кстати да, хотел спросить про oracle linux
Владимир Т
На него нормально поставится?
Нуриддин
Или rocky но там репы немного запарно добавлять, так как там сухая необходимость
Нуриддин
На него нормально поставится?
Ну у меня в опыте проблем почти не было, только там по дефолту файервал включён иногда забываешься открыть порты
Владимир Т
Нуриддин
Прикольная
Владимир Т
Нуриддин
? Чего ?
Нуриддин
Остальное вообще не видел каких-то отличий
Нуриддин
а что бы вы выбрали роки или оракл линукс?
Вообще разницы не вижу, ответь на вопрос сколько раз будешь её переустанавливать, если больше раза - пишешь ансибл просто с учётом особенностей и раскат автоматизируется)
Владимир Т
Владимир Т
Nick
Владимир Т
El
Кто-то смог поставить Mongo на локальном компе с Fedora 42 ?
Иван
#вопрос нужно поменять тип поля во всех документах с Object
startDate
Object
year
2023
month
8
day
1
на Date, использую mongodb.driver c# на стороне сервера(не клиента), как можно это сделать?
Nick
Иван
Там 60 млн документов, хочется ускорить
Nick
Nick
альтернатив такто нет. Есть только подварианты вида сделать апдейты на создание нового поля с нужным типом и когда все отработает переклчюиться на него
Иван
нашёл некоторый eval, не пойму на сколько она obsolete
Nick
Иван
но на стороне сервера?
Иван
тем самым невелируя походы по сети
Nick
апдейты все на стороне сервера выполняются)