@MongoDBRussian

Страница 119 из 342
yopp
24.08.2017
14:20:15
covered query уже не выйдет как минимум

Ruslan
24.08.2017
14:20:55
yopp
24.08.2017
14:35:05
Ребзя, подскажите. show dbs выдает мне базу 32 гб
Я не уверен что оно должно показывать физический размер бд. Там же вроде сумма collection size

Который размер до компрессии

Google
David
24.08.2017
14:38:05
у меня много инфы с неопределёнными полями, поэтому смотрю на монго, на реляционке делать сложнее, но с монгой только начал разбираться
Если есть критичные для целостоности данные, то лучше использовать реляционную ДБ. В postgres давно уже можно хранить json для документов с неопределенными полями. По этим данным можно писать запросы

GNU/Docker
24.08.2017
14:38:25
А зачем? Оверхед же огромный
Была необходимость.

Ruslan
24.08.2017
14:39:51
да я понимаю, общался с одним админом, в телецвае он работал, он зуб давал, что если делать всё правильно, кластер монги не убить, говорил, что однажды потеряли сторадж и работали только на памяти, пока заметили

GNU/Docker
24.08.2017
14:40:45
Сложный сервис для работы с тесно связанными сущностями и сложной иерархией моделей.

David
24.08.2017
14:40:50
Последнее китайское
прошу прощения. вопрос значит не в тему был. В таком случае стоит задавать вопросы о пригодности монги для тех или иных нужд

Ruslan
24.08.2017
14:40:53
сделаю два варианта, посмотрим ?

GNU/Docker
24.08.2017
14:41:10
Чтото типа циндер у опенстека.

И в этом сервисе монга не является боттлнеком

yopp
24.08.2017
14:42:13
прошу прощения. вопрос значит не в тему был. В таком случае стоит задавать вопросы о пригодности монги для тех или иных нужд
В монге все нормально с целостностью. В монге нет транзакционности, но это нужно вообще далеко не всем. Есть множество подходов который работают с изоляцией на уровне одного документа.

Google
yopp
24.08.2017
14:43:17
запаритесь писать двухфазные коммиты
Они нужны в очень ограниченном наборе случаев.

GNU/Docker
24.08.2017
14:43:29
yopp
24.08.2017
14:44:27
Мы в своё время спокойно слепили биллинг, который работал и без транзакций. Обеспечили индемпотентность операций и всё.

Сломалось? Retry до успеха.

Алексей
24.08.2017
14:45:28
а вот человека который придумал у ключа --authenticationDatabase не должно быть короткого аналога я хотел бы сжечь .

yopp
24.08.2017
14:45:40
:))))))

Алексей
24.08.2017
14:45:41
доктор это нормально ?

yopp
24.08.2017
14:45:48
Добро пожаловать в клуб

Алексей
24.08.2017
14:46:16
мне бы хотя бы 10-15 молекул от этого доброго человека.

yopp
24.08.2017
14:46:22
Мне вообще за реализацию аутентификации хочется нанести тяжкие телесные. X509 это вообще феерия

Alex
24.08.2017
14:46:29
это дааа

yopp
24.08.2017
14:47:22
Её писали какие на всю голову интерпрацзнутые люди. Но не xml конфигурация в два мегабайта и хорошо уже

David
24.08.2017
14:47:51
Мы в своё время спокойно слепили биллинг, который работал и без транзакций. Обеспечили индемпотентность операций и всё.
Биллинг работал в кластере? и для всех критичных мест вели что-то вроде лога транзакции?

Ruslan
24.08.2017
14:50:00
Алексей
24.08.2017
14:50:05
а вот человека который придумал у ключа --authenticationDatabase не должно быть короткого аналога я хотел бы сжечь .
зато я теперь знаю как это слово пишется. раз гдето на 152 раз мне надоело делать —help и копипастить. раз гдето на 210 я перестал делать ошибки.

yopp
24.08.2017
14:54:35
Мы делали сервис подписок с хитрым распределением денег. Подписка была ограничена 7 днями, внутри каждой подписки хранился массив «оплаченных» событий. «Оплата» гарантировалась нужным write concern (комит в журнал). Даже если на одну сущность приходило несколько конкурентных транзакций, addToSet гарантировал уникальность. Остальная математика, например выплаты, была построена на статических временных периодах (тоже 7 дней), как следствие тоже была индемпотентной. Можно любой отчёт о выплате генерировать сколько угодно раз, будет всегда одно и тоже.

а какие варианты для двухсторонней аутентификации ещё есть?
Внутри кластера — keyfile. Для клиентов — password.

509 просто того не стоит.

Google
Ruslan
24.08.2017
14:55:43
password ничего не гарантирует

yopp
24.08.2017
14:55:51
509 тоже :)

Любая аутентификация ничего не гарантирует, кроме того что кто-то владеет подходящим секретом.

С билингом самым сложным был флоу процессинга (нелинейность и асинхронность) и создание подписок по итогам успешной оплаты.

Алексей
24.08.2017
15:00:45
https://jira.mongodb.org/browse/SERVER-30811 ну вдруг..

