Я только начал использовать RavenDB в личном проекте, и до сих пор было очень легко реализовать вставку, обновление и запросы.Однако я столкнулся с ситуацией, когда мне нужен метод GetOrCreate, и мне интересно, каков наилучший способ добиться этого.
В частности, я интегрируюсь с OpenID, и после аутентификации пользователь перенаправляетсяна мой сайт.На этом этапе я либо хотел бы получить их пользовательскую запись из Raven (запросив свойство ClaimsIdentifier), либо создать новую запись.Идентификатор пользователя в настоящее время устанавливается Raven.
Очевидно, что я могу написать это в двух утверждениях, но без какой-либо транзакции вокруг выбора и создания, я мог бы потенциально получить две пользовательские записи в базе данных стот же идентификатор претензий.
Есть ли способ достичь такого рода функциональности?Возможно, еще более важно, как вы думаете, я иду по неверному пути.Я предполагаю, что даже если бы я мог создать транзакцию, это затруднило бы масштабирование до нескольких серверов и в любом случае добавило бы «узкое место» производительности.
Лучше было бы использовать операции Query и Create какотдельные операторы и проверка на наличие дубликатов при извлечении пользователя и объединение в этой точке.Или сделать что-то похожее, но по запланированному заданию?
Не могу помочь, но чувствую, что упускаю что-то здесь очевидное, поэтому любые советы по этой проблеме будут с благодарностью приняты.Масштабирование до нескольких серверов может показаться небезопасным для личного проекта, я использую его для оценки Raven, прежде чем использовать его в работе.