首页 > 解决方案 > Blob 数大于上传文件数

问题描述

TL;DR:解决了这不是问题——我的调查是错误的

我正在使用 Azure 存储帐户来存储通过 Web 应用程序上传的文件。它的设置方式是只有通过 WebApplication 上传的文件才存储在 Storage Account Container 中(所以没有其他方式文件应该出现在容器中,没有直接操作 Storage Account 容器或日志或任何东西。只需上传)

现在因为 WebApplication ) Ruby on Rails 6.1 with ActiveStorage lib uploads) 正在为每个上传的文件在 SQL 表中创建行,所以我很容易获得上传文件的总数:

ActiveStorage::Blob.count
=> 437538

我应该有437 538Azure Blob 存储容器上的文件。

现在,当我从 Web UI 检查文件总数时, Storage Explorer (preview) > container > more > folder statistics它说我周围有1 133 000Blob

在此处输入图像描述

我在BlobAzure Storage周围的桌面应用程序中做了同样的事情1 132 000

在此处输入图像描述

因此,我期待437k文件,但我有1.3 MilionBlob。注意:上传的文件不大 - 图片或 pdf 不超过 50MB

我的问题:这是否意味着文件没有 1:1 映射到 Blob 计数?如果是这样,我如何将 Blob 计数转换为 File 计数?

我认为这可能是快照,但 WebUI 明确表示“不包括快照”

现在是的,有些记录可能已从 SQL 表中删除,而不是从 Azure Blob 中删除,但我预计最多有 1000 个此类错误(由于应用程序的性质 - 它更像是不删除任何内容的存档)

标签: ruby-on-railsazure-storageazure-blob-storagerails-activestorage

解决方案


好的,我的整个调查都是错误的!(我很抱歉 )

简短回答:是的,blob 计数与文件计数为 1:1

我有 130 万条记录的原因是我没有考虑 WebApplication 处理的缩略图(我的错)

完整详情(适用于 Ruby on Rails 开发人员):

ActiveStorage lib 的工作方式是,当您上传文件时,会在 ActiveStorage::Blob 表中创建一个 sql 行。因此,您将 1:1 文件升级到 Azure 和 sql 记录。所以此时我将有 436k 文件 == 436k sql 记录

但是,当请求 ActiveStrage 变体(缩略图、预览、...)时,lib 将缩小缩略图并将其上传到 Azure Blob 以供将来用作缓存,这意味着此时您有 436k sql 行 == 436k 文件 + 1 个文件(缩略图)

现在考虑许多不同大小的缩略图,您很快就会得到额外的 864k 文件

我希望这对将来的人有所帮助


推荐阅读