Identity Server 4: возможно ли использовать NoSQL для оперативного хранилища (постоянные гранты) - PullRequest
0 голосов
/ 02 мая 2019

Есть ли способ использовать NoSql DB, такие как Cosmos DB, для хранения оперативных данных (сохраняемых грантов) Identity Server 4?

Примечание. Помнит о проблемах с разбиением и индексацией.

Если мы наблюдаем методы IPersistedGrantStore IdentityServer4, мы можем узнать, что мы должны иметь возможность извлекать данные, используя 'key' и 'subjectId' по отдельности.

Хранение таблиц : я пытался отказаться от использования хранилища таблиц по следующим причинам:

  1. Хранилище таблиц индексируется только для ключа раздела и ключа строки (нет вторичный индекс). Таким образом, нам нужно дублировать данные для достижения индексирование как по ключу, так и по идентификатору субъекта. Это приводит к проблемы с согласованностью данных и условиями гонки.

API-интерфейс Cosmos DB SQL : Cosmos DB поддерживает индексирование по всем свойствам и поддерживает TTL (отлично) .. но проблема заключается в разбиении.

  1. Один логический раздел имеет верхний предел хранения 10 ГБ. Итак, нам нужно сделать разделение либо используя «ключ», либо «идентификатор субъекта». Если для раздела используется ключ, то запросы с идентификатором субъекта нужны сделать полное сканирование дб и наоборот.

    public class IPersistedGrantStor {
     Task<PersistedGrant> GetAsync(string key);
     Task<IEnumerable<PersistedGrant>> GetAllAsync(string subjectId);
     Task RemoveAsync(string key);
     Task RemoveAllAsync(string subjectId, string clientId);
     Task RemoveAllAsync(string subjectId, string clientId, string type);
    }
    

Существует ли правильный способ разделения данных хранилища постоянных грантов, который позволяет избежать полного сканирования БД как для getByKey, так и для getBySubjectID?

или Go с SQL DB?

...