首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C# Web API -在内存缓存中存储和持久化数据

C# Web API -在内存缓存中存储和持久化数据
EN

Stack Overflow用户
提问于 2017-02-16 22:25:07
回答 1查看 2.6K关注 0票数 5

我正在编写一个REST API,它需要用我组织的ActiveDirectory提供集成服务,特别是查询用户和组数据,然后在API中为自动补全字段查询提供端点。

我的组织的ActiveDirectory非常大,大约有130K个用户和组对象。

查询所有这些对象并将它们存储在我们当前的后备存储(MongoDB)中大约需要40分钟。

我们决定检查是否有一个选项可以跳过Mongo的使用,并将所有查询的AD对象存储在Web API内存中。

查看中的其他问题,我意识到Singleton不会工作,因为每次重置IIS应用程序池时,存储在其中的数据都会丢失,然后API在大约40分钟内无法提供数据,这是不可能发生的。

我还研究了涉及名称空间System.Runtime.Cachingthis问题。但是,在重置IIS应用程序池时,命名空间提供的MemoryCache也将丢失其所有数据。

我的问题是,是否有其他解决方案可以将AD中的数据存储在Web API内存中。我们目前希望避免使用持久化存储(关系或文档DB)来保存信息,但如果没有可行的解决方案出现,我们可能会坚持使用Mongo (除非提供更好的存储)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-16 22:36:13

从可伸缩性的角度来看,内存中听起来像是一个糟糕的计划。如果您想要对API进行负载平衡,您可能会在内存中拥有此数据的多个副本,但它们可能会略有不同,从而导致在API的一个实例处理请求或另一个实例时产生不同的结果。

在内存中,可能会推断出一个列表,或者更好的是一个字典。您可以考虑Redis服务器,它支持多个节点,并将数据存储在内存中。它类似于字典,因为您将键值对存储为<string, string>。您的API的所有实例都可以指向相同的Redis集群,因此您可以获得一致性、可扩展性和性能。

您还可以考虑Service Fabric,它具有特殊的集合,允许您在有状态和无状态服务之间共享状态。像Redis一样,数据是跨Service Fabric集群序列化和存储的。它的容错能力非常强,内置了HA和DR.。

然而,就性能而言,没有什么能比得上Singleton Dictionary,所以它取决于您现在和将来需要什么。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42276646

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档