Azure 流分析到 Azure Sql 数据库和性能

Azure Stream Analytics to Azure Sql Database and Performance

首先,我在流分析和处理方面还很新手。

我正在探索 Azure 流分析并遇到了各种设计,大部分时间流都是这样。

数据流(Azure Eventhub)-> 配置为 ASA 的输入-> 一些查询-> 输出到目的地,如 Sql 服务器、Power BI、事件中心。

现在假设现在有 10000 个事件在一分钟内到来,ASA 正在借助一些 window 函数(例如 Tumbling window 左右)处理这些事件。然后到 Azure Sql 数据库。现在在这里,如果我们看一下 Sql 服务器中可能有很多插入,并且它包含太多数据作为数据传入。

这里有多个方面需要考虑。

ASA 可用于逐个事件处理(用于类似 ETL 的实时摄取),但它真正出色的地方在于 aggregations and time windowing(用于实时分析和报告)。这些操作可以显着减少插入数据库的数据量。

使用ASA减少输出量

如果您的用例符合这些要求,您可以从每分钟 10000 个事件(您队列中的所有设备)增加到每小时 5 个(5 个工厂每小时指标的平均值)。您始终可以添加第二个输出,如果特定指标高于阈值超过 5 秒(预计每 30 秒 1 个警报),该输出将生成警报。

因此,任何规模的讨论都需要在业务案例的背景下进行。对于上述内容,您可能需要一个中等规模的作业来以每分钟 10K 个事件的速度处理数据,但任何入门级 SKU 都适用于数据库。

SQL 输出做规模

现在假设您的用例需要在 SQL 数据库中每分钟插入 10000 条记录。

This article 讨论了针对 Azure SQL 的性能影响。在那里您会看到,如果目标 table 与输入和查询对齐进行分区,并且您处于批量插入的批量大小的最佳位置,它应该可以很好地处理负载。这里不是能力问题,而是 performance/price 的问题。在大多数情况下,您将能够扩展数据库直到它处理负载,但它可能变得太昂贵而无法运行。

另一种方法是定位 Synapse SQL Pool (formerly SQL DWH), which scales easily up to 200MB/sec. It's a distributed system, like ASA, so it will scale up more elegantly and with a better performance/price ratio (but the starting point is higher, and you need to think about distribution).

其他产出

正如上面评论者指出的那样,如果您不需要 SQL 数据库的关系方面,您可能想探索切换到 Cosmos DB output。 Cosmos DB 是一个分布式数据库(可通过 ASA 很好地扩展),并存储文档而不是行。这里的主要好处是您不会在写入该数据库时遇到数据类型问题,它们不是强制执行的,与 SQL 数据库相反。

但这附带了一系列您需要了解的其他方面,因此如果您已经习惯了table SQL 数据库,您可能希望坚持使用它一开始。

是的,Azure SQL 数据库可以毫无问题地摄取那么多数据(实际上可以高达每秒数百万行)。以下是您可能会感兴趣的学习路径: https://docs.microsoft.com/en-us/learn/modules/deploy-iot-solution-azure-sql-database/2-analyze-solution-architecture