@MongoDBRussian

Страница 312 из 342
yopp
26.09.2018
10:29:25
forEach это дорого будет

сериализация/десериализация

хотя конечно если документов не очень много может и прокатить

Constantin
26.09.2018
10:36:21
Много, снимаю дамп уже, буду на локальной машине прогонять

Google
Constantin
26.09.2018
10:36:25
Спасибо всем

но самое главное: первые 32 байта — размер документа
Вот это очень крутая идея, попарсить bson напрямую

Это же бинарный формат, должно будет быстро разобраться, посмотрю какие байты делят документы на части

yopp
26.09.2018
10:38:18
тьфу, первые 32 бита :)

читаешь 32 битный integer в начале файла, это будет размер первого документа, помоему включая эти 4 байта

проматываешь размер, будет следующий заголовок

и так до конца файла

Constantin
26.09.2018
10:47:48
Спасибо большое за помощь и идеи, не буду писать парсер, руками нашел. Посмотрел код, предположил коллекцию, дальше предположил несколько диапазонов, и нашел документ. Массив-переросток оказался проблемой

bebebe
26.09.2018
11:38:09
коллеги, приветствую хочу сделать mongorestore, команда моя выглядит так: mongorestore --host mongodb-replicaset:27017 --username user1 --password 'pass1' --nsInclude='*' --nsFrom='project_genimg_dev.*' --nsTo='project_genimg.*' --gzip --archive=/tmp/project_genimg_dev.db на что получаю что не хватает пермишеннов у пользователя user1 в project_genimg. 2018-09-26T11:35:27.313+0000 Failed: project_genimg.cars: error reading database: not authorized on project_genimg to execute command { listCollections: 1, cursor: { batchSize: 0 }, $db: "project_genimg" } но когда я пытаюсь по документации создать пользвоателя у котрого эти пермишенны были бы, я получаю что нет существующий роли restore в project_genimg, хотя это вроде как built-in роль? или она только в базе admin работает? rs0:PRIMARY> use project_genimg rs0:PRIMARY> db.createUser({user: "user1", pwd: "pass1", roles: [{role: "dbOwner", db: "project_genimg"}, {role: "restore", db: "project_genimg"}, {role: "backup", db: "project_genimg"} ]}) 2018-09-26T11:27:21.972+0000 E QUERY [thread1] Error: couldn't add user1: No role named restore@project_genimg : мне эту роль restore руками что-ли надо создавать? :/

речь идет о 3.6.8

собственно смотрю сюда: https://docs.mongodb.com/v3.6/reference/built-in-roles/

Vova
26.09.2018
11:40:46
или она только в базе admin работает? Да, там в доке так и написано, что существует в базе админ

Google
Vova
26.09.2018
11:40:50
Делай use admin

bebebe
26.09.2018
11:52:36
или она только в базе admin работает? Да, там в доке так и написано, что существует в базе админ
ээм, в том то и дело, получаю ровно то же самое: $ mongo -u admin -p admin mongodb-replicaset:27017/admin rs0:PRIMARY> db.createUser({user: "user", pwd: "pass", roles: [{role: "dbOwner", db: "project_genimg"}, {role: "restore", db: "project_genimg"} ]}) 2018-09-26T11:51:29.764+0000 E QUERY [thread1] Error: couldn't add user: No role named restore@project_genimg : может быть я что-либо концептуально не понимаю?

притом почему то это очень плохо гуглится

я что-то уже пару часиков как с этим парюсь.

bebebe
26.09.2018
12:00:50
ага, я их смотрел, в admin, они пустые (видимо builtin не показываются)

rs0:PRIMARY> db.getRoles() [ ]

yopp
26.09.2018
12:01:03
{role: "restore", db: "project_genimg"}

ну да

rs0:PRIMARY> db.getRoles() [ ]
вы уверены что у вас admin база выбрана?

db.stats()

bebebe
26.09.2018
12:01:42
вы уверены что у вас admin база выбрана?
cars rs0:PRIMARY> use admin switched to db admin rs0:PRIMARY> db.getRoles() [ ] ага

yopp
26.09.2018
12:02:27
{role: "restore", db: "project_genimg"}
built-in роли есть только в admin, если вы руками не создавали роль в prohect_genimg, её там не будет

авторизация в монге это адочек, да

bebebe
26.09.2018
12:03:02
при всем этом, у меня пользователь с ролью dbOwner созодается без проблем rs0:PRIMARY> db.createUser({user: "user1", pwd: "pass1", roles: [{role: "dbOwner", db: "project_genimg"} ]}) Successfully added user: { "user" : "user1", "roles" : [ { "role" : "dbOwner", "db" : "project_genimg" } ] }

но dbOwner, не хватает для restore

yopp
26.09.2018
12:03:44
поменяйте {role: "restore", db: "project_genimg»} на {role: "restore", db: «admin»}

или просто на "restore"

roles: [«restore»]

аргх

Google
yopp
26.09.2018
12:04:46
как же раздражает эта автозамена кавычек

AstraSerg
26.09.2018
12:05:12
если не на апле :)

но, похоже, на апле

