
Хекс
20.08.2017
00:50:35
Господа, есть какой-то хак из json-a класс сгенерить? Для вставки в код
Ну или инструкция как это ручками сделать
java*

AlexGott
20.08.2017
01:24:36

Google

Хекс
20.08.2017
01:28:37

Alex
20.08.2017
08:00:17
Всем привет. Вот подскажите мне пожалуйста тупому, когда стоит держать все данные в одной колекции, а когда стоит делать отдельную ??? Проблема в том что есть допустим юзер, у него может быть оповещения, выводы, депозиты, и всего этого добра может быть ой как много! Все это в юзвере чтоли хранить???
точнее проблема в дальнейшей выборки, по user.id допустим

Хекс
20.08.2017
09:24:12
?

Viktor
22.08.2017
06:57:32
Добрый день, можно ли сделать в монге upsert (по _id) сразу нескольких документов?

Nick
22.08.2017
07:52:17
нескольких доков с одинаковым _id?

Sergey
22.08.2017
07:58:32

Viktor
22.08.2017
08:00:21
Опишу кейс подробней: хочу записывать документы пачками (запросы на вставку идут параллельно с разных аппликейшен нод) и среди этих разных пачек могут оказаться два документа с одинаковым _id, нужно просто оставить последний пришедший
Слать документы по одному получается дороже намного

Nick
22.08.2017
08:25:06
тебе нужен bulkWrite
https://docs.mongodb.com/v3.4/reference/method/db.collection.bulkWrite/

Google

Nick
22.08.2017
08:25:35
просто делаешь всеоперации Update c включенны upsert

Viktor
22.08.2017
09:04:19
гляну, спасибо

Ruslan
22.08.2017
15:09:43
В монге же в массивах порядок гарантирован?
Что элемент, который я добавлю, всегда будет последний до момента добавления следующего, например?

Pavel
22.08.2017
15:14:54
да

David
23.08.2017
11:34:05
если хранить отдельно то встает беда с атомарностью и отсутсвием транзакций
если решишь все хранить в одном, то в моменте упрешься в долгий ретривинг и парсинг огромных документов
придется писать projection'ы чтобы не нагружать систему в пустую
еще, пихая все в один документ, не стоит забывать, что у монги на размер документа есть ограничение


Oleg ?
24.08.2017
07:54:18
@dd_bb привет
подскажи, вот тут я могу одну машину из реплика сет указать ? prometheus exporter
# List of mongos instanes to connect
mongos:
- mongodb://user:password@localhost:27170
- mongodb://user:password@localhost:27171
- mongodb://user:password@localhost:27172
или все надо ?

yopp
24.08.2017
07:55:26
Привет. Можешь и одну. Но если тебе нужно видеть инфу со всего кластера, то нужно все указать.

M
24.08.2017
07:55:57
лучше все. При падении ноды, к которой идет коннект - драйвер не узнает что есть другие.

yopp
24.08.2017
07:56:05
Это не про драйвер вопрос
Когда поправлюсь и перестану прокрастинировать, выкачу бинарную сборку, которую по прометеевским заветам надо будет на каждую ноду отдельно запускать.
Сейчас если в кластере кто-то упал, экспортер может перестать успевать собирать метрики

Oleg ?
24.08.2017
08:01:52
ага, так и сделал :)

yopp
24.08.2017
08:02:00
Иначе коллекции не будут экспортироваться

Google

yopp
24.08.2017
08:02:09
?

Oleg ?
24.08.2017
12:28:11
Ребзя, подскажите.
show dbs выдает мне базу 32 гб
я почистил коллекции
сделал repair
место не уменьшилось практически
хотя когда вывожу стату коллекций - явно видно что они уменьшились
монгу ребутал, думал на fd
где что глянуть можно ?

David
24.08.2017
12:30:04
индексы?

Oleg ?
24.08.2017
12:37:21
а как их размер можно глянуть ?
в stats ?

David
24.08.2017
12:38:53
Можно прямо в каталоге глянуть
Где база лежит

xPushkin
24.08.2017
12:47:50

Ruslan
24.08.2017
13:13:42
привет всем, камрады, проясните идеологию, монго хранит документы и обесепечивает "транзакцию" в рамках одного документа, т.е. если его меняем, то целиком.
Как там хранить иерархические данные, например, машины определённой организации? Всю инфу писать в одном документе или делать коллекцию организаций, коллекцию машин и коллекцию связей?
Как этим правильно пользоваться?

Yuriy
24.08.2017
13:14:39
Второе, но можно без коллекции связей.

Ruslan
24.08.2017
13:14:53
а как связывать документы?

Yuriy
24.08.2017
13:15:05
Достаточно будет у машины иметь ссылку на id организации

Алексей
24.08.2017
13:15:11
в приложении связывать

Ruslan
24.08.2017
13:15:20
отдельными запросами выдёргивать?

Google

Yuriy
24.08.2017
13:15:59
Да, но это будет populate если у вас драйвер позволяет, фактически это отдельный запрос.

Ruslan
24.08.2017
13:16:29
у меня много инфы с неопределёнными полями, поэтому смотрю на монго, на реляционке делать сложнее, но с монгой только начал разбираться

GNU/Docker
24.08.2017
13:16:30
еще есть DBRef

Ruslan
24.08.2017
13:16:36
ок, идею понял, спасибо

Yuriy
24.08.2017
13:17:42
DBRef на практике ни где еще не встречал. Оно юзабельно?

yopp
24.08.2017
13:56:57
привет всем, камрады, проясните идеологию, монго хранит документы и обесепечивает "транзакцию" в рамках одного документа, т.е. если его меняем, то целиком.
Как там хранить иерархические данные, например, машины определённой организации? Всю инфу писать в одном документе или делать коллекцию организаций, коллекцию машин и коллекцию связей?
Как этим правильно пользоваться?
Надо хранить так, как ты будешь потом читать.
Если машины как сущность без организации не используются, то проще хранить в одном документе. Если машины отдельно от организаций отлично существуют, то вероятно проще хранить из в отдельной коллекции.

Ruslan
24.08.2017
13:57:21
как раз продумываю структуру

GNU/Docker
24.08.2017
14:01:22

yopp
24.08.2017
14:03:54
А по поводу «менять целиком», это не совсем так.
Изменять значения атрибутов документов можно и без передачи в запросе всего документа.
История с атомарностью это про изоляцию: несколько одновременно выполняющихся запросов, которые меняют одинаковые документы.
Монга гарантирует что изменения будут атомарными а рамках одного документа, а не всех документов попадающих под запросы.

Yuriy
24.08.2017
14:04:32
Я с DbRef я только познакомился в скопе MongoLime :D

yopp
24.08.2017
14:10:23
Тогда как в реляционных базах изоляция обычно на уровне всех сущностей попадающих в запрос по принципу «все или ничего». Т.е. если какое-то обновление завершилось ошибкой, изменения в других сущностях не будут применены. И как следствие другие запросы будут видеть только конечный результат выполнения соседнего запроса для всех сущностей (или вообще не видеть результата, если запрос ещё выполняется), а не промежуточный результат когда только часть сущностей обновилась.
В монге соседний запрос будет видеть как множество документы обновляются по одному, но при этом гарантированно будет видеть «цельное» представление конкретного документа. Т.е. неполностью обновлённый документ никто не увидит. Эт конечно капитанство, но некоторые историю про атомарность очень странно интерпретируют.

Алексей
24.08.2017
14:11:05
это хорошее капитанство

yopp
24.08.2017
14:19:02
Плюс реализация целиком на совести драйвера.