@scala_ru

Страница 945 из 1499
Oleg
19.09.2017
20:46:07
юзера и без oauth может захотеть создать

а иногда более одного имейла привязать

Vladimir
19.09.2017
20:47:35
сложный бизнес-кейс, однако, нужно выдумывать оригинальное техническое решение

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

Google
Vladimir
19.09.2017
20:52:45
или вообще выбрать первый имейл "лидирующим" и лепить все к нему, ведь про "отвязывать имейлы" речи не было а с остальным ивеншуал консистент вьюхи и маппинги разберутся

Oleg
19.09.2017
21:17:05
или вообще выбрать первый имейл "лидирующим" и лепить все к нему, ведь про "отвязывать имейлы" речи не было а с остальным ивеншуал консистент вьюхи и маппинги разберутся
ещё раз. Юзернейм, имейлы (куча их) соц-аккаунты, партнёрские айдишники, номер мобильного - независимые идентификаторы. По каждому нужно уметь узнавать уникального юзера и не позволять привязывать более, чем к одному аккаунту

Max
20.09.2017
06:30:01
я подумал. На счет саги вчера наврал - это не распределенная транзакция - это описание бизнес процесса, который применяется частично, и для системы в целом, не является атомарной операцией. Соотвественно относительно себя может привести систему в какой то момент к неконсистетному состоянию, (т. е. например создаст пользователя в одном агрегате, но не создаст в другом). Но за то через какое-то время все таки доделает свои части бизнес процесса (дорегистрирует пользователя в другом агрегате ну или откатит изменения в первом) и все будет хорошо. как я понимаю решение за которое топит олег - это например батч в кассандру в несколько таблиц(Пользователи, Имейлы и тд) как легковесные транзакции - лично мне нравится я так и не нашел докладов или статей от грега про саги или распределенные транзакции, но вроде как он и не говорит что "вот везде используйте es" он говорит "нужно построить отчет как sql - ну выгрузи данные в sql и построй там отчет " так что если тут ставится задача стронг консистенси для миллиона пользователей у которых есть миллион идентификаторов можно и не упираться, а сделать через какой нибудь отдельный консистентый сервис можно сделать через сагу - но саги все равно придется отдавать на откуп хотябы техподдержки можно сделать просто два независимых агрегата и говорить пользователю - типа имейл мы твой приняли, все ок, а вот username поменяй - но это бизнес может послать вас(а может и не послать) короче cqrs/es это больше конь в вакууме чем конкретное решение - это просто идея - она не может ответить на вопрос "а как вот мне миллиард пользователей держать в консистетном состоянии" - этим занимаются другие системы и другие подходы кстати агрегаты это не из cqrs/es это частное решение притянутое из ddd, которое решает проблему маленьких быстрых консистентных островков - заметьте в акка персистенс - нету PersistentAggregate

Vladimir
20.09.2017
06:31:43
как понять, что он наступил?
да некоего consistencyTimeoutа будет достаточно, в течение которого агрегат не заснет и будет принимать запросы

Oleg
20.09.2017
06:38:46
да некоего consistencyTimeoutа будет достаточно, в течение которого агрегат не заснет и будет принимать запросы
А кто будет хранить таймауты для юзерлогинов? Напомню, почти ао всех аппликухах более одного способа залогиниться

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

Ну или если ОП сознательно принимает эвенчуал в своей авторизации, у меня тоже нечего добавить

Vladimir
20.09.2017
06:53:31
таймауты, очевидно, должен хранить некий роутер, или сама вьюха будет уведомлять агрегат "я перестроилась" в общем как пишут в тройке-другой статей, каждый кейс требует четкого рассмотрения бизнес требований и компромиссов. Можно сделать ивентсорсинг в юзерсторадже, если понимать все требования (а можно mysql с транзакциями затянуть)

Vladimir
20.09.2017
06:56:09
Можно вопрос интимного характера? Вы своим интимным нутром ощущаете, что можно заранее сформулировать все требования к юзерстораджу?
понятное дело что нет, и, скорее всего, аналитика налажает или родится новый кейс, который заставит подпирать любой сторадж костылями или переписывать под новые требования

я настолько морально готов к такому дерьму, что даже не бомбит)

Google
Митко Соловец?
20.09.2017
08:11:23
лол в чате хаскеллистов маленько скалку обсирают, кеек