bebebe
26.09.2018
12:06:16
поменяйте {role: "restore", db: "project_genimg»} на {role: "restore", db: «admin»}
а вот так получилось, да Successfully added user: { "user" : "user3", "roles" : [ { "role" : "dbOwner", "db" : "project_genimg" }, { "role" : "restore", "db" : "admin" } ] }

yopp
26.09.2018
12:06:48
built-in роли лучше укзаывать в короткой форме

я очень рекомендую максимально внимательно читать документацию. монговцы накрутили чёрти что

https://docs.mongodb.com/manual/reference/method/db.createUser/#roles

bebebe
26.09.2018
12:07:39
yopp
26.09.2018
12:07:49
да

если вы в admin базе создаёте пользователей

а их лучше там создавать

bebebe
26.09.2018
12:08:22
я создавал в базе в которую буду делать restore...

yopp
26.09.2018
12:09:26
по опыту, лучше для авторизации/аутентификации оставить admin. иначе придётся постоянно руками указывать authDb. плюс потом фиг пользователей соберёшь по базам

bebebe
26.09.2018
12:10:22
по опыту, лучше для авторизации/аутентификации оставить admin. иначе придётся постоянно руками указывать authDb. плюс потом фиг пользователей соберёшь по базам
благодарствую, я уже начал расстраиваться, какой-то неординарно большой входной порог в казалось бы простой rbac

yopp
26.09.2018
12:10:35
это одно из плохих мест в монге

у них вообще с дизайном средств безопасности всё очень плохо

что авторизация/аутентификация, что x509

x509 это вообще для очень сильных духом

bebebe
26.09.2018
12:11:19
в итоге решилось так: в базе admin, создал пользователя db.createUser({user: "user", pwd: "password", roles: ["restore", "dbOwner"]})

Google
bebebe
26.09.2018
12:11:28
спасибо коллеги.

yopp
26.09.2018
12:11:31
да, keep it simple

у вас просто реплика, не шард?

bebebe
26.09.2018
12:12:22
да. реплика

yopp
26.09.2018
12:13:03
ну тогда godspeed. потому что в шарде ещё есть shard и local авторизация ;)

Dmitriy
26.09.2018
13:17:00
ребят, всем привет! а может тут есть кто-то кто работает с монгой и может для меня разложить почему ее СТОИТ взять для финансовой системы вместо реляционной бд?

yopp
26.09.2018
13:18:21
А чем реляционная бд не устраивает?

Alan
26.09.2018
13:24:52
А чем реляционная бд не устраивает?
Вот тоже самое в другом чате уже ответили)

Dmitriy
26.09.2018
13:40:03
меня рдб всем устраивает, но есть не мое противоположное мнение, что надо использовать монгу из обоснований этого использования есть только, то что монга позволит более легко изменят схему данных. при этом на том моменте, когда я расстался с монгой у нее были проблемы с: отсутствием транзакций, уровней изоляции, есть вариант потери данных, скорость работы на больших объемах данных, отсутствие нормальное работы с агрегацией данных соответственно какие требования есть в принципе к системе: - производительност, порядка 10ММ транзакций (примерно 60ММ операций вставки изменения и на порядок больше операций чтения) в месяц на старте - транзакционность - гарантия обработки данных и их консистентности - наличие хранимых процедур - наличие возможности репликации данных с возможностью обработки реплицируемых данных хранимой процедурой до передачи в канал

yopp
26.09.2018
13:50:49
«позволит более легко менять схему данных» это очень смешно

при том, что у вас есть с виду внятный список требований, основным требованиям у вас уделено ноль внимания

Dmitriy
26.09.2018
13:51:31
«позволит более легко менять схему данных» это очень смешно
да мне тоже, но смех это все таки не аргумент

yopp
26.09.2018
13:51:46
хранимых процедур нет

что такое «гарантия обработки данных» я не представляю даже

Dmitriy
26.09.2018
13:52:23
yopp
26.09.2018
13:52:33
10 млрд транзакций, при этом вы говорите о 60 млрд вставок и 600 млрд (?!) чтений?

в 4.0 есть ACID

и транзакции тоже есть

Dmitriy
26.09.2018
13:53:14
10 млрд транзакций, при этом вы говорите о 60 млрд вставок и 600 млрд (?!) чтений?
да, именно об этих цифрах я и говорю. транзакция имеется в виду логическая

yopp
26.09.2018
13:53:19
схемы в монге вообще нету. это и плюс и минус

Google
yopp
26.09.2018
13:53:32
потому что если вы решите поменять существующие данные, вам будет _очень_ больно

это хорошо, потому что можно проповедовать append only стиль

т.е. старые схемы не изменяются, а всегда только дополняются

тогда это можно сделать не очень больно и очень гибко

но это даётся ценой размера документа

цифры у вас из реальной системы? это rtb?

AstraSerg
26.09.2018
13:55:09
я б в плюсы монги добавил простоту репликации ну и шардирование

yopp
26.09.2018
13:56:04
с миллиардами, тут скорее всего речь уже идёт о шардировании

в шардах нет транзакций и до 4.2 не будет

и не факт что в 4.2 будет :)

Dmitriy
26.09.2018
13:56:43
цифры у вас из реальной системы? это rtb?
да, цифры я взял из ранее реализованной подобной системы, но это не rtb это финансовые транзакции

yopp
26.09.2018
13:57:10
я бы исходил не из объёма, а из конкретных операций

потому что вставлять 3к документв в секунду это плевое дело

но вы же не просто их хранить хотите, да? вы хотите эти данные как-то обрабатывать

и вот эта обработка и есть самое узкое место

Dmitriy
26.09.2018
13:58:27
yopp
26.09.2018
13:58:39
вы ничего конкретного не написали

это «мы будем обрабатывать данные»

Dmitriy
26.09.2018
13:59:11
вот это " отсутствие нормальное работы с агрегацией данных"

прошу прощения не перенес в требования

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