我正在开发带有 Angular 前端的 ASP.NET Core 8 API(均托管在 Azure 应用服务中)。在前端应用程序中,我有一个仪表板页面,需要显示从 Azure SQL 托管的多个数据库中提取的数据。挑战在于仪表板上显示的数据可能会在单个数据库级别同时更新。
我正在寻求有关实现此场景的最佳方法的建议。具体来说,我正在寻找以下方面的指导:
在 ASP.NET Core API 中从多个 Azure SQL 数据库高效提取数据的最佳实践是什么? 考虑到数据库级别发生的潜在更新,如何确保仪表板上显示的数据是实时或接近实时的? 是否有任何推荐的架构模式或技术可以有效地处理这种情况? 如果可能的话,您能否提供代码参考或示例来演示建议方法的实现?
任何人都可以通过提供指导来帮助我吗
有几种可能的方法可以解决这个问题:
FE 上的长轮询机制 - 使用
setInterval
请求您需要的所有数据。在 BE 中,它需要一些端点,其中所有必需的信息都聚合在某个 DTO 中。
但这也需要 FE 上的一些逻辑来忽略值(如果它们不改变)。
BE 上的长轮询机制 - 与上面相同,但请求数据库将在 BE 上间隔完成(一些 [
IHostedService
]{https://learn.microsoft.com/en-us/dotnet/architecture/microservices/ multi-container-microservice-net-applications/background-tasks-with-ihostedservice}),还需要逻辑与以前的值进行比较 - 如果它们发生了变化 - 将更新发送到 FE。
这需要在FE和BE上实现通知机制(例如SignalR)。
我会探索 SQL 数据库中的触发器 - 也许有一种方法可以挂钩这些触发器:
预览版中还有一个有趣的功能,允许将 Azure Function 挂接到数据库触发器中:
然后在这种方法中 - 你只会得到“真实的”相关更新,这将导致 BE 上的代码简化。在这样的触发器上,您只需向 FE 发送通知(同样是 SignalR)。