Aleksey
20.09.2017
08:12:09
Митко Соловец?
20.09.2017
08:12:30
да там затирают про какой-то процедурный код в определениях

Aleksey
20.09.2017
08:13:30
да там затирают про какой-то процедурный код в определениях
скалу можно не любить за то что она недостаточно хаскель. многим бы этого хотелось.

Nick
20.09.2017
08:14:00
Слава богу, что не Хаскель)

Митко Соловец?
20.09.2017
08:14:13
В гиттере?
телега

Nick
20.09.2017
08:14:26
Где-то ещё есть скала чат?

Митко Соловец?
20.09.2017
08:14:40
вот реально, захожу сюда, чуваки обсуждают прод, акка стримы, проблемы жизненные

Aleksey
20.09.2017
08:14:55
я спокойно отношусь к этому. хаскелисты ребята умные, предмет спора понимают. вот отличии от крепких середничков из джаваспрингго с экспертным мнением.

Митко Соловец?
20.09.2017
08:15:02
захожу к хаскеллистам, они превозмогают синтаксис

Aleksey
20.09.2017
08:16:07
Nick
20.09.2017
08:16:19
Да может он не про тебя)

Он просто свои статистические наблюдения привёл)

Nick
20.09.2017
08:17:41
Он хотел написать хаскелистов

Митко Соловец?
20.09.2017
08:17:58
Процедурный код в определениях попахивает Скалкой. За ним - туда

Google
Митко Соловец?
20.09.2017
08:18:15
@odomontois

Oleg
20.09.2017
08:18:23
Митко Соловец?
20.09.2017
08:18:56
ну тип посылать людей с одного языка на другой - ну такое, не?)

Oleg
20.09.2017
08:18:56
посмотрите на akka GraphDSL

Митко Соловец?
20.09.2017
08:19:11
посмотрите на akka GraphDSL
можно на ты, Олег, если не против.

Oleg
20.09.2017
08:19:27
все лучшие придут в скалу

а эти так и будут сидеть без процедурного кода в определениях

Nick
20.09.2017
08:20:11
В голос

Alex
20.09.2017
08:40:47
/toxic

folex
20.09.2017
09:20:51
я подумал. На счет саги вчера наврал - это не распределенная транзакция - это описание бизнес процесса, который применяется частично, и для системы в целом, не является атомарной операцией. Соотвественно относительно себя может привести систему в какой то момент к неконсистетному состоянию, (т. е. например создаст пользователя в одном агрегате, но не создаст в другом). Но за то через какое-то время все таки доделает свои части бизнес процесса (дорегистрирует пользователя в другом агрегате ну или откатит изменения в первом) и все будет хорошо. как я понимаю решение за которое топит олег - это например батч в кассандру в несколько таблиц(Пользователи, Имейлы и тд) как легковесные транзакции - лично мне нравится я так и не нашел докладов или статей от грега про саги или распределенные транзакции, но вроде как он и не говорит что "вот везде используйте es" он говорит "нужно построить отчет как sql - ну выгрузи данные в sql и построй там отчет " так что если тут ставится задача стронг консистенси для миллиона пользователей у которых есть миллион идентификаторов можно и не упираться, а сделать через какой нибудь отдельный консистентый сервис можно сделать через сагу - но саги все равно придется отдавать на откуп хотябы техподдержки можно сделать просто два независимых агрегата и говорить пользователю - типа имейл мы твой приняли, все ок, а вот username поменяй - но это бизнес может послать вас(а может и не послать) короче cqrs/es это больше конь в вакууме чем конкретное решение - это просто идея - она не может ответить на вопрос "а как вот мне миллиард пользователей держать в консистетном состоянии" - этим занимаются другие системы и другие подходы кстати агрегаты это не из cqrs/es это частное решение притянутое из ddd, которое решает проблему маленьких быстрых консистентных островков - заметьте в акка персистенс - нету PersistentAggregate
В кассандре же нельзя serial (lightweight transactions) на несколько таблиц делать. На несколько партишнов ключа-то нельзя. Или я не прав, и можно? Очень интересно, если так.

folex
20.09.2017
09:22:51
https://docs.datastax.com/en/cql/3.1/cql/cql_reference/batch_r.html > In Cassandra 2.0.6 and later, you can batch conditional updates introduced as lightweight transactions in Cassandra 2.0. Only updates made to the same partition can be included in the batch because the underlying Paxos implementation works at the granularity of the partition.

