Max
И там тоже 250 лямов доков
Max
А тут 500ms
Max
Запрос на { _id: ”1” } тоже лагает, а на { _id: “10” } нет
Max
"executionStats" : { "executionSuccess" : true, "nReturned" : 1, "executionTimeMillis" : 456, "totalKeysExamined" : 1, "totalDocsExamined" : 1, "executionStages" : { "stage" : "IDHACK", "nReturned" : 1, "executionTimeMillisEstimate" : 459, "works" : 2, "advanced" : 1, "needTime" : 0, "needYield" : 0, "saveState" : 1, "restoreState" : 1, "isEOF" : 1, "invalidates" : 0, "keysExamined" : 1, "docsExamined" : 1 }, "allPlansExecution" : [ ] },
yopp
ищите проблему в io
yopp
idhack и works: 2 это значит что монга сделала два юнита работы: 1 запрос в индекс и 1 запрос в хранилище
Max
И сколько времени на что ушло
yopp
нет
Max
idhack и works: 2 это значит что монга сделала два юнита работы: 1 запрос в индекс и 1 запрос в хранилище
В других бд на этом же инстансе с таким же количеством доков в коллекции тоже works: 2, но при этом запрос отрабатывает моментально
Max
Может реплику ресинкнуть заново нужно? С полным удалением всех данных
yopp
нет
yopp
открывайте iostat и смотрите что там
yopp
В других бд на этом же инстансе с таким же количеством доков в коллекции тоже works: 2, но при этом запрос отрабатывает моментально
это говорит только о том, что страницы которые нужны монге чтоб выполнить запрос помещаются в память
yopp
вы можете посмотреть на collStat и посмотреть что там wt.cache.bytes read into cache
yopp
вероятно на тормозящей коллекции у вас там постоянно растёт bytes read into cache и pages evicted
yopp
gist или pastie
yopp
и включите indexDetails
Max
https://pastebin.com/CtMc0XR2 сделал)
Max
тут все включено
S
какой gui посоветуете для mongo?
Max
Кто-нибудь использует mongodb-mms (ops manager)?
Гена
я как то крутил на виртуалках у себя
Гена
удобная штука
Oleksandr
Здравствуйте, Подскажите, пожалуйста, сейчас есть MongoDB 2.6.10 на Debian 7. Хотелось бы обновиться до MongoDB 4.0 (чтобы перейти на Ubuntu 18.04, по документации - начиная с Монго 4.0 поддерживает Ubuntu 18). Болезненный ли это процесс, в плане неожиданостей, или изменений в внутренней структуре данных? Нашел такую ссылку - https://www.percona.com/blog/2018/03/12/mongodb-mass-version-upgrading-upgrading-2-6-3-6/ , в теории можно сразу сделать обновление через экспорт-импорт, или второй вариант шаг-за-шагом обновлять (или это не лучший вариант?)
yopp
Если нельзя даунтайм, то rolling upgrade 2.6 -> 2.8 -> 3.0 -> 3.2 -> 3.6 -> 4.0
Oleksandr
Если нельзя даунтайм, то rolling upgrade 2.6 -> 2.8 -> 3.0 -> 3.2 -> 3.6 -> 4.0
В случае если есть ReplicaSet, делать примерно так: " Now in reverse order from rs.config().members, take the highest member ID and stop one node at a time *Stop the mongod node *Run yum/apt upgrade, or replace the binary files with new ones *Try to start the process manually, this might fail if you failed to note and fix configuration file changes *Once started on the new version, make sure replication can keep up with ‘rs.printSlaveReplicationInfo()’ *Repeat this process one at a time until only node “0” (your primary) is done." ?
yopp
но в целом да, выбирать member id не надо, просто выводите любой secondary
yopp
когда все secondary обновлены, на праймари rs.stepDown() и его тоже обновлять
yopp
если праймари не захочет stepDown то поднять priority одному из обновленных secondary
yopp
при переходе на 3.0 не забудьте включить wiredTiger как storage engine
Oleksandr
Как раз хотел это спросить, если есть 3 сервера в ReplicaSet с данными, обязательно делать mongodump / mongorestore? Или просто следовать документации, но вместо дампа и восстановления - включить wiredTiger (так как данные уже есть в виртулаьной машине)?
Oleksandr
yopp
дамп перед апгрейдом лучше сделать
Oleksandr
это святое)
yopp
это в случае если вы обновляете standalone
yopp
в случае с репликой, переименуйте существующий dbPath и запустите монгу с пустым dbPath чтоб оно сделало initial sync
yopp
смысла делать restore в этом случае особо нет
yopp
4.2.0 (Aug 13) ◦ 4.0.12 (Aug 12) Хочешь выступить с докладом на митапе в Москве? Присылай тему! • Плейграунд для запросов • Документация • Официальные курсы по MongoDB Stable: 4.2.0 ◦ Bugfix: 4.0.12 Legacy: 3.6.14 (Aug 26) ◦ EOL: 3.4.23 (Sep 16, 💀 Jan ‘20) ☠️: 3.2.21 (Dec ’18), 3.0.15 (May ’17)
yopp
Обновления: 3.6.14: https://docs.mongodb.com/manual/release-notes/3.6/#aug-26-2019 3.4.23: https://docs.mongodb.com/manual/release-notes/3.4/#sep-16-2019
Anonymous
Добрый день. Не подскажите, есть ли какие-нибудь инструменты для построения диаграмм БД по схемам монгусовским? А то пм просит диаграммку, а руками очень лень её рисовать.
Max
Но ведь в монге нет схемы)
Anonymous
Так, mongoose же, нет?
Max
Так, mongoose же, нет?
А, не обратил внимания
Max
Я бы погуглил в сторону mongoose to graphql и построил граф со связями через voyager
Max
https://www.npmjs.com/package/graphql-compose-mongoose Вот это как вариант вроде
S
извиняюсь за глупый вопрос, методы моделей mongoose все являются асинхронными? Например Test.find, я должен оборачивать в await Test.find?
Aleksandr
ага
Aleksandr
где-то же бд далеко на другом сервере
S
ага
благодарю
Aleksandr
синхронно туда никак не попасть
Vladislav
Привет, ребята! Есть такой вопрос по индексам: а MongoDB умеет индексировать по конкретным значениям в массивах объектов. Объясню что хочу: есть примерно такой документ в коллекции: { "_id": ObjectID("....."), "sessions": [ { "session_id": "e5ade208-dabc-11e9-a60f-0a580ae94561", // HASH INDEX "visit": 0 }, { "session_id": "d07a9526-dabc-11e9-a60f-0a580ae94561", // HASH INDEX "browser": "Mozilla" } ], "first_name": "Petr", "last_name": "Pavlov" } Так вот на session_id навесить индекс (HASH). С помощью которого можно было бы получить документ по указанному session_id и вытащить first_name и last_name. Можно ли это сделать в монге? А то по документации не очень понятно
Vladislav
да, можно. find({«sessions.session_id»: HASH})
Спасибо! Но это я так понял, уже поиск по индексу)
Vladislav
Или опечатка
yopp
и индекс sessions.session_id
Vladislav
Ага, спасибо!)
yopp
в этом случае ключей в индексе будет по количеству индексируемых значений, а не по количеству документов
yopp
1м документов и 10 значений дадут 10м ключей
Vladislav
в этом случае ключей в индексе будет по количеству индексируемых значений, а не по количеству документов
Ну, смотрите. Если мы говорим про индекс типа hash, то ключем в этом индексе будет хэш-сумма от session_id, а значением -> указатель на документ в котором хранится эта session_id. Я правильно понимаю?
yopp
да
yopp
(там с ключём несколько сложнее будет, но общий принцип такой, да)
Vladislav
Просто вроде в хэшмэп-структурах обычно допускаются коллизии. То есть для двух одинаковых session_id будет одна и та же хэш-сумма. Следовательно они попадут в один ключ. Эти два документа с одинаковыми session_id. Вроде бы обычно это linkedlist'ом решается. В монге не так?
yopp
это ни чем не отличается от обычного не-уникального индекса. в данном случае разница hashed индекса и простого индекса только в том, что перед записью ключа в хранилище, значение будет хешировано
𝕬𝖗𝖙𝖊𝖒
Всем ещё раз привет. У меня вылазит такая ошибка: pymongo.errors.OperationFailure: Authentication failed. При попытке сделать insert_one в таком коде: conn = pymongo.MongoClient("mongodb://hххххххх:1km9ktq7sbp4ltххuххevrdkqu@ds161397.mlab.com:61397/mydb") db = conn.mydb abc = db.users abc.insert_one(...)
Vadim
точно провайдишь правильный username и password в connection string ?
Vadim
username - hxxxxxxx, password - 1km9ktq7sbp4ltххuххevrdkqu (не забудь поменять 🙈🙈🙈) ?
𝕬𝖗𝖙𝖊𝖒
Vadim
попробу законектиться напрямую с shell'a ?
Vadim
порпобуй поиграться с параметрами authMechanism или/и ssl