@MongoDBRussian

Страница 293 из 342
Andrey
23.08.2018
11:22:40
Всем привет. Есть база данных base1. Нужно ее склонировать в рамках одного mongod instance в новую базу. Я правильно понял, мои действия запустить db.copyDatabase("base1","base1new") ? Или лучше использовать db.cloneDatabase? Что быстрее и безопаснее. База порядка 500Гб.

yopp
23.08.2018
12:49:21
Всем привет. Есть база данных base1. Нужно ее склонировать в рамках одного mongod instance в новую базу. Я правильно понял, мои действия запустить db.copyDatabase("base1","base1new") ? Или лучше использовать db.cloneDatabase? Что быстрее и безопаснее. База порядка 500Гб.
Если вы можете остановить монгу на время, то самый быстрый способ через копирование файлов хранилища. Составляете список, создаёте новую базу, в ней пустые коллекции, через collStat составляете список файлов, останавливаете монгу и заменяете файлы новых коллекций копией файлов оригинальных коллекций. Второй вариант mongodump и mongorestore. Запускаете на другом порту и через pipe делаете копию. Если вы не можете остановить монгу и в базу продолжается запись, то у вас будут проблемы и в общем виде задачу будет очень сложно решить. Так как copy и clone во-первых не point-in-time а значит данные будут неконсистентные, во-вторых они ещё и блокируют операции с базой, что может привести к отказу в обслуживании

Andrey
23.08.2018
12:55:35
Если я остановлю все что пишет в бд и запущу db.copydatabase это насколько долгий процесс? Допустим на 500гб? Или все зависит по ресурсам?

yopp
23.08.2018
12:57:49
Зависит от ресурсов, да. Но будет долго

Google
yopp
23.08.2018
12:57:54
Долго == часы

Если у вас НЖМД может и сутки

Andrey
23.08.2018
13:05:41
а есть способ проверить что в базу уже никто ничего не пишет? чтобы убедиться что можно копирование начинать. Сам только начал знакомится с монго

yopp
23.08.2018
13:06:51
отобрать у всех пользователей права на запись

Vova
23.08.2018
13:34:30
И в каких-то прекрасных апках без try..catch всё ляжет при попытке записи?

Constantin
23.08.2018
13:39:49
И в каких-то прекрасных апках без try..catch всё ляжет при попытке записи?
Вы будете удивлены, но у некоторых микросервисов умышленно закладывается поведение вывалиться, если другой сервис (а СУБД — это всего-навсего сервис), от которого он зависит выслал отказ в обслуживании.

Gleb
23.08.2018
13:42:22
Вы будете удивлены, но у некоторых микросервисов умышленно закладывается поведение вывалиться, если другой сервис (а СУБД — это всего-навсего сервис), от которого он зависит выслал отказ в обслуживании.
странно это звучит - если вы жыли в эпоху до контейнеров то просто отдайт 500, а там балансер сам отрубит уже обращение к сервису, а в 2018 году просто под с приложухой убьется после хелсчека или я так превартно слово «вывалиться» интерпретировал?

Constantin
23.08.2018
13:46:59
странно это звучит - если вы жыли в эпоху до контейнеров то просто отдайт 500, а там балансер сам отрубит уже обращение к сервису, а в 2018 году просто под с приложухой убьется после хелсчека или я так превартно слово «вывалиться» интерпретировал?
Не все приложения укладывют в контейнеры в 2018 году. Но принцип примерно как вы описали, разве что и так будет 500, если сервис упал, ему ничего отдавать не нужно. Вместо него оркестровщик попробует поставить новый.

Gleb
23.08.2018
13:47:48
ну ок согласен, я просто испытваю некую боль тк был знаком с разработчиками у которых софт просто в эксепшен падал навсегда

Constantin
23.08.2018
13:49:12
ну ок согласен, я просто испытваю некую боль тк был знаком с разработчиками у которых софт просто в эксепшен падал навсегда
try/catch тоже может таить много опасностей. Поставить его в неверном месте, и вместо падения и перезапуска в «нормальном» режиме, можно получить сервис, часть которого работает, а другая ушла в себя. Получается сервис с софт-локом. Нежить одним словом, которая может отдавать некорректный результат.

??M1noR??︻┳ั芫ี┳═─┵ ‎??
23.08.2018
15:28:32
Salom xamaga

