Identity Server 4:是否可以将NoSQL用于运营商店(永久授权)

时间:2019-05-02 18:23:19

标签: c# azure nosql azure-cosmosdb identityserver4

是否可以将Cosmos DB之类的NoSql数据库用于身份服务器4的操作数据存储(持久授权)?

注意:请牢记分区和索引编制的问题。

如果我们观察IdentityServer4的IPersistedGrantStore的方法,我们可以知道我们应该能够分别使用'key'和'subjectId'来获取数据。

表存储 :由于以下原因,我尝试放弃使用表存储的想法:

  1. 表存储仅在分区键和行键上建立索引(否 二级索引)。因此,我们需要复制数据以实现 同时在“键”和“主题ID”属性上建立索引。这导致 数据一致性和竞争条件方面的问题。

Cosmos DB SQL API :Cosmos DB支持所有属性的索引并支持TTL(出色)..但是问题在于分区。

  1. 单个逻辑分区的存储上限为10 GB。 因此,我们需要使用“ key”或“ subject id”进行分区。 如果将“键”用于分区,则需要“主题ID”的查询 进行完整的数据库扫描,反之亦然。

    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进行完整的数据库扫描?

还是使用SQL DB?

0 个答案:

没有答案