【问题标题】:Obtain image via an API call to then save and serve up from local for repeated viewings通过 API 调用获取图像,然后保存并从本地提供以供重复查看
【发布时间】:2019-09-03 02:01:02
【问题描述】:

我目前正在开发一个将显示项目列表的 web 应用程序。该列表是动态的,并且可以在用户之间更改。一个很好的类比是将对象想象成书,数据库支持它作为图书馆。

我的Book 数据库将包含图书馆中所有书籍的列表。
- 用户可以将一本书添加到他们的收藏中。
- 如果用户想要将新书添加到他们的收藏中,他们也会将其添加到图书馆。
- 如果用户想要将一本新书添加到他们的收藏中并且它存在于图书馆中,则不会将任何内容添加到图书数据库中。

目前我的表格非常简单:Book(id, name)。我可以通过 API 调用访问有关这些书籍的大量信息,例如封面、页数等。我想存储这些信息的一个子集,尤其是图像 url。

我认为一个明智的方法是更改​​我的 Book 表,使其看起来像:Book(id, name, imageUrl, otherValue, idOfThisBookInApiCallTable) idOfThisBookInApiCallTable 值将允许我在需要时获取其他属性,但是我有两个问题我不确定如何继续。

首先,这个表很容易与 APITable 过时。我预计不会有太大变化(如果有的话),但风险是存在的。

其次,存储的图像是我主要关心的问题,在可能有 50 本书的页面上,我每次都会调用图像的 url。我认为一个明智的解决方案是在本地下载图像,然后在重复访问时提供它,但我不确定这是否是正确的方法。

请问是否有人可以看到这种方法的任何问题和/或建议更好的方法?我在 db/web/app 设计方面的经验有限,所以有点超出我的深度。

如果在本地保存图像是正确的方法,是否有“最佳”方法? 提前感谢您的任何帮助/建议/建议。

【问题讨论】:

    标签: java database spring database-design


    【解决方案1】:

    我可以分享我对合理设计的 2 美分,但我认为这个问题过于宽泛,而且主要是基于意见的。让我们一次处理一件事。

    1. 首先关于您的Book 表。为什么不使用Library 表来维护图书馆的当前状态以及图书馆目前拥有的所有书籍。
    2. 每个用户都可以持有一个集合(一个表等,具有一对多关系,例如 user_id 与 book_ids 列表或其他),然后每个用户都拥有 bookID 的一个子集。
    3. 通过用户或图书馆添加新书时(图书馆也可以添加更多书籍,即使没有特定用户带入),请始终将其添加到图书馆,并且如果 user_id 是这本书的“所有者”已知的, 在集合表中也为这个用户添加一个关系
    4. 一本书的更多详细信息可以单独存储在BookDetails 表中。
    5. 在您身边存储图像始终是一个不错的选择,并且您不希望在一次又一次请求时因过度使用而被 API 阻止。您可以使用一些云存储,例如 s3,您可以在其中保留图像,然后不打扰外部 api。 S3 支持压缩和缓存,因此您可以节省大量时间并且不会遇到速度问题。

    以上所有观点只是我根据您在问题上提供的信息的看法。对于您的用例,情况当然会有所不同。

    【讨论】:

    • 您好,我有点担心这个问题在任何人有机会分享之前就被关闭了。我需要找一个网站来征求意见:D 感谢您抽出宝贵的时间来回答,您的观点非常棒,我已经实施了您的建议或将这样做,我特别喜欢 BookDetails 表来帮助进行内务管理。重新上图,我想我会使用 S3 的 GCP 变体,因为该项目的目标之一是更多地了解它。假设它与 s3 具有相似的属性,我完全忘记了敲击 api 并被阻止。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-22
    • 2011-12-14
    • 2023-04-04
    • 1970-01-01
    • 2014-01-11
    • 2013-06-27
    • 2013-11-15
    相关资源
    最近更新 更多