C# 在服务器上处理的小API调用与存储在内存中的一次大数据拉取

C# 在服务器上处理的小API调用与存储在内存中的一次大数据拉取,c#,angular,design-patterns,.net-core,architecture,C#,Angular,Design Patterns,.net Core,Architecture,设计问题:我有一个SPA Angular 7应用程序,有相当数量的数据需要对用户的每一个输入进行处理才能转化为图形。例如:如果用户打开一月,则图表仅显示一月的数据……如果用户打开一月和二月,则图表再次更新。用户还可以关闭和打开其他过滤器。实现此功能的最佳方式是什么 1) 将所有必要的数据下拉到客户机上,并使用客户机关闭和打开的不同月份和属性本地存储在内存中 2) 许多对API的较小请求和图形上的加载微调器,在API中完成的处理返回到相对格式化的客户端 3) 类似Redis或memcache的东西

设计问题:我有一个SPA Angular 7应用程序,有相当数量的数据需要对用户的每一个输入进行处理才能转化为图形。例如:如果用户打开一月,则图表仅显示一月的数据……如果用户打开一月和二月,则图表再次更新。用户还可以关闭和打开其他过滤器。实现此功能的最佳方式是什么

1) 将所有必要的数据下拉到客户机上,并使用客户机关闭和打开的不同月份和属性本地存储在内存中

2) 许多对API的较小请求和图形上的加载微调器,在API中完成的处理返回到相对格式化的客户端

3) 类似Redis或memcache的东西,用于在组件init上存储初始加载的数据


我稍微倾向于对API进行较小的调用,因为我更喜欢使用强类型语言(在本例中是C)

就像在所有优化问题中一样,这要视情况而定。这里没有正确和错误的答案,您将不得不分析您的用例来决定权衡是什么

需要记住的一些事情:小的调用更容易缓存,依靠HTTP缓存控制头来保持应用程序干净是值得的。这在传统的时间/空间权衡中有一个缺点,即缓存的粒度越细,将其重新组装到更大的输出中所需的处理能力就越大


如果您可以避免在服务器上进行图形化渲染,您通常会对结果更满意。事实是,离最终用户渲染越近,体验就越好(一般来说,经验法则)。如果没有其他原因的话,这是CPU密集型的,而且(通常)客户端机器比服务器机器贡献的CPU周期要多得多。

我的首选是进行小型API调用。原因是,您可以控制服务器的扩展和各种缓存机制的应用,但您几乎无法控制客户端处理和呈现大型数据拉取。好吧,假设你有一个无限大的服务器和能力最低的客户端。我喜欢它,但我担心服务器上大量工作的成本。那么,这是另一个不利于较小API调用的因素。但老实说,在服务器端,您的性能将受到数据库连接的IO限制,您可以通过添加缓存层来进行补救;Web API本身可以扩展以处理您可能期望的HTTP请求数量。