теория

Журнал как память системы

Заметил, к чему всё клонится? Если каждое изменение — это событие в логе, а любое представление собирается из этого лога, напрашивается крамольная мысль: а что, если сам журнал и есть главное хранилище, а база — лишь одно из его производных?

Присмотримся к идее вплотную. — это хранить не текущее состояние («у курьера на счету 1500»), а полную ленту событий, которые к нему привели («начислено 200», «начислено 300», …). Текущее состояние — всегда результат проигрывания ленты с начала. Выгода огромная: у тебя есть полная история «как мы сюда пришли» (бесценно для денег и разборов), и ты можешь собрать новое представление задним числом — просто перечитав старые события под новым углом.

Но в игру вступает время. Представление из потока всегда чуть отстаёт от источника — оно своевременно, но не мгновенно. Для точки курьера на карте отставание в полсекунды не заметит никто. А для «хватает ли денег на счёте» те же полсекунды могут обернуться овердрафтом — там нужна не свежесть, а строгая правильность, и туда поток в лоб пускать нельзя.

Мы подошли к развилке, которая стоит отдельного разговора: если журнал так хорош, не выстроить ли вокруг него вообще всё — и когда этого точно делать НЕ надо.

← назад