https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlLtwtTransactions.html
@odomontois я не очень понял как это отвечает на мой вопрос, можешь уточнить, если не сложно?

Евгений
20.09.2017
09:24:38
Coq (язык формулировки математических теорий и программирования, основанный на зависимых типах, описан в книге «Coq’art: Interactive theorem proving and program development» отчасти использует алгоритм Хиндли — Милнера с определенным количеством эвристик, однако его система типов настолько сложна и мощна, что вывод типов в ней является вычислительно неразрешимой задачей, поэтому очень часто типы приходится указывать вручную.

Евгений
20.09.2017
09:28:41
мб он не проверяет?

или проверяет только для простых случаев

Google
Oleg
20.09.2017
09:30:45
В кассандре же нельзя serial (lightweight transactions) на несколько таблиц делать. На несколько партишнов ключа-то нельзя. Или я не прав, и можно? Очень интересно, если так.
короч, нельзя кондишны втыкать, когда у тебя разные партишны и таблицы, а атомарный батч на несколько таблиц можно

Oleg
20.09.2017
09:31:36
через SERIAL, да

folex
20.09.2017
09:35:12
через SERIAL, да
Что-то это расходится с моей интерпретацией документации. Пойду попробую.

По идее нельзя писать IF [NOT] EXISTS на несколько партишнов => таблиц, а по-другому LWT на запустишь же?

Oleg
20.09.2017
09:42:16
в этом вся суть его

ты же там только и делаешь, что типы доказываешь, а не кот котишь

folex
20.09.2017
09:44:04
cqlsh:test> CREATE TABLE test.customers ( ... user bigint, ... balance int, ... PRIMARY KEY (user) ... ); cqlsh:test> CREATE TABLE test.purchases ( ... user bigint, ... expense_id bigint, ... amount int, ... PRIMARY KEY (user, expense_id) ... ); cqlsh:test> BEGIN BATCH S; ... INSERT INTO customers (user, balance) VALUES (1, -10) IF NOT EXIST ; ... INSERT INTO purchases (user, expense_id, amount) VALUES (1, 1, 10) ... APPLY BATCH; InvalidRequest: Error from server: code=2200 [Invalid query] message="Batch with conditions cannot span multiple tables"

@odomontois ^

или ты предлагаешь вручную выставлять SERIAL? Но это вроде невозможно.

Nick
20.09.2017
09:45:05
@odomontois почему у вас так медленно работает сайт? отвечай !

Mikhail
20.09.2017
09:47:12
хм, я не очень силён в CS но даже если ты указал тип руками, компилятору же нужно проверить, что ты указал его валидно, т.е. всё равно вывести тип.
конечно выводит. но представь себе все сорцы как граф и отметь, что если ты в какой-то точке указываешь тип - ты компилятору существенно облегчаешь задачу - вычленяя кусок в отдельный изолированный граф - и вот на этом меньшем участке ему может быть гораздо проще доказать что-то или опровергнуть, в то время как на всем графе без отчуждений - он будет это делать долго долго долго в попытках перебрать различные варианты)

folex
20.09.2017
09:54:00
я хз с моего дивана все выглядело ок)))
А я было уже начал радоваться и посыпать голову пеплом, но увы

Alex
20.09.2017
10:12:24
инференс для завтипов неразрешим да

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

Oleksandr
20.09.2017
10:16:11
а может быть так, что при изменении указанного юзером типа вся ветка автоматического вывода пойдет в совсем другую сторону? теоретически-то ясно, что может, а в реальных ЯП ?

Google
Oleg
20.09.2017
10:25:04
но без условий можно

folex
20.09.2017
10:25:19
@odomontois как это синтаксически выглядит, можешь привести пример?

потому что насколько я понимаю, единственный способ сделать consistency = SERIAL это использовать IF

folex
20.09.2017
10:29:12
ЙЕЕЕ

Oleksandr
20.09.2017
10:30:52
гм, надо это заскриншотить и сохранить куда-то, Олег признает, что не прав

Aleksei
20.09.2017
10:31:32
он не признает что неправ

он признает что кто то другой прав

не надо передергивать

folex
20.09.2017
10:38:07
В sbt если в рутовом сабмодуле какие-то настройки вынести в inThisBuild, они же подтянутся всеми остальными сабмодулями, верно?

Страница 945 из 1499