Size: a a a

Saint P Ruby Community

2021 March 01

IK

Igor Khodyrev in Saint P Ruby Community
Anton Davydov
> у нас есть компоненты, которые работают примерно по той же схеме (храним гранулированные данные, по ним собираем стейт), ну и кажется, что пора это все эти аспекты объединить в единое решение

вот это больше похоже на правду, кстати, можешь подробнее рассказать?
сильно детально не могу, к сожалению

один из примеров - это прогресс юзера записывается каждый раз в новую запись (то есть каждый результат отдельно), а по этим записям собирается общий его результат
источник

IK

Igor Khodyrev in Saint P Ruby Community
Anton Davydov
> не уверен тут, что ES предполагает, что мы *обязаны* собирать больше одного изменения перед тем, как обновить стейт (ну либо я не так понял мысль)

не, смотри:

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

вариант первый, сразу считать информацию:

sum = 0

new_user_count = 2
sum += new_user_count

new_user_count = -1
sum += new_user_count

sum # => 1


в этом случае ты не знаешь когда сколько людей пришло и на любое время у тебя есть только текущее состояние.

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


event_store = []

event_store << NewUser(…)
event_store << NewUser(…)
event_store << UserDeleted(…)

sum = 0

event_store.each do |event|
 case event.type
 when NewUser
   sum += 1
 when UserDeleted
   sum -= 1
 end
end

sum # => 1
спасибо, это различие понятно

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

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

IK

Igor Khodyrev in Saint P Ruby Community
Anton Davydov
во втором случае ты хранишь только изменения, а когда надо - считаешь стейт за нужное время или набор событий (стейт начальный не всегда пустой может быть)
а, ну собственно тут и ответ на мой вопрос
источник

IK

Igor Khodyrev in Saint P Ruby Community
Anton Davydov
важно - event_store + event + projections (штуки которые по событиям стейт собирают)
да, идея понятна, значит это точно похоже на то, для чего мы хотим его использовать
источник

IK

Igor Khodyrev in Saint P Ruby Community
а либа работает с sequel? или ar-only?
источник

VD

Vla Dem in Saint P Ruby Community
Igor Khodyrev
а либа работает с sequel? или ar-only?
источник

IK

Igor Khodyrev in Saint P Ruby Community
Понял, спасибо!
источник

AD

Anton Davydov in Saint P Ruby Community
Igor Khodyrev
спасибо, это различие понятно

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

условно есть состояние на день Х, а потом в день Х+1 мы добавим те эвенты, которые были за день Х+1
а, тогда может и зайдет кстати
источник

AD

Anton Davydov in Saint P Ruby Community
Igor Khodyrev
а либа работает с sequel? или ar-only?
если что, я советую попробовать руками сделать прототип и потыкаться, там кода не так много писать надо. а потом уже библиотеку тянуть (в моей голове это дороже выйдет просто)
источник

IK

Igor Khodyrev in Saint P Ruby Community
Anton Davydov
если что, я советую попробовать руками сделать прототип и потыкаться, там кода не так много писать надо. а потом уже библиотеку тянуть (в моей голове это дороже выйдет просто)
Хорошая идея, спасибо! Мне в целом ещё интересно понять, что нам существующие либы дадут в этом случае.
источник

AD

Anton Davydov in Saint P Ruby Community
реазизацмию эвент стора + сахар + DSL для событий
источник

AD

Anton Davydov in Saint P Ruby Community
вообще, у меня есть “библиотека”, можешь потыкаться, там эвент стор на минималках - 27 строк кода

https://github.com/davydovanton/ivento/blob/master/lib/ivento/event_store.rb
источник

AD

Anton Davydov in Saint P Ruby Community
а, ну еще несколько абстракций + адаптеры
источник
2021 March 02

VN

Vasily Nesterov in Saint P Ruby Community
#вакансия #remote

Software Engineer

Полный рабочий день, удалёнка.
Компания: boss-solutions
Компенсация - $5000/месяц

2 успешных проекта, оба - монолиты на 6 рельсах. Потсгрес + постгис.
Команда из 9 человек.

Адекватный менеджмент, комфортная рабочая атмосфера без намёка на “должно было быть готово еще вчера”.

Никаких этих ваших эдалтов и казино, продукты компании можно без труда загуглить.

Подробности в ЛС.
источник

IN

Ilya Nikolaevich in Saint P Ruby Community
Не знаю почему такое предубеждение. Эдалт это прекрасно. Всегда гарантированное финансирование.
источник

IN

Ilya Nikolaevich in Saint P Ruby Community
Формулировка вакансии почти эталонная. Два чая этому господину. За счет @homo_vespertilio конечно
источник

VN

Vasily Nesterov in Saint P Ruby Community
@iam_the_teacher Тут такие правила, что эдалту не рады
источник

VN

Vasily Nesterov in Saint P Ruby Community
Меня как-то раз случайно занесло в около-эдалт
источник

VN

Vasily Nesterov in Saint P Ruby Community
Работа, как работа
источник

VN

Vasily Nesterov in Saint P Ruby Community
Занесло не меня лично, а компанию, в которой я работал
источник