Я в настоящее время реализую EventSourcing для своего Go Actor lib. Проблема, с которой я сейчас сталкиваюсь, заключается в том, что когда актер перезагружается и ему нужно переписать все его состояние из журнала событий, запрос может возвращать несогласованные данные. Я знаю, что могу это решить, используя MutationToken
Consisnent N1QL Query Couchbase GOCB sdk
Но если я это сделаю, я буду вынужден писать все события в последовательном порядке, то есть записывать последнее событие последним.
Таким образом, токен мутации для последнего события будет достаточным для того, чтобы все данные были последовательно заданы для конкретного актера.
Это, однако, очень медленно, записывая около 10 000 событий в порядке, занимает около 5 секунд в моей настройке.
Если я вместо этого пишу эти 10 000 асинхронных сообщений, используя подпрограммы go, я могу записать все данные менее чем за одну секунду. Но тогда записи находятся в индетерминистском порядке, и я могу узнать, какой токен мутации я могу доверять. , например. Событие 999 может быть записано до события 843 из-за планового планирования AFAIK.
Какие у меня варианты?