假设的简化情景:
我有一个Asp.Net核心3API,接受必胜客订单从Javascript。一个比萨饼被订购,我在C# API中反序列化对象。我现在有一个“必胜客”:
{
"name": "Margherita",
"date": "20201502",
"amount": "10"
"ingredients": ["tomato", "mozzarella"]
}我每天收到1亿份比萨饼订单,我需要一个显示订单的实时仪表板,还有一个菜单来搜索历史数据,比如“昨天”、“本月”、“去年”等等。
我还需要一个清单,在一个特定的时间框架内,或最主要的成分使用的比萨饼。
:使用Microsoft和C#实现这种结果的最现代、最有效的方法是什么?
有太多的队列,数据工厂,湖泊,存储,流等分析服务可供选择。
我能想到两种方法:
1)
2)
我认为第二条道路是可行的,但我还没有决定什么是最适合于简单和成本效益的任务的“堆栈”。
发布于 2020-02-16 18:09:04
我建议您考虑实现一些遵循Lambda体系结构的技术。基本上,这是分开的热路径和冷路径技术。这是一个很好的引言,不过我不会只关注James提到的技术。
如果您有一些常设查询,如“在滚动5分钟窗口中订购的比萨饼数量”,则Analytics可以输出这些聚合的恒定流。
然后,比萨饼订购事件也可以存档在Blob存储中,以便摄入到某些批处理技术中。例如,每天或每小时加载Azure SQL数据仓库(最近更名为Azure Synapse Analytics )。然后你的应用程序可以以一种临时的方式运行诸如“上个月最受欢迎的比萨饼配料”之类的查询。将这些热路径和冷路径技术结合起来,应该比尝试一种工具来做任何事情更有效。
另一个选择是星火。我建议在中查看Spark流。您应该能够进行流聚合,还可以为旧时间段的批处理查询加载Delta表。这个文章可以给出一个例子。
https://stackoverflow.com/questions/60241630
复制相似问题