Viktar
На официальном сайте очень хорошая документация. Плюс у них есть монго академия, там хорошие курсы
Aleksey
https://docs.mongodb.com/manual/administration/replica-set-deployment/ https://docs.mongodb.com/manual/tutorial/configure-a-hidden-replica-set-member/ https://docs.mongodb.com/manual/core/backups/
Как раз это читаю. При повреждении первичной базы, из hidden member выгружается монгодамп и загружается в рабочую? или у нее просто меняется тип на примари и она же может быть сразу использована как рабочая? Или какой то другой способ используется?
yopp
Зависит от того что считается повреждением, от RTO, от ресурсов хоста на котором запущен hidden member
yopp
Часто hidden member используется как источник снепшотов, которые дальше используются для быстрого восстановления
Aleksey
К примеру повреждение - это вирус шифровальщик, который уронил весь сервер и остался только hidden member на другом сервере
T.A
всем привет. есть один уникальный компаунд индекс на четыре поля из которых нужно убрать поле date. для этого я должен удалить индекс и заново настроить новый да?
Viktar
Да
yopp
К примеру повреждение - это вирус шифровальщик, который уронил весь сервер и остался только hidden member на другом сервере
Это только небольшая часть. Если упростить, то любой механизм резервного копирование это страхование от чего-то. Т.е. стоит начать с модели рисков, а любой риск упирается в денежные потери. Со списком рисков и убыткам которые они несут можно сформировать бюджет, поделить данные по убытком от потери и недоступности, а потом свести это к целям по времени восстановления и точке восстановления (Recovery Time & Recovery Point Objectves). И уже после этого можно будет понять какими инструментами можно достигнуть целей
yopp
Абстрактное резервное копирование абстракно не работает :)
yopp
И к сожалению, о том что оно не работает, вы узнаете только когда что-то произойдёт
Null
4.4.1 (Sep 9) ◦ 4.2.10 (Oct 2) ◦ 4.0.20 (Aug 21) • Решение проблем с MongoDB по подписке • Документация • Официальные курсы (Бесплатно) Stable: 4.4.1 (Sep 9) ◦ Bugfix: 4.2.10 (Oct 2), 4.0.20 (Aug 21) Legacy: 3.6.20 (Sep 14) По вопросам платной поддержки и покупки лицензий пишите @dd_bb ☠️: 3.4.23 (Jan ‘20), 3.2.21 (Dec ’18), 3.0.15 (May ’17)
T.A
Рекомендую сперва построить индекс без поля date, а потом удалять старый.
блин точно. спасибо большое👍🏻 кстати они не будут конфликтовать да? и ещё сейчас 3.4 млн записей в коллекции. создание нового индекса не сильно будет напрягать сервер?
yopp
для того чтоб построить индекс, монга прочитает всю коллекцию
T.A
будет напрягать
главное чтобы не убила😅 а так сервер мощный. цп 32 ядра и 128 гб озу
Andrey
Коллеги, в документации пишут что с 4.4 по умолчанию кластер реплик "читает" в зеркальном варианте. А что это значит на практике, читает со всех нод?
yopp
По-умолчанию 1% трафика зеркалируется на все secondary ноды чтоб в кеш загрузились актуальные данные. Это необходимо для того, чтоб после выборов новый primary не испытывал boot storm, когда все запросы требуют загрузить данные с диска
yopp
afaik, это никак не влияет на ответы
Andrey
afaik, это никак не влияет на ответы
То есть чтения так и идет с primary по умолчанию?
Viktar
То есть чтения так и идет с primary по умолчанию?
Регулируется драйвером. Можно указать предпочитать праймари, секо́ндари, ближайший. Дефолтное значение праймари.
Andrey
Регулируется драйвером. Можно указать предпочитать праймари, секо́ндари, ближайший. Дефолтное значение праймари.
да это я читал...смутил текст документации Starting in version 4.4, MongoDB provides mirrored reads to pre-warm the cache of electable secondary members (i.e. members with priority greater than 0). With mirrored reads (which is enabled by default), the primary can mirror a subset of operations that it receives and send them to a subset of electable secondaries. The size of the subset is configurable.
Andrey
то есть по факту, кластер из реплик на скорость ответа кластера влиять не будет, для производительности чтения необходимо шардироваться?
Viktar
Это как раз про то, что говорил @dd_bb
Andrey
Да я, просто уточняюсь
Andrey
на секондари? принудительно?
Vladimir
Ага, и желательно не всей толпой в одну и ту же
Viktar
Это ускорит только в том случае если большая нагрузка
Vladimir
на секондари? принудительно?
Ну при подключении указываешь, что предпочитать реплику, а не мастер и вперед
Andrey
то есть по факту, из приложения, например, я должен узнавать какая сейчас примари, остальные в условный пул и по раундробину например ходить по циклу?
Andrey
по ним
Viktar
Для ускорения: индексы и шардирование
Andrey
индексы есть
Vladimir
то есть по факту, из приложения, например, я должен узнавать какая сейчас примари, остальные в условный пул и по раундробину например ходить по циклу?
Я бы для начала просто отдал на откуп драйвера, если его стратегия окажется для вас не очень - тогда уже думать о ручном раундробине
yopp
https://docs.mongodb.com/manual/core/read-preference/
Anton
Ребят! Есть две коллекции, как самым приемлемым способом выделить ‘левую разность’, т.е такие ID’s которые есть в одной коллекции но нет в другой
Viktar
Попробуйте лукап. Я похожую задачу решал через for each.
Anton
Парни, а в чем трабла что restore коллекции в 10gb bson крашит линукс и не дает ресторнуть коллекцию
Anton
На винде тоже самое Упирается в 50% от оперативки
Anton
Подскажите бестпрактис для рестора и бэкапа? Лучше уходить от бэкапа самих данных к снапшотам файловой системы?
Котяй
Что быстрее? col.findOne({ _id: 100500 }, { _id: 1 }) col.count({ _id: 100500 })
Nick
Что быстрее? col.findOne({ _id: 100500 }, { _id: 1 }) col.count({ _id: 100500 })
второе, т.к. не будет читать с диска/из памяти документ
Котяй
второе, т.к. не будет читать с диска/из памяти документ
А каким образом движок понимает, что поиск окончен? Он учитывает, что индекс уникальный?
Котяй
Да
Спасибо.
Ilya
второе, т.к. не будет читать с диска/из памяти документ
А разве тут не тот случай когда запрос файнд попадает под covered query и запрос отрабатывает только по индексу то есть быстро?
Viktar
И тот и другой вариант отрабатывает быстро. Я если честно не вижу особой разницы.
Vlad
Всем привет! Хочу вытащить фото с бд на сайт, но не получается, как правильно ето сделать?
Andrey
Коллеги, в тестовой среде упала по питанию secondary реплика(по питанию сервер). монга - версия 4.4.1, после рестарта такое: "msg":"Detected unclean shutdown - Lock file is not empty","attr":{"lockFile":"/data/db/mongod.lock"}} "ctx":"initandlisten","msg":"WiredTiger error","attr":{"error":-31802,"message":"[1603616892:949640][1:0x7f6e2821aa80], file:local/collection/16--7182651441678380803.wt, txn-recover: __wt_block_extlist_read, 1132: file contains a corrupted live.avail extent list, range 10284097536-12431585280 past end-of-file: WT_ERROR: non-specific WiredTiger error"} "ctx":"initandlisten","msg":"WiredTiger error","attr":{"error":-31804,"message":"[1603616892:949678][1:0x7f6e2821aa80], file:local/collection/16--7182651441678380803.wt, txn-recover: __wt_block_extlist_read, 1132: block manager extension list failure: WT_PANIC: WiredTiger library panic"}} {"t":{"$date":"2020-10-25T09:08:12.949+00:00"},"s":"F", "c":"-", "id":23089, "ctx":"initandlisten","msg":"Fatal assertion","attr":{"msgid":50853,"file":"src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp","line":446}} {"t":{"$date":"2020-10-25T09:08:12.949+00:00"},"s":"F", "c":"-", "id":23090, "ctx":"initandlisten","msg":"\n\n***aborting after fassert() failure\n\n"} {"t":{"$date":"2020-10-25T09:08:12.949+00:00"},"s":"F", "c":"CONTROL", "id":4757800, "ctx":"initandlisten","msg":"Writing fatal message","attr":{"message":"Got signal: 6 (Aborted).\n"}} И не стартует базу - есть какая-то общепринятая практика действий по восстановлению реплики. Или проще удалить все, и заново подключить реплику к кластеру?
Vlad
Всем привет! Хочу вытащить фото с бд на сайт, но не получается, как правильно ето сделать?
Leonid
Всем привет! Хочу вытащить фото с бд на сайт, но не получается, как правильно ето сделать?
Максимально абстрактный вопрос. На него невозможно ответить
Leonid
Сформулируй точнее что не так
Vlad
У меня есть каталог товаров Есть карточка товара Есть слайдер с фото Как мне получить фото с бд Сейчас у меня просто есть поле images: "url" url - ето просто ссилка на картинку но она выводится как строка, а я хочу что бы она вывелась как фото
Vlad
и в каждом слайдере есть по пару фото
yopp
Коллеги, в тестовой среде упала по питанию secondary реплика(по питанию сервер). монга - версия 4.4.1, после рестарта такое: "msg":"Detected unclean shutdown - Lock file is not empty","attr":{"lockFile":"/data/db/mongod.lock"}} "ctx":"initandlisten","msg":"WiredTiger error","attr":{"error":-31802,"message":"[1603616892:949640][1:0x7f6e2821aa80], file:local/collection/16--7182651441678380803.wt, txn-recover: __wt_block_extlist_read, 1132: file contains a corrupted live.avail extent list, range 10284097536-12431585280 past end-of-file: WT_ERROR: non-specific WiredTiger error"} "ctx":"initandlisten","msg":"WiredTiger error","attr":{"error":-31804,"message":"[1603616892:949678][1:0x7f6e2821aa80], file:local/collection/16--7182651441678380803.wt, txn-recover: __wt_block_extlist_read, 1132: block manager extension list failure: WT_PANIC: WiredTiger library panic"}} {"t":{"$date":"2020-10-25T09:08:12.949+00:00"},"s":"F", "c":"-", "id":23089, "ctx":"initandlisten","msg":"Fatal assertion","attr":{"msgid":50853,"file":"src/mongo/db/storage/wiredtiger/wiredtiger_util.cpp","line":446}} {"t":{"$date":"2020-10-25T09:08:12.949+00:00"},"s":"F", "c":"-", "id":23090, "ctx":"initandlisten","msg":"\n\n***aborting after fassert() failure\n\n"} {"t":{"$date":"2020-10-25T09:08:12.949+00:00"},"s":"F", "c":"CONTROL", "id":4757800, "ctx":"initandlisten","msg":"Writing fatal message","attr":{"message":"Got signal: 6 (Aborted).\n"}} И не стартует базу - есть какая-то общепринятая практика действий по восстановлению реплики. Или проще удалить все, и заново подключить реплику к кластеру?
если это unclean shutdown то попробуйте удалить /data/db/mongod.lock и перезапустить ноду
Vlad
та я понимаю просто я хочу вывести фото, а оно мне выводится как строка
Vlad
потому что я задал String ему
Andrey
та я понимаю просто я хочу вывести фото, а оно мне выводится как строка
фото - это набор байт, у вас ссылка на этот набор байт - вы понимаете разницу?
Vlad
да
Viktar
потому что я задал String ему
Нет. В базе у вас хранится ссылка. Вам надо сходить по ней и загрузить картинку. Это к монге не имеет отношения
Andrey
да
видимо нет...кто будет качать картинку по ссылку? монга?
yopp
потому что я задал String ему
а куда у вас ссылка ведёт?
Vlad
ссылка ведет на картинку
yopp
Есть два варианта: 1) Хранить ссылки в базе, а файлы где-то во вне 2) Хранить файлы в базе, например через gridfs и отдавать ссылку на файл, по которой какой-то сервис может отдать картинку по http из монги
yopp
ещё есть вариант inline картинки, но его не стоит использовать
Максим
Она точно не будет))
Конечно будет. Я так делал. Написал в монгу стрингу «мерседес», потом скачал оттуда автомобиль. Теперь таксую в убере. 😂