【问题标题】:Creating a test-data container in Azure blob storage在 Azure Blob 存储中创建测试数据容器
【发布时间】: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


【解决方案1】:

在我看来,您有两个不同的东西:您要存储在 blob 存储中的数据和有关 blob 的元数据,例如时间戳。我会为元数据创建一个不同的(天蓝色)数据库,或者更简单地将元数据添加到(块)blob:

blockBlob.Metadata.Add("from", dateTime.ToString());
blockBlob.Metadata.Add("to", dateTime.ToString());
blockBlob.Metadata.Add("order", "1");

对于排序,我只需添加一个简单的 order 属性。

【讨论】:

  • 你是对的,但这是假设你可以控制写入 blob 的进程。我没有这种控制,因为 blob 正在由 ASA 写入磁盘,并且在那里没有太多要配置的东西。无论如何,我改变了这个过程,使它依赖于存储在目录结构中的“时间戳”,而不是文件本身的时间戳。这行得通,我会在这里添加一个答案。
【解决方案2】:

@Vignesh 的评论在这里值得称赞,但为了得到这个明确的答案,我会自己提供。

使用 ASA,您可以将输出设置为按日期/时间进行结构化。这意味着在这种情况下,数据将写入具有以下目录结构的 blob 存储:

2016 / 06 / 27 / 15 / 23 (= 27-06-2016 15:23) 2016 / 06 / 28 / 11 / 02 (= 28-06-2016 11:02)

ASA 输出允许您指定您希望结构的粒度,在我的例子中,我选择按天存储它(因此不包括时间路径)。 ASA 运行时现在将确保来自某个时间点的数据存储在位于正确路径中的 blob 中。

然后我随后将我的逻辑更改为不再使用单个 blob 文件的日期时间戳,而只需从我感兴趣的时间范围内的文件夹中读取文件。这确保我们只获得在该时间范围内生成的数据。如果一个文件夹中有多个文件,我需要同时加载它们,因为它们都在同一个时间范围内。只要分钟对您来说粒度足够,即使使用文件夹结构来处理此类事情可能会感觉有些奇怪,但它的效果非常好。

为 blob 设置一个单独的“索引”来跟踪它们的日期时间当然也可以,但会增加复杂性,在这种情况下我并不真正需要。

【讨论】:

  • 在此恕我直言,使用文件夹一点也不奇怪。
  • 也许不是,我总是被告知在重要的事情上使用文件夹结构是不好的做法。猜猜这是个人的事情:)
  • 然而,我们一直使用它(很好地整理)用于 REST API 中的资源
猜你喜欢
  • 2013-02-23
  • 2011-02-24
  • 2021-03-19
  • 2020-03-28
  • 2018-11-21
  • 2021-06-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-19
相关资源
最近更新 更多