存储提供商提供的缩略图


注意:本文改编自在 Make WP Slack 上进行的一次讨论(请参阅链接了解更多背景信息)。

我们目前关于缩略图的情况

提供商收集了缩略图,并将其放入目录中的 thumbnail 列。我们现在已经有了相关数据,并且该列尚未被删除。由于API 中也存在此列,其中的数据(音频和图像)也会被复制到 API 中的 thumbnail 列。不过,只有 Audio 模型使用 thumbnail 列,而Image 模型会忽略该列,并尝试使用主图像 URL 创建缩小版缩略图。提供商中的 MediaStore 类已被修改,因此无法再向 thumbnail 列添加新的缩略图 URL,但可以将其添加到 meta_data["thumbnail_url"] 下。

最近我们遇到过这样的情况:尝试从原始尺寸的图像 URL 创建缩略图时,持续发生超时,导致记录无法显示在搜索结果中。SMK 就是最近的一个例子:(1) (2)。在这些情况下,使用提供商预先计算好的缩略图可能更有利。重要的是,并非所有提供商都会提供或预计会提供缩略图。因此,我们似乎可以考虑通过删除这个经常为空的列来减少表的宽度。

提案

对于 image:我们首先遍历目录,将现有的所有 thumbnail 值复制到 meta_data["thumbnail_url"] 中。然后执行不含列的新表替换,并从表中删除 thumbnail 列。这将有助于节省空间并减少表的宽度。然后,我们更新 image_view 物化视图,使用 meta_data 字典为APIAPI API(应用程序编程接口)是一种软件中间层,允许程序以受限且明确定义的方式相互交互并共享数据。填充 thumbnail 列。Audio 视图的 audio_set_foreign_identifier 中有一个示例。这将使我们能够保留 API 中的 thumbnail 列,同时减少目录所占用的空间,因为目前在 API 上进行如此规模的迁移迁移 将网站的代码、数据库和媒体文件从一台服务器迁移到另一台服务器。通常在更换托管公司时进行。可能难以承受。接下来,我们将在两端对逻辑进行两项更改:

  1. 在 ImageStore 中添加 thumbnail_url 处理逻辑,该逻辑会自动将该值放入 meta_data 字典中
  2. 将 API 中 Image 模型的逻辑改为:在创建缩小版图像时,首先尝试使用 image.thumbnail (该值已在数据刷新期间从 meta_data["thumbnail_url"] 复制而来),然后再尝试使用 image.url

我们也可以对 Audio 做同样的处理;看起来大约有一半的记录没有缩略图:

deploy@localhost:openledger> select count(*) from audio where thumbnail is null;
+--------+
| count  |
|--------|
| 427124 |
+--------+
SELECT 1
Time: 4.354s (4 seconds), executed in: 4.328s (4 seconds)
deploy@localhost:openledger> select count(*) from audio;
+--------+
| count  |
|--------|
| 949384 |
+--------+
SELECT 1
Time: 3.899s (3 seconds), executed in: 3.887s (3 seconds)

大家觉得这种方法怎么样?我认为,任何减少数据库表宽度的工作都很重要,因为这将使今后的迁移和数据管理更加容易。

#数据规范化#postgres#缩略图