yopp
24.08.2017
15:01:19
Активация подписок была тоже индемпотентной, на счётчике. У подписок был монотонно возрастающий идентификатор. Номер активированной подписки хранился в профиле. Если подписка истекла, а у пользователя открыто 30 вкладок, которые перезагрузились, в итоге все 30 запросов будут гарантированно взаимодействовать с одной подпиской.

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

Viktor
24.08.2017
15:08:39
интересный кейс про биллинг, нет случайно блога с примерами?)

Alex
24.08.2017
15:12:39
это все прикольно пока подписок ограниченное количество

а если мильены ?

yopp
24.08.2017
15:13:00
а если мильены ?
Да хоть миллиарды

Viktor
24.08.2017
15:13:07
Не-а. Надо уже завести, но пока времени нет.
на самом деле я уже пользовал addToSet и обыгрывал ситуацию вокруг атомарности апдейта одного документа, но про write concern'ы я бы почитал

особенно про использование на кластере

Alex
24.08.2017
15:13:19
конечное время обработки так или иначе есть для каких то объемов

Alex
24.08.2017
15:13:39
закон Амдала же

не ?

Google
Alex
24.08.2017
15:13:47
или он не работает от слова совсем ?

yopp
24.08.2017
15:13:52
Я тебя не понимаю сейчас совсем :)

Alex
24.08.2017
15:14:50
ну ты упрешься либо в пропускную способность канала либо дисков либо CPU

yopp
24.08.2017
15:15:06
Шардить никто не мешает

Alex
24.08.2017
15:15:09
так или иначе где то во что-то что будет лимитировать конечную пропускную способность обработки

yopp
24.08.2017
15:15:19
По ацдишникам профиля шардится изумительно

Alex
24.08.2017
15:15:22
не мешает конечно

в другое место по большей части перетаскиваешь узкое место )

ну и там по цепочке

yopp
24.08.2017
15:17:19
Потом сами подписки отмирают, шардить по дате создания и профилю прямо шикарно. Нужно немного извернуться и вручную крошить и балансировать диапазоны, но это не сложно.

Alex
24.08.2017
15:18:14
Окай, задефайним это так что в один момент времени для конкретной системы существует конечная пропускная способность

yopp
24.08.2017
15:18:25
Эээ. Да.

В любой информационной системе.

Alex
24.08.2017
15:18:39
yep

yopp
24.08.2017
15:18:46
И?

Я не очень понимаю что ты хочешь этим сказать

Alex
24.08.2017
15:19:16
успокойсо

все ок

yopp
24.08.2017
15:23:41
Мы можем деражать время обработки в каком-то разумном пределе, лимитируя объём информации. Шардинг отлично решает эту задачу, подписки статистически активируются последовательно в течении конечного временного периода (у нас 4 недели было). Остальные в 90% случаев уже не активируются никогда. На «горячей» зоне живут подписки за последние 8 недель. Ёмкий ключ позволяет хорошо масштабироваться в ширину, в том числе и на запись.

Автозамену в последней бете окончательно доломали. Роботы бунтуют

Google
Ruslan
24.08.2017
15:32:09
мне надо показывать список групп устройств, как правильнее сделать: отдельная коллекция групп и айди групп в документах колекции устройств или поле группы в документе устройства с её айди и названием и поиск по всем устройствам на предмет уникальности групп?

реляционность во мне требует отдельную коллекцию ?

yopp
24.08.2017
15:40:23
А сколько устройств в группе?

Ruslan
24.08.2017
16:04:57
От одного до 10000

Eliajah
24.08.2017
19:10:35
Есть 2 разные модели, которые лежат в одной коллекции. Как получить всю коллекцию? Обычно я получаю [modelName].find(), но тут так не получится.

.
25.08.2017
06:40:07
Короче нужно просто перестать мыслить реляционными паттеранами и больше уделять внимания бизнес логике. Кейсов где реально нужна прямо гарантированная транзакционность очень мало, и обычно там монгу не используют по множеству других причин.
Ты чертовски прав. Когда пытаешься проектировать с монгой это заставляет думать иначе. Потом сидишь и думаешь а нафига тебе нужны были транзакции, реляции и т.д там где без этого можно было обойтись, но так как это можно было делать то заморачиваться особо не приходилось. Я очень надеюсь что осознавших это людей вскоре станет больше.

Ruslan
25.08.2017
06:49:29
почитать бы про проектирование для монго

Aleksandr
25.08.2017
06:53:15
я бы тоже почитал

а то пока больше по интуиции

ptchol
25.08.2017
07:37:32
Мне кажется такое же озарение наступает когда начинаешь жить с микрлсервисами глубиной вызовов более 1

Ruslan
25.08.2017
07:54:56
это я понимаю, просто не хочется бежать за кем-то по граблям

Alex
25.08.2017
09:56:29
что вы таки понимаете под термином “глубина вызовов” ???

Ruslan
25.08.2017
09:56:47
ну когда сервис запрашивает другой сервис на предмет дополнительной инфы

Alex
25.08.2017
09:58:22
и так миллион раз ?

или миллион микросервисов 7

Ruslan
25.08.2017
09:58:43
как сделаешь

Alex
25.08.2017
09:59:02
ну я себе слабо представляю миллион микросервисов

даже у гугла

не говоря про более рядовые компании

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