yopp
читаешь 32 битный integer в начале файла, это будет размер первого документа, помоему включая эти 4 байта
yopp
проматываешь размер, будет следующий заголовок
yopp
и так до конца файла
Constantin
Спасибо большое за помощь и идеи, не буду писать парсер, руками нашел. Посмотрел код, предположил коллекцию, дальше предположил несколько диапазонов, и нашел документ. Массив-переросток оказался проблемой
bebebe
коллеги, приветствую хочу сделать 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 руками что-ли надо создавать? :/
bebebe
речь идет о 3.6.8
bebebe
собственно смотрю сюда: https://docs.mongodb.com/v3.6/reference/built-in-roles/
Vova
или она только в базе admin работает? Да, там в доке так и написано, что существует в базе админ
Vova
Делай use admin
bebebe
или она только в базе 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
притом почему то это очень плохо гуглится
bebebe
я что-то уже пару часиков как с этим парюсь.
bebebe
ага, я их смотрел, в admin, они пустые (видимо builtin не показываются)
bebebe
rs0:PRIMARY> db.getRoles() [ ]
yopp
{role: "restore", db: "project_genimg"}
yopp
ну да
yopp
rs0:PRIMARY> db.getRoles() [ ]
вы уверены что у вас admin база выбрана?
yopp
db.stats()
bebebe
вы уверены что у вас admin база выбрана?
cars rs0:PRIMARY> use admin switched to db admin rs0:PRIMARY> db.getRoles() [ ] ага
yopp
{role: "restore", db: "project_genimg"}
built-in роли есть только в admin, если вы руками не создавали роль в prohect_genimg, её там не будет
yopp
авторизация в монге это адочек, да
bebebe
при всем этом, у меня пользователь с ролью 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" } ] }
bebebe
но dbOwner, не хватает для restore
yopp
поменяйте {role: "restore", db: "project_genimg»} на {role: "restore", db: «admin»}
yopp
или просто на "restore"
yopp
roles: [«restore»]
yopp
аргх
yopp
как же раздражает эта автозамена кавычек
AstraSerg
если не на апле :)
AstraSerg
но, похоже, на апле
bebebe
поменяйте {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
built-in роли лучше укзаывать в короткой форме
yopp
я очень рекомендую максимально внимательно читать документацию. монговцы накрутили чёрти что
yopp
https://docs.mongodb.com/manual/reference/method/db.createUser/#roles
yopp
да
yopp
если вы в admin базе создаёте пользователей
yopp
а их лучше там создавать
bebebe
я создавал в базе в которую буду делать restore...
yopp
по опыту, лучше для авторизации/аутентификации оставить admin. иначе придётся постоянно руками указывать authDb. плюс потом фиг пользователей соберёшь по базам
bebebe
по опыту, лучше для авторизации/аутентификации оставить admin. иначе придётся постоянно руками указывать authDb. плюс потом фиг пользователей соберёшь по базам
благодарствую, я уже начал расстраиваться, какой-то неординарно большой входной порог в казалось бы простой rbac
yopp
это одно из плохих мест в монге
yopp
у них вообще с дизайном средств безопасности всё очень плохо
yopp
что авторизация/аутентификация, что x509
yopp
x509 это вообще для очень сильных духом
bebebe
в итоге решилось так: в базе admin, создал пользователя db.createUser({user: "user", pwd: "password", roles: ["restore", "dbOwner"]})
bebebe
спасибо коллеги.
yopp
да, keep it simple
yopp
у вас просто реплика, не шард?
bebebe
да. реплика
yopp
ну тогда godspeed. потому что в шарде ещё есть shard и local авторизация ;)
Dmitriy
ребят, всем привет! а может тут есть кто-то кто работает с монгой и может для меня разложить почему ее СТОИТ взять для финансовой системы вместо реляционной бд?
yopp
А чем реляционная бд не устраивает?
Sebor▂▅▇█▓▒░
А чем реляционная бд не устраивает?
Вот тоже самое в другом чате уже ответили)
Dmitriy
меня рдб всем устраивает, но есть не мое противоположное мнение, что надо использовать монгу из обоснований этого использования есть только, то что монга позволит более легко изменят схему данных. при этом на том моменте, когда я расстался с монгой у нее были проблемы с: отсутствием транзакций, уровней изоляции, есть вариант потери данных, скорость работы на больших объемах данных, отсутствие нормальное работы с агрегацией данных соответственно какие требования есть в принципе к системе: - производительност, порядка 10ММ транзакций (примерно 60ММ операций вставки изменения и на порядок больше операций чтения) в месяц на старте - транзакционность - гарантия обработки данных и их консистентности - наличие хранимых процедур - наличие возможности репликации данных с возможностью обработки реплицируемых данных хранимой процедурой до передачи в канал
yopp
«позволит более легко менять схему данных» это очень смешно
yopp
при том, что у вас есть с виду внятный список требований, основным требованиям у вас уделено ноль внимания
Dmitriy
«позволит более легко менять схему данных» это очень смешно
да мне тоже, но смех это все таки не аргумент
yopp
хранимых процедур нет
yopp
что такое «гарантия обработки данных» я не представляю даже
yopp
10 млрд транзакций, при этом вы говорите о 60 млрд вставок и 600 млрд (?!) чтений?
yopp
в 4.0 есть ACID
yopp
и транзакции тоже есть
Dmitriy
10 млрд транзакций, при этом вы говорите о 60 млрд вставок и 600 млрд (?!) чтений?
да, именно об этих цифрах я и говорю. транзакция имеется в виду логическая
yopp
схемы в монге вообще нету. это и плюс и минус
yopp
потому что если вы решите поменять существующие данные, вам будет _очень_ больно
yopp
это хорошо, потому что можно проповедовать append only стиль
yopp
т.е. старые схемы не изменяются, а всегда только дополняются
yopp
тогда это можно сделать не очень больно и очень гибко
yopp
но это даётся ценой размера документа
yopp
цифры у вас из реальной системы? это rtb?
AstraSerg
я б в плюсы монги добавил простоту репликации ну и шардирование
yopp
с миллиардами, тут скорее всего речь уже идёт о шардировании
yopp
в шардах нет транзакций и до 4.2 не будет
yopp
и не факт что в 4.2 будет :)
Dmitriy
цифры у вас из реальной системы? это rtb?
да, цифры я взял из ранее реализованной подобной системы, но это не rtb это финансовые транзакции