Проверка имени источника событий CQRS уникальна или не принадлежит EventStore при отправке команды

EventSourcing отлично работает, когда у нас есть конкретный уникальный EntityID, но когда я пытаюсь получить информацию из eventStore, отличного от конкретного EntityId, у меня трудное время.

Я использую CQRS с EventSourcing. В качестве источника событий мы храним события в таблице SQL в виде столбцов (EntityID (uniqueKey), EventType, EventObject (например, UserAdded)).

Таким образом, при сохранении EventObject мы просто сериализуем объект DotNet и сохраняем его в SQL, поэтому все детали, связанные с событием UserAdded, будут в формате xml. Я хочу убедиться, что userName, присутствующее в db, должно быть уникальным.

Таким образом, при выполнении команды AddUser я должен запросить EventStore (sql db), присутствует ли конкретное имя пользователя в EventStore. Поэтому для этого мне нужно сериализовать все события UserAdded / UserEdited в хранилище событий и проверить, присутствует ли запрошенное имя пользователя в eventStore.

Но как часть команд CQRS не разрешено запрашивать может быть из-за условия гонки.

Итак, я попытался перед отправкой команды AddUser просто запросить eventStore и получить все имена пользователей, сериализовав все события (UserAdded) и выбрать имена пользователей, и если запрашиваемое имя пользователя уникально, тогда команда стрелять вызывает исключение, что имя пользователя уже существует.

Как и в случае с вышеуказанным подходом, нам нужно запросить всю базу данных, и у нас может быть сотни тысяч событий / день. Поэтому выполнение запроса / десериализации займет много времени, что приведет к снижению производительности.

Я ищу какой-либо лучший подход / предложение для поддержания уникального имени пользователя либо путем получения всех userNames из eventStore, либо с помощью любого другого подхода.

Ответы на вопрос(3)

Ваш ответ на вопрос