S̶m̶°̶O̶k̶™?✔️
23.08.2018
15:30:27
salam voram

LocSg
23.08.2018
15:30:35
Salom xamaga
Ruscha gapr

Google
ABC
23.08.2018
19:41:27
Всем доброй ночи. Вопрос. Монго/Монгуз. Есть модель const jobSchema = new mongoose.Schema ({ name: String, result: {} }) На определенном этапе в result прилетает ключ tweets который является массивом. Как после этого обновлять массив? Как сделать unshift result.tweets в такой модели?

Constantin
23.08.2018
19:43:34
Посмотрите на команду $pull, но вам нужен будет какой-то уникальный идентификатор внутри result.tweeets, чтобы делать это без костылей.

ABC
23.08.2018
19:45:21
пулл же для удаления

Constantin
23.08.2018
19:45:49
пулл же для удаления
Сорри, почти сплю

Тогда вам нужен $push

ABC
23.08.2018
19:46:29
проблема в том что массив внутри объекта. я не доганаю как быть в таком случае? я знаю есть $push и тд. но как применить если массив внутри объекта?

Constantin
23.08.2018
19:47:27
Просто в ключе полный путь укажите: $push: { 'result.tweets': newTweet } Чтобы сделать unshift, нужно вроде $position в 0: $push: { 'result.tweets': { $position: 0, $each: [newTweet] } }

ABC
23.08.2018
19:49:29
точно отработало! спасибо. а то я нестил по другому. еще вопрос, $unshift же тоже есть? а то $push в конец добавляет, а надо в началао

Constantin
23.08.2018
19:50:51
точно отработало! спасибо. а то я нестил по другому. еще вопрос, $unshift же тоже есть? а то $push в конец добавляет, а надо в началао
https://docs.mongodb.com/manual/reference/operator/update/push/#push — вот тут все есть, $unshit нету, делается через $push. Написал выше как может срабоатать.

ABC
23.08.2018
19:52:24
спс попробую осилить

а можно в массив добавить сразу 2 объекта? он что по одному добавляет?

как-то кажется неправильно дергать 2 раза бд

Constantin
23.08.2018
19:53:34
Просто в ключе полный путь укажите: $push: { 'result.tweets': newTweet } Чтобы сделать unshift, нужно вроде $position в 0: $push: { 'result.tweets': { $position: 0, $each: [newTweet] } }
Вы просто вставляете все элементы массива $each в указанную позицию $position, в $each можете положить столько, сколько нужно элементов вставить

спс попробую осилить
Да не за что, хорошего вечера =)

ABC
23.08.2018
20:01:17
+++ вам также! уже что-то. это работает. const update = await Job.findOneAndUpdate({name: jobName}, {$push: {"result.tweets": {$each: [...difference]}}}, {new: true}) теперь догнать бы как в начало пушить а не в конец

для эого надо sort и слайс?

ABC
23.08.2018
20:05:07
точно увидел. прошу прощеняи пропустл. видимо тоже сплю уже

Google
ABC
23.08.2018
20:09:03
все работает как надо, спасибо еще раз!

Vova
23.08.2018
20:30:25
А как одним словом назвать всё это: $push $set $pull $position? хочу почитать об этом

ABC
23.08.2018
20:34:57
тремя

Array Update Operators

https://docs.mongodb.com/manual/reference/operator/update-array/

Andrey
24.08.2018
04:41:42
Доброе утро. Как можно выявлять битые коллекции и почему они возникают?

AstraSerg
24.08.2018
04:43:09
Доброе. Битые коллекции? Что за зверь?

??M1noR??︻┳ั芫ี┳═─┵ ‎??
24.08.2018
06:10:20
Kmsan õzi

Andrey
24.08.2018
06:54:18
Доброе. Битые коллекции? Что за зверь?
при копировании базы выпадает такое сообщение 1s2:PRIMARY> db.copyDatabase("pro","rg") { "errmsg" : "exception: BSONElement: bad type 41", "code" : 10320, "ok" : 0 }

[Anonymous]
24.08.2018
06:59:34
hi

AstraSerg
24.08.2018
07:00:52
it is not simple, it is VERY simple :)

AstraSerg
24.08.2018
07:03:01
here it is https://docs.mongodb.com/manual/tutorial/deploy-replica-set/

