yopp
т.е. если операция в оплоге, она уже на диске
yopp
пойду узнаю больше про данные. вероятно они append only. тогда можно считать чексумму данных. тогда для ситуации ролбека можно считать документы, а для бекапа считать чексуму, например почасовую или 15минутную
ну это всё не поймает in-flight операции. т.е. клиент отправил инсерт с w:1, монга его получила и положила в движок, дала клиенту ack. ack долетел до клиента, но монга хлопнулась до того как движок успел записать что-то на диск монга поднялась, но так как ни в журнал, ни в хранилище ничего не записалось, она эту операцию восстановить не может
yopp
в теории, на клиенте можно мониторить clusterTime
yopp
и если внезапно у ноды clusterTime отъехал назад, то теоретически можно считать что операция на самом деле не закомитилась
yopp
но я сходу не могу сказать насколько это надёжный индикатор
Aleksey
звучит дороже чем повышение w
yopp
да, потому что это тоже вариант state persistency :)
yopp
чтоб узнать что что-то пропало, надо записать информацию о том, что может пропасть
Aleksey
вероятно из этого sli я смогу мотивировать подъем w. типа смотрите мы теряем транзакции потому что плохой w
Aleksey
но не наоборот
Aleksey
с учетом того что само по себе это редкая операция это тот еще квест
yopp
Ну тоесть при j: 1, в принципе ack будет значить что с высокой долей вероятности «потерю» будет видно в роллбэке
yopp
насколько дорого для вашего деплоймента j: 1 эт только тебе видно
yopp
но с j: 1 там тоже есть небольшой таймфрейм когда можно потерять незаметно
Aleksey
мне тоже не видно. я только на мониторинг смотрю. базу в глаза не видел ещё
yopp
а что, часто падает и что-то теряется?
Aleksey
нет конечно
Aleksey
это мыслеупражнение и попытка уровнять разные системы между собой
yopp
С данными sli сложно считать в реалтайме
yopp
тебе бы доку почитать.. Эт вот так делается
У нас не принятно рекомендовать почитать документцию, а принято давать ссылку на релевантные страницы документации
Aleksey
С данными sli сложно считать в реалтайме
вероятно лучше зайти со стороны чтения и понять целостность данных.
yopp
Верификация данных эт оч сложно
Aleksey
для произвольных да. для частных случаев вероятно нет. но тут уже будет вопрос не к монге а к приложению.
Aleksey
спасибо yopp. был рад поболтать.
Александр
Верификация данных эт оч сложно
Подскажите пожалуйста...Есть две коллекции. Есть ключ (имя пользователя). В первой коллекции хочу создать поле true/false, если есть документ с таким полем во второй коллекции. Если есть объект с полем userAdName, то true. Что- то такое. Какими методами пользоваться ? const infUser = _.find(res.informationUsers, { userAdName: cUser.name });
Viktar
Хочу сделать покрывающий индекс для полей field1,field2,field3,field4 в документе около 300 полей как должен выглядеть запрос, что бы не экстрактить весь документ а взять его из индекса? db.collection.find({},{field1:1,field2:1,field3:1,field4:!}) ?
yopp
_id: 0 ещё
Александр
_id: 0 ещё
Подскажите, как сделать это через Mongo ?
Viktar
_id: 0 ещё
Благодарю. Ид мне тоже надо будет.
yopp
в этом случае и его надо в индекс добавить
Максим
в этом случае и его надо в индекс добавить
Он разве не имеет индекса? По умолчанию
yopp
имеет, но вопрос про covered query. А он работает только если проекция точно совпадает с индексируемыми полями
yopp
Так как в coumpound индексе не указан _id, то без _id: 0 планировщик не сможет сделать covered query и всё равно пойдёт на диск за документом, чтоб вернуть _id
Максим
Понял. Не знаю пока об этом.
𝙊𝑙ẽ𝘨
Привет, посоветуйте пожалуйста хороший хостинг для mongodb, чтобы можно было слать по 1-3к запросов в секунду (не всегда, а пару минут например). Чтобы была возможность прям из хоста просматривать/редактировать базу. По бюджету баксов 20-30 наверное
Александр
Подскажите пожалуйста , как это переписать на запрос в aggregate ?
I
Вопрос, есть ли в mongoDb, аналог HashMap, TreeMap, т.е ключ значение который может хранить
Mike
доброго времени суток! как переименовать базу данных через mongorestore? флаги nsInclude, nsFrom, nsTo протестил, не работают 😢
✙ Nikita
Подскажите пожалуйста, для поля в документе, типа массива строк, по которому поиск будет осуществляться через оператор $in, можно ли построить индекс и как?
I
Да, он в терминах BSON называется Document
т.е $push: {key: "$foo", value: { $push : "$bar"}}
I
если я хочу добовлять в массив, по ключю
Rus
Делаю телеграмм бота, с использованием монго. Надо в массив добавить новый объект. Подскажите как можно это сделать?
Alexey
$push
Alexandr
Господа, нужна подсказка: есть кластер из 2 нод. По нему распределена GridFS. На 1 ноде 1,8Тб данных, а на 2 только 720Гб. При этом sh.status говорит, что на 1 ноде 5014 чанков, а на 2 - 5013. Как бы поровнее распределить данные? А то 1 вчера колом встал, когда место закончилось. Надо что-то срочно решать...
Alexander Cheprasov
Ребята, привет! Подскажите, я хочу сделать лотерейные билеты, у которых будет ID и я хочу его сделать числовым. Как при добавление новой записи (билета), сделать автоматический инкримент? Есть как в SQL id с автоинкриментом? использую: Mongoose
Ilya
mongoose?
Alexander Cheprasov
mongoose?
ой, да.. не уточнил
Ilya
ой, да.. не уточнил
https://www.npmjs.com/package/mongoose-auto-increment есть такое, но чот хз
yopp
ещё можно попробовать поделить чанки
yopp
тогда балансировщик сам их перенесёт
yopp
https://docs.mongodb.com/manual/reference/method/sh.splitFind/#mongodb-method-sh.splitFind
yopp
https://docs.mongodb.com/manual/reference/method/sh.moveChunk/#mongodb-method-sh.moveChunk
Alexandr
А не опасно это - руками таскать? Тем более на production?
yopp
Единственная опасность это нагрузка при балансировке потом
yopp
самый простой вариант это splitFind
yopp
ещё можно попробовать уменьшить размер чанка, раз у вас такая проблема
yopp
но для этого надо оценить медианный размер чанка на шардах, после чего уменьшить размер чуть ниже этого значения
Alexandr
Ок, спасибо, будем разбираться. Мне разработчики говорят, что чанк - это минимальная единица хранения данных в монго. И соответственно в 1 чанке лежит примерно 1 файл (фильм) в районе 1,5 гигабайт. Нужено это для того, чтобы по возможности файлы с фильмами не делились между серверами.
Alexandr
Пока никак не найду команду, чтобы проверить размер чанка...
Alexander Cheprasov
Парни, такая проблема... У меня на серваке почему-то установилась монго версии 2.6..... И я это понял не сразу, уже база в бою.... Как мне корректно смигрировать?
yopp
Ок, спасибо, будем разбираться. Мне разработчики говорят, что чанк - это минимальная единица хранения данных в монго. И соответственно в 1 чанке лежит примерно 1 файл (фильм) в районе 1,5 гигабайт. Нужено это для того, чтобы по возможности файлы с фильмами не делились между серверами.
Если вы используете gridfs то при загрузке файла драйвер будет резать его на фрагменты, это gridfs чанки. Размер такого фрагмента можно регулировать в драйвере, это задача приложения. По умолчанию размер фрагмента 255кБ и делать меньше его в большинстве случаев бессмысленно. В шардированном кластере чанк имеет другое значение: это диапазон ключа шардирования, который покрывает какое-то количество документов. Размер чанка так-же ограничен, но уже настройками сервера db.setting.find({_id: ‘chunk_size’}). При превышении размера, диапазон будет разделен на два и соотвественно чанк разделится на два новых в соотвествии с двумя новыми диапазонами. Если ключ больше не делится, то чанк будет помечен как jumbo. Балансировщик чанков работает очень примитивно: он пытается равномерно распределить чанки по шардам, но не по размеру, а по количеству.
yopp
Размер фрагмента файла ограничен максимальным размером документа, минус дополнительные поля ~15Mb. Размер чанка ограничен 1гб
yopp
С hashed индексом фрагменты файлов в gridfs должны более-менее равномерно распределятся по кластеру
yopp
если у вас standalone, других вариантов в принципе нет
yopp
если у вас репликасет, то ещё возможен rolling upgrade по всем минорным версиям: 2.6 -> 3.0 -> 3.2 -> 3.4 -> 4.0 -> 4.2 -> 4.4
yopp
по одной обновляете каждую ноду до следующей минорной версии
yopp
https://docs.mongodb.com/manual/replication/
Alexander Cheprasov
Буду разбираться, спасибо) Страшно конечно, базу уничтожить.... Посмотрю как проверить что у меня репликасет, надеюсь на это и поднимусь по минорным версиям
Alexandr
Если вы используете gridfs то при загрузке файла драйвер будет резать его на фрагменты, это gridfs чанки. Размер такого фрагмента можно регулировать в драйвере, это задача приложения. По умолчанию размер фрагмента 255кБ и делать меньше его в большинстве случаев бессмысленно. В шардированном кластере чанк имеет другое значение: это диапазон ключа шардирования, который покрывает какое-то количество документов. Размер чанка так-же ограничен, но уже настройками сервера db.setting.find({_id: ‘chunk_size’}). При превышении размера, диапазон будет разделен на два и соотвественно чанк разделится на два новых в соотвествии с двумя новыми диапазонами. Если ключ больше не делится, то чанк будет помечен как jumbo. Балансировщик чанков работает очень примитивно: он пытается равномерно распределить чанки по шардам, но не по размеру, а по количеству.
Подключился к mongos, выполнил db.setting.find({_id: ‘chunk_size’}) - в ответ ничего. Под другим пользователем (который dbadmin) - "errmsg" : "not authorized on test to execute command { find: \"setting\", filter: { _id: \"chunk_size\" }