Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure functions Azure用于消除重复摄取数据的功能_Azure Functions_Azure Durable Functions - Fatal编程技术网

Azure functions Azure用于消除重复摄取数据的功能

Azure functions Azure用于消除重复摄取数据的功能,azure-functions,azure-durable-functions,Azure Functions,Azure Durable Functions,我每5秒轮询一个带有Azure函数的第三方API。API总是返回一条JSON消息,即使响应自上次读取以来没有改变 目前,我正在向data lake编写json响应,并使用批处理过程处理重复数据消除。现在,我想将重复数据消除逻辑移到函数中,以便记录上次成功写入data lake的情况,并且仅在响应发生更改时再次写入响应 我的想法是,无服务器函数应该是无状态的,因此我必须将最后一条成功记录的ID(或者整个响应的哈希)记录到表存储中的名称/值对中。然后在下一次执行时,我检查它是否已更改并继续执行 另一

我每5秒轮询一个带有Azure函数的第三方API。API总是返回一条JSON消息,即使响应自上次读取以来没有改变

目前,我正在向data lake编写json响应,并使用批处理过程处理重复数据消除。现在,我想将重复数据消除逻辑移到函数中,以便记录上次成功写入data lake的情况,并且仅在响应发生更改时再次写入响应

我的想法是,无服务器函数应该是无状态的,因此我必须将最后一条成功记录的ID(或者整个响应的哈希)记录到表存储中的名称/值对中。然后在下一次执行时,我检查它是否已更改并继续执行

另一个选项可能是持久函数-似乎有一种使用IDurableEntityContext ctx写入状态的方法:

[FunctionName("Counter")]
public static void Counter([EntityTrigger] IDurableEntityContext ctx)
{
    switch (ctx.OperationName.ToLowerInvariant())
    {
        case "add":
            ctx.SetState(ctx.GetState<int>() + ctx.GetInput<int>());
            break;
        case "reset":
            ctx.SetState(0);
            break;
        case "get":
            ctx.Return(ctx.GetState<int>());
            break;
    }
}
[函数名(“计数器”)]
公共静态无效计数器([EntityTrigger]IDurableEntityContext ctx)
{
开关(ctx.OperationName.ToLowerInvariant())
{
案例“添加”:
ctx.SetState(ctx.GetState()+ctx.GetInput());
打破
案例“重置”:
ctx.SetState(0);
打破
案例“get”:
Return(ctx.GetState());
打破
}
}
我担心这两种解决方案都不能可靠地处理每5秒的读/写频率。
是否有人能确认这两个方案中的任何一个是一个好的解决方案,并且对于用例来说是可靠的?(或者可能是其他解决方案,用于从API中提取数据,并且只有在上次读取后数据发生更改时才继续?

您不必创建资源哈希。事实上,如果第三方API实现正确,它应该在您第一次访问资源的响应负载中返回ETag。然后您可以在表存储中支持
resourceId:eTag
映射。下次轮询相同资源的API时,将
eTag
作为请求负载的一部分。如果实体未更改,则第三方API应返回304响应代码


假设第三方API支持ETag检查,您应该能够创建一个基于计时器的函数来轮询API,或者使用协调您的工作流。

谢谢,我将在API上查看ETag。您对使用持久实体而不是手动将其用于表存储有何看法如果您不想依赖表存储,那么rable实体应该可以工作,尽管我自己还没有尝试过rable实体。希望它对您有用!