【发布时间】:2016-10-16 09:08:13
【问题描述】:
我正在向我当前的项目添加一些测试,该项目使用 Azure Blob 存储来存储来自流分析作业的遥测数据。我想对获取遥测数据的例程进行测试,因此我为测试数据创建了一个单独的容器。我下载了一组示例数据,修改了数据以满足我的需求,然后(使用 Azure 存储资源管理器)将所有内容重新上传回新容器。
测试立即失败,我很快发现这是因为文件的 LastModified 日期更改为上传日期/时间。这很好,但上传的顺序也不同。我的代码使用文件的修改日期来找出哪个是最新的,现在将根据新日期返回一个不同的文件。
我发现您无法修改此属性,尽管您可以更改另一个属性以使其更新。所以我知道解决方案:我可以编写一个快速脚本,从我的生产实例中获取文件序列,然后以相同的顺序访问测试实例中的每个文件。
但是...我想知道这是否是最佳选择。我还阅读了将自定义日期时间存储在单独的属性中的“最佳实践”,但我认为我不能直接从流分析(正在编写 blob)中做到这一点。我还考虑使用 Azure 函数来执行此操作(新 blob => 更新属性),但我不是增加复杂性和可能因任何原因而失败的东西。
所以我正在寻找解决这个问题的最佳方法。有人吗?
更新:这个可能值得更多解释。除了使用 LastModified 日期进行排序之外,我还使用它来过滤 blob。 Blob 本身是包含 ASA 输出数据的 CSV 文件,因此是遥测记录。每条记录都有一个时间戳,但该信息在文件中。检索数据时,我不想深入每个文件以找出这些记录的时间戳。所以我使用预过滤器在一定时间内过滤掉blob,然后只下载/打开那些文件到里面的记录。
只要您不接触任何 blob,它就可以完美地工作,但很明显,一旦任何 blob 因任何原因被修改,它就会停止工作。所以我现在确信我需要一种不同/更好的方法来解决这个问题;但如何?
【问题讨论】:
-
如果我理解正确,您正在使用 azure 流分析进行一些计算并将结果存储在 blob 中,并且您在不同的进程中使用这些 blob。而且您依靠 lastmodified 时间来确定要下载哪些 blob,对吗?我想知道为什么你必须依赖 lastmodified 时间,为什么不按时间对输出 blob 进行分区,只在适当的文件夹下查看?
-
这确实是一个有效的评论,实际上我正在这样存储 blob。但在某些情况下(我不知道为什么),ASA 会将两个 CSV 文件放在一个文件夹中。我想我可以同时加载它们,然后最后使用内部日期进行正确的比较。早该想到这一点,我想有时候把事情复杂化太容易了。
标签: azure-storage azure-blob-storage azure-stream-analytics