Есть ли способ использовать NoSql DB, такие как Cosmos DB, для хранения оперативных данных (сохраняемых грантов) Identity Server 4?
Примечание. Помнит о проблемах с разбиением и индексацией.
Если мы наблюдаем методы IPersistedGrantStore IdentityServer4, мы можем узнать, что мы должны иметь возможность извлекать данные, используя 'key' и 'subjectId' по отдельности.
Хранение таблиц : я пытался отказаться от использования хранилища таблиц по следующим причинам:
- Хранилище таблиц индексируется только для ключа раздела и ключа строки (нет
вторичный индекс). Таким образом, нам нужно дублировать данные для достижения
индексирование как по ключу, так и по идентификатору субъекта. Это приводит к
проблемы с согласованностью данных и условиями гонки.
API-интерфейс Cosmos DB SQL : Cosmos DB поддерживает индексирование по всем свойствам и поддерживает TTL (отлично) .. но проблема заключается в разбиении.
Один логический раздел имеет верхний предел хранения 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?