yopp
В монге «дефолтного» курсора. Вы можете узнать у разработчиков studio 3t есть ли там возможность задать значение для сортировки для определённой коллекции. Напишите в поддержку
Никита
Askhat
Всем привет. Ребят, возникла такая проблема. У меня есть два сервера NodeJS, использую mongoose. Оба сервера подключены к Mongo DB который развёрнут на Atlas. Первый сервер успешно подключается к базе и второй тоже, но второй сервер время от времени получает ошибку от Mongo:
MongoError: not master
at /app/node_modules/mongodb-core/lib/connection/pool.js:581:63
at authenticateStragglers (/app/node_modules/mongodb-core/lib/connection/pool.js:504:16)
at Connection.messageHandler (/app/node_modules/mongodb-core/lib/connection/pool.js:540:5)
at emitMessageHandler (/app/node_modules/mongodb-core/lib/connection/connection.js:310:10)
at TLSSocket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:453:17)
at TLSSocket.emit (events.js:200:13)
at TLSSocket.EventEmitter.emit (domain.js:471:20)
at addChunk (_stream_readable.js:290:12)
at readableAddChunk (_stream_readable.js:271:11)
at TLSSocket.Readable.push (_stream_readable.js:226:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:166:17) {
operationTime: Timestamp { _bsontype: 'Timestamp', low_: 2005, high_: 1561499224 },
ok: 0,
errmsg: 'not master',
code: 10107,
codeName: 'NotMaster',
'$clusterTime': {
clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 6, high_: 1561499226 },
signature: { hash: [Binary], keyId: [Long] }
},
name: 'MongoError',
[Symbol(mongoErrorContextSymbol)]: {}
}
MongoError: Not master
Но такой ошибки вообше не возникает на первом сервере, а только на втором
Oleg
Всем привет. Ребят, возникла такая проблема. У меня есть два сервера NodeJS, использую mongoose. Оба сервера подключены к Mongo DB который развёрнут на Atlas. Первый сервер успешно подключается к базе и второй тоже, но второй сервер время от времени получает ошибку от Mongo:
MongoError: not master
at /app/node_modules/mongodb-core/lib/connection/pool.js:581:63
at authenticateStragglers (/app/node_modules/mongodb-core/lib/connection/pool.js:504:16)
at Connection.messageHandler (/app/node_modules/mongodb-core/lib/connection/pool.js:540:5)
at emitMessageHandler (/app/node_modules/mongodb-core/lib/connection/connection.js:310:10)
at TLSSocket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:453:17)
at TLSSocket.emit (events.js:200:13)
at TLSSocket.EventEmitter.emit (domain.js:471:20)
at addChunk (_stream_readable.js:290:12)
at readableAddChunk (_stream_readable.js:271:11)
at TLSSocket.Readable.push (_stream_readable.js:226:10)
at TLSWrap.onStreamRead (internal/stream_base_commons.js:166:17) {
operationTime: Timestamp { _bsontype: 'Timestamp', low_: 2005, high_: 1561499224 },
ok: 0,
errmsg: 'not master',
code: 10107,
codeName: 'NotMaster',
'$clusterTime': {
clusterTime: Timestamp { _bsontype: 'Timestamp', low_: 6, high_: 1561499226 },
signature: { hash: [Binary], keyId: [Long] }
},
name: 'MongoError',
[Symbol(mongoErrorContextSymbol)]: {}
}
MongoError: Not master
Но такой ошибки вообше не возникает на первом сервере, а только на втором
это репликасет?
Askhat
@olegmakarikhin , да, 3 ноды
Oleg
используйте урл формата репликасета
Oleg
там в нем сразу перечислены ноды
Oleg
и клиентское приложение будет автоматически переключаться на масте
Askhat
@olegmakarikhin , Ну MongoAtlas предоставляет какой-то урл
mongodb+srv://user:<password>@myclaster-mrwsb.mongodb.net/test?retryWrites=true&w=majority
Askhat
Но нет отдельных урлов всех нодов
Askhat
Чтобы сделать их через запятую/массив
Oleg
а. тогда не подскажу
Oleg
суть ошибки, насколько я понимаю - попытка менять данные на ноде которая не является мастером. клиентское приложение должно пересоединиться с мастером. если бы это был набор серверов которые вы администрируете, то у вас был бы набор хостов. а с MongoAtlas не подскажу.
Askhat
Askhat
Askhat
Omer
привет всем!
вопрос к @dd_bb
вы сегодня транслировать намерены встречу?
yopp
yopp
Ссылка: https://youtu.be/mYBVyQcilzU
Omer
огонь)
спасибо
Omer
упс
Omer
не туда, соррян
Hallo
Все, начали!
Pavel
Спикер на кортах это мощно :)
Josh
Alexander
@victor3 @dd_bb спасибо за выступления, замечательный митап
AstraSerg
Pavel
Митапы это хорошо, но первый митап был слишком сложным для таких как я. Которые про монгу слышали, много и часто и не в самом позитивном ключе :)
Накину, как темы для следующего митапа: что такое документоориентированные субд, в чем плюсы и минусы в сравнении с другими субд, и как и в каких случаях стоит выбирать nosql решения для проекта.
Перед митапом, честно, попытался вникнуть в тему, но не получил должного успеха
AstraSerg
Может попросить кого-то из нашего чатика сделать доклад?
Ярослав
await message.user.set("glove.glove", 1);
Что я делаю не так?
Ярослав
mongoose
Nick
yopp
Andrew
Всем привет!
Решил прогнать нагрузочное тестирование, исключительно на запись, в коллекцию с 10ю индексами, монга 4. Настроил предварительно мониторинг iostat, на нем запись на диск была 15ккб/c, чтение 20ккБ/c.
Дропнул индексы, чтение упало до нуля. Вопрос такой, почему такая нагрузка на чтение при записи индексов?
Andrew
Может кто знает максимально подробно что в момент записи с индексом творится, или может отправить на хорошую статью
Andrew
То что с каждым документом каждый отдельный файл пишется я понимаю, но откуда такие цифры на чтение?
yopp
Всем привет!
Решил прогнать нагрузочное тестирование, исключительно на запись, в коллекцию с 10ю индексами, монга 4. Настроил предварительно мониторинг iostat, на нем запись на диск была 15ккб/c, чтение 20ккБ/c.
Дропнул индексы, чтение упало до нуля. Вопрос такой, почему такая нагрузка на чтение при записи индексов?
Т.е. вы написали синтетический тест, который вставляет документы в одну коллекцию с 10 индексами и наблюдали в iostat утилизацию 20Мб/с на чтение? Повторение теста без индексов не показывает утилизации диска на чтение?
Сколько памяти лоступно монге? Какого размера документы, чтотиз себя представляют индексирвемые поля? Есть ли телеметрия из монги, если да, то что там? А ещё лучше покажите ваши тесты
yopp
Индексы и коллекции в wiredtiger представляют из себя key/value хранилища. Вставка нового документа заключается во вставке новой пары в хранилище документов, где ключ это внутренний индетфикато документа $recordId и потом вставки пар во все хранилища, где ключом является специальным образом сериализовангое значение игдексируемого поля.
Andrew
Да, тест крайне синтетический, мне нужна была картинка, насколько сильно поможет перенос индексов на другой диск. Соответственно набросал js скрипт который втавляет в пустую коллекцию 10 полей из Math.random в строку
Andrew
В два потока через баш и mongo запустил
Andrew
С другого сервера
Andrew
Т.е. все ради того, чтобы получить красивые скрины
Andrew
Вопрос чисто теоретический, что может читать диск. Просто для понимания механизма в будущем
yopp
Если вы дадите свой скрипт, то у меня будет возможность попытаться воспроизвести ваши результаты.
yopp
Всё что угодно
yopp
В вас может перестать хватать памяти
Andrew
Оперативки мало, дохлый тестовый сервак
Andrew
Т.е. что-то в своп уходит и оттуда читается?
yopp
С вероятностью 97% у вас происходит cache trashing
Andrew
Так, это уже интересно
yopp
Ничего интересного, все банально. На каждый дополнительный индекс увеличивает давление на кеш, так как требует памяти. Вставка в нового ключа в key/value всё равно требует сначала прочитать ту ветвь дерева, куда нужно будет вставить новую запись.
Вероятнее всего с 10 индексами банально не хватает памяти и эти ветви приходится постоянно читать с диска, особенно если там случайным образом сгенерированные индексированные значения.
yopp
Моделирование нагрузки на данных с высокой энтропией практически бесполезно
yopp
Если у вас в реальности не такие данные
yopp
Моделировать лучше всего на реальных данных
Andrew
В реальности данные схожи, но тест хотел провести для галочки, чтобы прикрепить красивые картинки, мол насколько с 2мя разными томами будет проихводительней запись
Andrew
Про чтение ветки б дерева похоже на правду
Andrew
Индексы вполне могли лечь конкретно на диск ибо много всего на сервере и оперативы мало
yopp
Вы некорректно ставите эксперимент
yopp
У вас отличаются данные, отличается окружение
Andrew
Да, я понимаю
yopp
Тогда вы должны понимать бессмысленность такого эксперимента, так как он скорее всего не будет отражать реального положения дел.
Andrew
И это тоже понимаю)) просто хотел "быстро" получить красивую картинку дабы убедить коллег, что надо добавить еще отдельный диск на индексы
Andrew
Хотя я и так знаю, что индексы ев отдельном диске дадут огромный прирост в производительности на запись
yopp
Огромный не дадут
Andrew
Когда индексов 10, а у нас их именно столько, и индексы едва помещаются в оперативу...
yopp
В первую очередь стоит добавить столько оперативы, сколько позволяет материнская плата
Andrew
Я всегда индекс представлял как сущность, в которую новые данные дописываются в конец, а когда рандомные данные записываются, ведь они могут условно в сердину файла идти, так?
Andrew
Наверное придется углубить знание по бинарным деревьям и как они живут
yopp
У файла нет никакой середины
yopp
Файл это вообще абстракция
Andrew
Я имею ввиду блоки на диске
Andrew
Что файл условно занимает 1500 блоков подряд
Andrew
И что новая запись в индекс не будет как новая запись в коллекцию ложиться постоянно в следующий блок
yopp
Если вас волнует порядок блоков, значит у вас нжмд, а значит пришло время их выкинуть и заменить на твердотельные. Лучше сразу на NMVe
Andrew
Это правда) в больших организациях иногда не все так просто) ссд надо отвоевать
Andrew
А вот лишний том обосновать проще
yopp
Это плохое решение
yopp
Оно добавляет операционной сложности