Leonid
Здравствуйте! Да, подключаетесь через mongos и через sh.addShard добавляете реплику в шард https://www.mongodb.com/docs/manual/tutorial/add-shards-to-shard-cluster/
указывать только адрес реплики или адрес шарда, адрес реплики? шард уже работает, данные там есть
Leonid
спасибо
yopp
Реплика должна быть запущена с ключом/опицей shardsrv
Leonid
Реплика должна быть запущена с ключом/опицей shardsrv
сделал, в логах реплики {"error":"ShardingStateNotInitialized: sharding state is not yet initialized"} надо еще что то сделать, чтобы данные синхронизировались?
yopp
а что в sh.status?
Artem
Привет, скажите правильно ли понимаю, монгус словил две ошибки из-за криворукости скрипта и выкинул эмиттед Еррор, тем самым положив базу ? это делается с целью сохранения целостности данных или иначе логика работает ?
Artem
пардоньте за бесполезный скрин) не глянул, вот нормальная инфа
yopp
Укажите в конце uri: ?authSource=admin Если в uri указано имя базы, но не указан authSource, то для аутентификации будет использоваться база с именем в uri, а не admin. Контейнер же по-умолчанию инициализирует пользователя в базе admin
Сергей
Добрый день всем. Хочу агрегировать кол-во записей с фильтрами по дням (кастуя из даты/времени в виде "2020-11-01 00:00:11" в дату) в mongodb версии 3.2.22. В другой бд использовал: "$group": { "_id": { "day": { "$dayOfYear": { "$dateFromString": { "dateString": "$date", "format": "%Y-%m-%d %H:%M:%S" } } }, "token": "$token" }, "cnt": {"$sum": 1} } но тут получаю ошибку из-за версии: "errmsg" : "invalid operator '$dateFromString'", "code" : 15999 Вопрос: чем получать дату из даты/времени в старой mongodb?
Tetra
бд на 329G
Чем раньше начать тем быстрее можно воспользоваться плодами миграции
Viktar
бд на 329G
Не вижу проблем. Я делал массовые апдейты терабайтным базам. Долговато, но терпимо.
yopp
Привет, скажите правильно ли понимаю, монгус словил две ошибки из-за криворукости скрипта и выкинул эмиттед Еррор, тем самым положив базу ? это делается с целью сохранения целостности данных или иначе логика работает ?
В штатых условиях запросы не должны приводить к аварийному завершению монги. Возможно ошибка на стороне клиента произошла как следствие того, что с базой что-то случилось. Рекомендую посмотреть в логи монги, в районе того времени где была ошибка. Вероятно там будет информация о том что случилось с процессом
Aleksey
Привет всем. Подскажите на счет .explain("executionStats") Получаю самое большое время на последнем этапе { "stage" : "SINGLE_SHARD", "nReturned" : 8, "executionTimeMillis" : 4186, } В индекс попадаю { "stage" : "IXSCAN", "nReturned" : 8, "executionTimeMillisEstimate" : 33, } Но каких-то кейсов с "stage" : "SINGLE_SHARD", особо не нахожу.
Ilya
спасите, я тупой, у меня есть рут юзер я использую такую строку для коннекта mongodb://root:example@localhost/bsw?authsource=system" как заставить использовать системную базу для аутентификации??
Aleksandr
знатоки, подскажите пожалуйста, есть реплика сет из 3 нод, PSS, 03 нода ломается и я меняю ее, чтобы не грузить мастера забираю даные с секондари ноды rs.syncFrom( mongo-02 ). после этого ожидаю что после перезапуска mongod на 03 ноде, все ноды будет брать реплику с мастера, но чтобы я не делал, одна нода берет с мастера, вторая с секондари. На текущий момент хотелось бы, чтобы все секондари брали реплику с мастера. Кто нить знает в чем дело?
Aleksandr
я тоже так подумал и сделал, применилось, но после смены мастера все разъехалось опять
Андрей
а че мастер поменялся?
Андрей
приоритет ему в 2, остальным 1
Aleksandr
я поменял, тестил, а вообще имитация вывода на обслуживание, хочется же чтобы полноценный кластер был
yopp
знатоки, подскажите пожалуйста, есть реплика сет из 3 нод, PSS, 03 нода ломается и я меняю ее, чтобы не грузить мастера забираю даные с секондари ноды rs.syncFrom( mongo-02 ). после этого ожидаю что после перезапуска mongod на 03 ноде, все ноды будет брать реплику с мастера, но чтобы я не делал, одна нода берет с мастера, вторая с секондари. На текущий момент хотелось бы, чтобы все секондари брали реплику с мастера. Кто нить знает в чем дело?
syncFrom это «временный» оверрайд sync target Persistence replSetSyncFrom/rs.syncFrom() provide a temporary override of default behavior. mongod will revert to the default sync behavior in the following situations: • The mongod instance restarts. • The connection between the mongod and the sync target closes. • If the sync target falls more than 30 seconds behind another member of the replica set. https://www.mongodb.com/docs/manual/tutorial/configure-replica-set-secondary-sync-target/ Подскажите, а почему вам важно именно с primary синхронизировать?
yopp
В целом практика иметь назначенные роли для нод крайне опасная
yopp
Если вы хотите FT/HA то все ноды в PSS кластере должны иметь достаточно ресурсов для того чтоб стать primary и выдержать нагрузку и репликацию, в том числе inital sync с отвалившихся за оплог нод
Aleksandr
syncFrom это «временный» оверрайд sync target Persistence replSetSyncFrom/rs.syncFrom() provide a temporary override of default behavior. mongod will revert to the default sync behavior in the following situations: • The mongod instance restarts. • The connection between the mongod and the sync target closes. • If the sync target falls more than 30 seconds behind another member of the replica set. https://www.mongodb.com/docs/manual/tutorial/configure-replica-set-secondary-sync-target/ Подскажите, а почему вам важно именно с primary синхронизировать?
хотелось бы синкать с мастера потому что, кластер геораспределенный и хотелось бы иметь минимальный лаг на второй или третьей реплике по сравнению с праймари в случае падения последнего. В моем случае как раз все ноды с одинаковыми ресурсами и готовы выдержать всю нагрузку праймари и репликацию. так же у меня есть еще вопрос, при увеличениии оплога нужно ли ждать чтобы он полностью заполнился перед вводом нового члена реплики? данных не мало , 3ТБ
Андрей
Вообще это нормальная тема, когда какой-нибудь стэндбай по-умолчанию при включении репликасета синкается с другого стэндбая в пределах одного сетевого окружения тем более. Когда стэндбай источник в этом случае отваливается, второй стэндбай - его приёмник подключается к праймари сам.
Андрей
У меня таких реплик куча. Вздёрнул щас один стэндбай, второй пошёл на праймари.
yopp
Если необходимо вы можете отключить Chained Replication для всего репликасета: https://www.mongodb.com/docs/manual/tutorial/manage-chained-replication/
Андрей
Размазанная география из трёх нод всего? 🤨
Aleksandr
ну пока да, скромный кластер) вот как раз собираюсь заниматься масштабированием и читаю доки, но в них не всегда все очевидно. спасибо добрые люди) насчет репликации всех секондари с праймари я кипишнул, потому что на тестовом кластере там так и было. а на проде как вы описываете. видимо на тесте секондари ноды добавлялись одновременно и с тех пор не трогались, вот и сохранились параметры.
Глеб
Подскажите какие должны быть права для mongos Чтобы я мог хоть что то сделать в кластере? Сейчас имею такого пользователя: Создавал его так: use admin db.createUser( { user: "gleb", pwd: "adsqwe", roles: [ "root" ] }) А потом при логине в omgnos получаю ошибку при выполнении команды sh.status() "errmsg" : "not authorized on config to execute command { find: \"version\", filter: {}, limit: 1.0, singleBatch: true, lsid: { id: UUID(\"7bed830b-8005-4c21-bb29-a384d41789d8\") }, $clusterTime: { clusterTime: Timestamp(1689079336, 1), signature: { hash: BinData(0, 4B7B1BF42B4CB511A6B053B646698825A11932C2), keyId: 7254432842229219350 } }, $db: \"config\" }", РЕШЕНИЕ: Нужно было создать пользователя как я его создал выше и дать права db.grantRolesToUser("gleb", [{ role: "readWrite", db: "config" }])
Timur
добрый день! подскажите пожалуйста, со следующей проблемой: дано: 1. mongodb БД инстанс у aws, t3.medium 2. коллекция на 60к записей 3. нагрузка на cpu в среднем 50-70% проблема: сегодня заметили, что запрос типа findOne({$or: [ { id: "someId" }, { someField: "someValue" }, { someField2: "someValue2" } ]}) стал занимать около 8-10 секунд только до mongo Выяснилось, что проблема была в том, что отсутствовал индекс someField2, и после того как создал такой индекс, проблема решилась, теперь этот запрос занимает около 0.1 мс. Сама эта кверя findOne у нас существует уже несколько лет и проблем раньше не было. Вопрос: почему такое могло случиться только спустя время? Куда копать?
Бобомурод
скажите пожалуйста, коллекция с 500к записей в каждом из которых по 8 ключей сколько может занять введение нового индекса ?
Бобомурод
поиск по поле address занимает очень много времени, уже час жду результат хотя в описаних схемы написал что address это тоже индекс
Дэн Миков PRM
Приветствую! есть репликасет (праймари, секондари, арбитр). нужно на время вырубить виртуалку где живет арбитр. Можно ли это делать ? есть какая то специальная процедура? Не ушатаю ли я всю реплику?
Сергей
Добрый день. Где посмотреть инфу о том, в какой версии какой оператор был добавлен?
bookuxa
Ребят, я решил сделать M to M в Монго. То есть, документы: Товар – имеет много категорий (коллекция айдишников) Категория – имеет много товаров (коллекция айдишников) Я хочу, чтобы при создании товара ABC123 с категорией Х, в документ категории Х добавлялся этот товар
bookuxa
Как это реализуемо? Какие другие решения?
Larymar
А правда ли, что документоориентированная база данных - это то, на чем стоит реализовывать такую модель?
bookuxa
А правда ли, что документоориентированная база данных - это то, на чем стоит реализовывать такую модель?
Ну мне кажется нет) Решил потыкать просто и стало интересно разузнать
yopp
Если товаров немного (пара сотен) то отношения можно хранить прямо в документах продуктов и категорий
yopp
В целом я наверное не вижу смысла делать отдельную связь: вы можете хранить у продукта список всех категорий массивом и сделать по этому массиву индекс
yopp
В обратную сторону просто будете делать поиск по коллекции продуктов, по id категории
bookuxa
Если товаров немного (пара сотен) то отношения можно хранить прямо в документах продуктов и категорий
Получается на клиенте мне вставлять сразу в две коллекции? В категорию продукт, а в продукт категорию?
bookuxa
и категории можно было создать
yopp
Для этого сделайте отдельную коллекцию с категориями, а в документ с продуктом складывайте только их id
bookuxa
Стоит ли мне сделать в коллекции категории массив продуктов? Или лучше будет искать продукты из категории по запросу в коллекцию продуктов с айдишником категории?
yopp
Проще искать по коллекции продуктов
bookuxa
и правда! спасибо вам большое
bookuxa
прояснилось
yopp
Мне кажется «связующая» коллекция тут будет лишней, так как у связей нет никаких дополнительных атрибутов
bookuxa
я согласен
yopp
И рефлексию хранить смысла нет, так как она легко покрывается индексом по категориям в коллекции продуктов
bookuxa
А я могу на уровне БД запретить дубликаты в массиве айдшинков категорий?
yopp
Для одного документа продукта? Да, через unique compound index по {_id, category_ids}
Максим
Добрый вечер. Получил такую ошибку: P2031 Prisma needs to perform transactions, which requires your MongoDB server to be run as a replica set.
Максим
Монго в докере. Подскажите хотябы направление куда копать. Это или призма косячит или монго в докере?
yopp
Монго в докере. Подскажите хотябы направление куда копать. Это или призма косячит или монго в докере?
Вам нужно запустить монгу в режиме репликации, для этого передайте в контейнер параметр --replSet <rs_name>
Jamshidjon
Кто какой софт используется для рисования схем в монго? Ну проектирования коллекций в базе данных Поделитесь опытом пожалуйста 👀
Максим
Максим
я в общем нагуглил эту тему и поздал репликасет
Максим
теперь хз как к ним подключиться
Максим
вот они у меня запущены
Максим
вот такая строка но коннекта нет ошибка таймаута
Максим
version: '3' services: mongo1: hostname: mongo1 image: mongo expose: - 27017 ports: - 30001:27017 restart: always command: mongod --replSet my-mongo-set mongo2: hostname: mongo2 image: mongo expose: - 27017 ports: - 30002:27017 restart: always command: mongod --replSet my-mongo-set mongo3: hostname: mongo3 image: mongo expose: - 27017 ports: - 30003:27017 restart: always command: mongod --replSet my-mongo-set mongoinit: image: mongo # this container will exit after executing the command restart: "no" depends_on: - mongo1 - mongo2 - mongo3 command: > mongo --host mongo1:27017 --eval ' db = (new Mongo("localhost:27017")).getDB("test"); config = { "_id" : "my-mongo-set", "members" : [ { "_id" : 0, "host" : "mongo1:27017" }, { "_id" : 1, "host" : "mongo2:27017" }, { "_id" : 2, "host" : "mongo3:27017" } ] }; rs.initiate(config); '
yopp
вот такая строка но коннекта нет ошибка таймаута
Здесь вам нужно вместо localhost указать dns имена контейнеров с монгой
Максим
указывал
Максим
а блин, без портов?