Nikolay
А как изменить уже внесённые данные?
x
или ЗП разделили на две части - чорный нал и белая ) и повышать могут любую. А раньше это была тупо сумма
Ayrat
Это плохой пример потому что такого не будет
Ayrat
Поясню
Nikolay
А зачем?
Ну требование такое
Ayrat
Или твой бизнес не знал о существовании премий, и их не было совсем. И сейчас они появились. Или это были другие евенты
Ayrat
Существующие евенты никогда не меняются
Vasily
Ну требование такое
Плохое требование
Ayrat
Они же евенты. Они уже случились
Nikolay
Раньше мы везде показывали общую ЗП, но при разработке нового сервиса, оказалось, что нам важно сейчас разделять ЗП на оклад и премию
Nikolay
И нам нужно все данные поменять, чтобы теперь хранить ЗП и премию отдельно
Ayrat
Это правда нереальный пример.
Nikolay
Раньше премий не было? Как разделялись при разработке
Было, но нужна была общая ЗП, а премия и оклад не важны
Ayrat
Было, но нужна была общая ЗП, а премия и оклад не важны
Такого не бывает, у тебя ж во всём домене тогда не будет разделений. Или где-то логика по разделению за на премию и оклад была. Или она вновь появилась тогда просто читай старые стримы и агрегируй
x
вопрос как старые ивенты накатить на новый стейт?
Nikolay
Ну смотри реальный пример
Ayrat
вопрос как старые ивенты накатить на новый стейт?
Кодом) ну серьезно, ничем не отличается
Nikolay
Вот у нас была деталь, и было поле со стандартом изготовления детали ГОСТ 1234 ТУ 1234 ОСТ 1234 Раньше всё писали в базе в одно поле, потом выяснилось, что нужно разделение, отдельно тип стандарта и его код, соответственно разделили на две ячейки ГОСТ | 1234 ТУ | 1234 ОСТ | 1234 Чтобы пофиксить существующие данные, мы просто руками прошлись и разнесли их, как быть со стейтом в данном случае?
Ayrat
Ответ тот же) Берешь евент стрим и фолдишь в модель с раздельными полями. Код для разбивания строки по пробелам показывать?)
Nikolay
Там не всё так просто, нужно именно руками было разбивать
Nikolay
Так как все пишут по разному
Nikolay
И там 60 разных вариаций
Nikolay
Где-то есть косячные данные
Nikolay
ГОСТ1234
Vasily
Всего 60
Nikolay
Даже были варианты с английскими буквами OCT
Ayrat
Ну сделаешь кастомный мапинг, зашиваешь в код
Ayrat
Или отправляй из сервиса письмо или евент если не может прочитать строчку
Nikolay
Так а дальше так же и продолжать передавать одной строкой?
Nikolay
И фолдить?
Ayrat
И тут появляется снапшот!
Ayrat
Один раз зафолдил, сохранил чекпоинт и все
Nikolay
А если нужно историю изменений одной записи отобразить?
Nikolay
А не только конкретное состояние
Ayrat
Прочитал без снапшота
Nikolay
Тогда нужно опять фолдить?
Ayrat
Очевидно да
Nikolay
И теперь представь, что такое приходится делать раз в месяц
Nikolay
Ну аналогичное
Nikolay
:)
Ayrat
Да хоть 100 раз день
Nikolay
Так у тебя будет всё на костылях работать
Nikolay
И ты просто запутаешься
Ayrat
Ты слабо представляешь как это работает и почему это работает быстро
Nikolay
Ну не знаю, мне кажется это будет трэшем
Nikolay
При этом, не всегда получается извлечь данные, иногда их вообще нет, и нужно руками добавлять
Ayrat
Снапшоты нужны чтобы сервис можно было не держать в памяти и вырубать. Он потом восстановится
Ayrat
Если держать их онлайн то там скорость доступа моментальная
Nikolay
Или вот, чем я сейчас занимаюсь. Часть деталей было добавлено в один документ, а оказалось, что их нужно было добавить в другой документ, и мне нужно просто в базе ID документа поменять у детали, и всё
x
При этом, не всегда получается извлечь данные, иногда их вообще нет, и нужно руками добавлять
как-то с одной стороны всё должно быть в ивентах, а с другой данные изменяются и появляются как бы из ниоткуда 🤔
Nikolay
Как быть с ивентами?
Ayrat
При этом, не всегда получается извлечь данные, иногда их вообще нет, и нужно руками добавлять
Это все евенты. Делаешь сервис для мануального апдейта. Другой читает как свой стрим, так и твой. Подписка на две очереди. Агрегирует оба два
Ayrat
Ещё раз. Такая архитектура решает проблему связанности, позволяя вытворять любую дичь с кодом и логикой хоть сто раз на дню и даёт изи скалирование. Если это не проблема для тебя, то лучше не стоит
Ayrat
И это отдельно кодом писать надо?
Ну это ж микросервисы. Строчек 50
Nikolay
Ну это ж микросервисы. Строчек 50
Ну такое переодически приходится делать
Nikolay
Проще ID в базе поменять
Ayrat
Проще ID в базе поменять
Так начинается боль.
x
Проще ID в базе поменять
а как потом найти, кто и почему это сделал?
Nikolay
Nikolay
Юзеры не имеют к этому доступа
Nikolay
Хотя можно сделать так, чтобы они меняли, просто интерфейс надо пилить)
Nikolay
И это будет нормально работать, так как всё логируется
Ayrat
Я думаю тебе надо и дальше юзать реляционку. Это серьезный совет без сарказма
x
И это будет нормально работать, так как всё логируется
я думал что одно из требований - видеть историю изменений
x
как это будет происходить? расковыривалка логов?
Nikolay
У тебя есть деталь, по ней хранится вся история
Nikolay
В том числе, какому документу и когда она принадлежала
Nikolay
И кто когда вносил изменение
x
а вот этот момент со сменой ID документа
x
или это какой-то хак, о котором никому не нужно знать?
Nikolay
Это они накосячили просто)
Nikolay
И добавили не в тот документ
Nikolay
И мне нужно поменять это значение в самом логе