It is not very well when you learn only by example. You must read the documentation at least from time to time.

Admin
ERROR: S client not available

Andrey
24.08.2018
07:59:14
а, теперь ясно. Тогда вам сюда https://docs.mongodb.com/manual/reference/command/repairDatabase/
понятно что мне туда. Вопрос как это отслеживать, а главное как теперь найти коллекцию с которой траблы, тупо лопатить логи монги?

[Anonymous]
24.08.2018
07:59:28
done

thankyou @AstraSerg ?

AstraSerg
24.08.2018
08:03:41
thankyou @AstraSerg ?
You're welcome!

понятно что мне туда. Вопрос как это отслеживать, а главное как теперь найти коллекцию с которой траблы, тупо лопатить логи монги?
Так вам и не нужна коллекция. У вас же ошибка вылетает при копировании БД, и rapair отностися к БД Или вы хотите превентивно проверить всё на наличие ошибок?

Google
Andrey
24.08.2018
09:01:59
Так вам и не нужна коллекция. У вас же ошибка вылетает при копировании БД, и rapair отностися к БД Или вы хотите превентивно проверить всё на наличие ошибок?
копирование отвалилось по причине битого индекса или проблемы с коллекцией насколько я понял. Теперь, чтобы выполнить процедуру копирования мне получается нужно найти и починить коллекцию или индекс. И да хотелось бы как то отслеживать наличие таких проблем. Пока вижу только через логирование как то это смотреть. Думал может есть какая то надстройка или инструмент для отслеживания

Davydov
24.08.2018
09:02:27
день добрый, что-то туплю, и гугл не подсказывает где... есть колекция с несколькими миллионами записей, если я делаю через консольного клиентав ней запрос: db.mycol.find(myfilter).sort({_id:-1}).limit(1); отрабатывает моментально и выдает результат, пытаюсь сделать тоже самое через nodejs, вытягивает из курсора данные около полуминуты... с чем то может быть связано?

такс, пардон, похоже где-то не там я затупил, посносил весь лишний код, заработало...

MVP
24.08.2018
09:16:17
Подскажите в какую сторону копать - пишем простые данные по загрузке системы каждую минуту в монго. есть же какие то аггрегирующие функции ? Чтобы на стороне базы проводить усреднения ?

??M1noR??︻┳ั芫ี┳═─┵ ‎??
24.08.2018
09:26:33
Qoloyslor ey

Davydov
24.08.2018
09:34:43
причина была в том, что parseInt на число в фильтре не сделал, которое пришло в виде строки...

AstraSerg
24.08.2018
10:21:21
Andrey > мне получается нужно найти и починить коллекцию или индекс. нет, вам нужно починить БД

CFFTRP
24.08.2018
10:40:12
Привет, подскажите, как решить

Mongoose 5.x disallows passing a spread of operators to Model.aggregate(). Instead of Model.aggregate({ $match }, { $skip }), do Model.aggregate([{ $match }, { $skip }])", name: "MongooseError" }

При этом, всё по доке вроде сделано: .aggregate([ { $match: { userId } }, { $addFields: { campaigns: { $filter: { input: '$campaigns', as: 'campaign', cond: { $eq: ['$$campaign.isActive', true] } } } } }, { $project: { campaigns: { _id: 1, targeting: 1, position: 1, type: 1, // date: 1, // name: 1, }, widget: 1 } }]) .exec()

Andrey
24.08.2018
10:51:11
Какая версия монги?
TokuMX mongo shell v2.0.2-mongodb-2.4.10

AstraSerg
24.08.2018
10:52:55
TokuMX mongo shell v2.0.2-mongodb-2.4.10
2.4 разве ещё можно использовать??

yopp
24.08.2018
10:53:36
2.4 разве ещё можно использовать??
Давайте без оценочных суждений

AstraSerg
24.08.2018
10:53:50
Andrey
24.08.2018
10:54:19
это типа намек, что 2.4 ансаппортед?

yopp
24.08.2018
10:54:41
TokuMX mongo shell v2.0.2-mongodb-2.4.10
А там монга или tokumx?

AstraSerg
24.08.2018
10:55:03
yopp
24.08.2018
10:55:07
не, я серьёзно
У меня до недавнего времени вообще 1.0.х крутилась для личных нужд

Страница 293 из 342