EventSourcing отлично работает, когда у нас есть уникальный уникальный EntityID, но когда я пытаюсь получить информацию от eventStore, отличного от определенного EntityId, у меня тяжелое время.
Я использую CQRS с EventSourcing. В качестве части событий-источников мы сохраняем события в таблице SQL в виде столбцов (EntityID (uniqueKey), EventType, EventObject (например, UserAdded)).
Таким образом, сохраняя EventObject, мы просто сериализуем объект DotNet и сохраняем его в SQL. Таким образом, все данные, связанные с событием UserAdded, будут в формате xml. Меня беспокоит, что я хочу убедиться, что имя пользователя, которое присутствует в db, должно быть уникальным.
Итак, при выполнении команды AddUser мне нужно запросить EventStore (sql db), будет ли конкретное имя пользователя уже присутствовать в eventStore. Поэтому для этого мне нужно сериализовать все события UserAdded/UserEdited в хранилище событий и проверьте, запрашивается ли имя пользователя в eventStore.
Но поскольку часть команд CQRS не разрешается запрашивать, может быть из-за условия гонки.
Итак, я попытался перед отправкой команды AddUser просто запросить eventStore и получить все пользовательские имена, выполнив сериализацию всех событий (UserAdded) и выберев имена пользователей, и если запрошенное имя пользователя уникально, тогда запустите команду else, чтобы исключить, что имя пользователя уже существует.
Как и в случае с вышеприведенным подходом, нам нужно запросить весь db, и у нас могут быть сотни тысяч событий/дней. Таким образом, выполнение запроса/десериализации займет много времени, что приведет к проблемам с производительностью.
Я ищу лучший подход/предложение для поддержания имени пользователя. Уникально либо путем получения всех userNames из eventStore, либо любого другого подхода.