
ptchol
02.12.2016
12:02:10
или я плохо читал то что выше ?

Sergey
02.12.2016
12:02:16
я 3.4 ещё не щупал
и это вроде про read concern

ptchol
02.12.2016
12:03:24
ну да.

Google

Sergey
02.12.2016
12:03:33
а блокировки могут быть нужны даже вообще на одной ноде без реплик
(хотя если мы читаем со слейвов и пишем в мастер - они нужны чаще)

ptchol
02.12.2016
12:05:16
тоесть ты про ту ситуацию когда у тебя одно обновление приехало позже другого но в реальнйо ижзни они случились раньше ?

Sergey
02.12.2016
12:06:44
вот я, кстати, не уверен, что монга может оплог воспроизводить не подряд
но вопрос быдл вообще о другом
мы
1. читаем данные
2. изменяем их
3. пишем в базу
и последнее должно произойти только если кто-то параллельно не успел эти данные изменить
optimisting locking - самый очевидный вариант

yopp
02.12.2016
12:20:08
условно
{
_id: ...,
some_data: ...,
[
{'id': 1, 'value': null, 'other_value': 5},
{'id': 2, 'value': null, 'other_value': 6},
{'id': 3, 'value': null, 'other_value': 7},
{'id': 4, 'value': null, 'other_value': 8},
]
}
прислали patch и надо обновить только поле value в массиве, не трогая остальные
чот проблема непонятная
если тебе условно надо обновить элемент массива с id: 2 и там поставить value в новое значение, то в чём проблема?
атомарно это делается

Sergey
02.12.2016
12:21:04
надо обновить 4 элемента

yopp
02.12.2016
12:21:10
и 4 элемента можно обновить

Sergey
02.12.2016
12:21:15
как?

Google

yopp
02.12.2016
12:21:33
somedata.$.value

Sergey
02.12.2016
12:21:42
для каждого id разный value

yopp
02.12.2016
12:21:53
блин
ты можешь внятно задачу сформулировать?

Sergey
02.12.2016
12:22:10
условно
{
_id: ...,
some_data: ...,
[
{'id': 1, 'value': null, 'other_value': 5},
{'id': 2, 'value': null, 'other_value': 6},
{'id': 3, 'value': null, 'other_value': 7},
{'id': 4, 'value': null, 'other_value': 8},
]
}
прислали patch и надо обновить только поле value в массиве, не трогая остальные
^

yopp
02.12.2016
12:22:32
блин
прислали patch и надо обновить только поле value в массиве, не трогая остальные
все value?
или какие value?

Sergey
02.12.2016
12:22:52
апдейт, допустим
[
{'id': 1, 'value':7},
{'id': 2, 'value':8},
{'id': 3, 'value':9},
{'id': 4, 'value':10},
]

yopp
02.12.2016
12:23:54
гхм. и в чём проблема?

Sergey
02.12.2016
12:26:12
ну либо я пропускаю какой-то очевидный вариант, либо это сделать нельзя в одном update
да, порядок элементов в апдейте может не совпадать с тем, что в базе

yopp
02.12.2016
12:26:55
ах.

Sergey
02.12.2016
12:27:15
и вообще, пользователь может прислать какой-нибудь мусор вместо id, которого нет в исходном документе

yopp
02.12.2016
12:29:10
ну это в query разрешается

Sergey
02.12.2016
12:33:47
последнее - да
но вот с $ я что-то не видел в доке варианта с обновлением нескольких полей: https://docs.mongodb.com/v3.2/reference/operator/update/positional/#up._S_

yopp
02.12.2016
12:34:01
да-да, яж сказал «ах»
задача изначально была поставлена невнятно. а вот когда ты показал что ты хочешь внутри массива изменить несколько разных элементов и поставить им разные значения, задача стала понятна.

Sergey
02.12.2016
12:35:36
изначально идея была класть это в embedded с id - ключ, но тогда по этому полю не работает, например, $unwind

Google

Sergey
02.12.2016
12:39:51

yopp
02.12.2016
12:40:02
эм

Sergey
02.12.2016
12:40:16
вопрос-то был про locking

yopp
02.12.2016
12:41:03
яж тебе ответил: когда ты хочешь блокировки в монге, сначала надо понять как ты докатился до такой жизни

Sergey
02.12.2016
12:48:30
на самом деле, это просто перестраховка, поэтому и optimistic, а не pessimistic )

yopp
02.12.2016
12:50:37
да какая разница, любая блокировка в субд которая не поддерживает блокировки, должна вызывать вопрос
я твою проблему понял, сходу пока ничего в голову не пришло, но мне кажется можно найти решение без блокировки
но я пока не уверен как
подумаю

Sergey
02.12.2016
12:51:28
там будет 1 rpd (request per day ?) на запись, но если вдруг будет идея как обойти - буду благодарен

yopp
02.12.2016
12:53:20
пфф. да, оптимитичная блокировка тебя спасёт
правда у меня сразу возникает вопрос зачем тогда поддокументы
но ладно!

Sergey
02.12.2016
13:00:51
Поддокументы чтобы читать быстро и без $lookup.
На чтение нагрузка сильно выше, чем на запись
И там практически весь документ пачкой нужен
Вообще, конечно, в идеале должна быть реляционная база. Но руководство было против поднятия ещё одной базы для данного микросервиса, поэтому пришлось использовать монгу)

Roman
04.12.2016
23:41:00
Народ, пособите с ответами на вопросы:
1) What data storage concept do you suggest to use the software world-wide?
2) Is data historicizing storage possible? How is it designed?

yopp
04.12.2016
23:42:50
(оба вопроса кривые что пиздец, я ничо не понял)

Google

Roman
04.12.2016
23:49:00
а, ну я типа пишу заявку на тендер, и должен рассказать какой у меня офигенный солюшен. у меня монга с постгресом. а они ребята серьезные, задают вот такие загадочные вопросы
я-то понятно ничо этого не планировал. а у них почему-то все подводится к идее держать данные в разных датацентрах
так вот. можно ли на монге держать данные в разных датацентрах?
и что это за data historicizing storage ?

GNU/Docker
05.12.2016
04:26:37
У нас есть локальные реплики и реплика на два цода.

Sergey
05.12.2016
06:52:24

Roman
05.12.2016
12:39:38
доброжелательность-бесценна :)

GNU/Docker
05.12.2016
13:04:58
Ну. Сами реплики стандартными
Но у нас есть свой прокси над коннекшном
Чтобы по имени азетки ходить в нужный цод
Или в глобальную реплику.

yopp
05.12.2016
14:43:54
бляха
они всё ещё не доложили инит скриптов для монгосов :(

Serge
05.12.2016
15:44:18

yopp
05.12.2016
16:37:57
да даже init.d нет

Serge
05.12.2016
16:39:25
Были же
Не в сорцах

yopp
05.12.2016
16:40:22
ну вот чо им мешало положить в пакеты?

Google

Axrorxo'ja
06.12.2016
04:41:19
Добрий ден,вчера я на одно группу спрашивал про популате на монгодб и все атветили што если нужен релатион лучше исползоват постгре ,што популате так плоха он для производителност ?

K
06.12.2016
06:44:43

GNU/Docker
06.12.2016
06:47:12
Еще как

Axrorxo'ja
06.12.2016
06:59:09
Еще как
сможете дат обиснения или какойта линк иммена по этому тему

[Anonymous]
06.12.2016
14:20:45
Если да, то это Mongoose и как следствие Ruby, а в конференции Ruby ничего кроме PostgreSQL тебе не посоветуют.

yopp
06.12.2016
14:21:38