我正在制作一个应用程序,它将接收图像,然后需要使用 Nodejs 将它们存储在 SQL DB 中。我需要存储大量图像并对其进行大量查询(我需要查询数据库以查看该图像是否在其中)
据我所知,最好将文件保存在文件系统中,并将路径放在数据库中(更便宜)。
我学会了使用 Heroku 和 Mlab 进行开发并将 URL 保存到我的数据库中,这将是我第一次使用文件系统。
我读过关于 Azure 存储选项的文章,一位销售代表告诉我,我可以使用他们的 Blob 服务,这很合适。但似乎使用他们的服务需要学习很多东西。我之前在另一个项目中尝试过 Azure 和 AWS,与仅使用 git 部署到 Heroku 相比,使用它们似乎更加复杂,只需选择要使用哪些服务和内容以及如何使用它们。
但似乎使用 azure blob 的价格比使用 Heroku 等要便宜很多,尽管我很难理解所有这些服务(Heroku DYNOS......)的定价。
就我所知,使用 Heroku,我只需制作我的应用程序,使用 fs 模块将文件上传到服务器,然后将该路径保存到我的数据库中。而要使用 azure blob,我还必须学习如何使用 azures API 并将图像存储在 blob 中。我已阅读他们的文档: https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-nodejs-v10 并且无法确切地找到如何知道文件在 blob 上的位置,以便我可以将其保存到我的数据库中,然后如何检索该文件。
我的问题如下:
- 我的最佳选择(最便宜最有效)是使用 azure 和 azure blob 还是有更好的选择来满足我的需要?
- 是否正如我所看到的,使用 Azure 存储和 Blob 时还有另一层复杂性,而这是使用 Azure 和 AWS 时的常态吗(这些是云服务吗,而其他的不是?Heroku 也在他们的网页上提到了云,但这些似乎不同)????
- 是否值得花费精力去了解 blob,还是最好先使用一些更简单的东西来开始?
- 将图像保存到 cloudinary 并将 URL 保存到我的 SQL DB 是否可行,或者这是否太昂贵或效率低下???
我在这里先向您的帮助表示感谢
答案1
我还没有尝试过 Heroku,但我可以对 Azure Blobstorage 发表评论。
我认为最佳做法是:
将图像存储到 blobstorages 中,使用 匿名只读访问容器并将 URL 保存到数据库。
由于您只有 URL,因此您的应用程序将从 Azure 下载图像,从而节省服务器的流量。生成随机字符串名称而不是每个图像的 (1,2,3,... 或 a,b,c,... 或 john,doe,jane,...) 将限制用户访问未经授权的图像。
在 Azure 上创建 Blob 存储非常简单。
- 创建资源 (+)
- 选择存储帐户
- 创造
你会得到存储帐户名称和钥匙从访问密钥标签。
在存储帐户中您将看到:Blob、文件、表、队列。
转至 Blob:
- 创建新容器
- 注意公共访问级别对于容器(我推荐容器)
- 单击容器属性(更多选项图标...)并获取容器 URL。
正如在您阅读的文档,你需要定义
- 存储帐户名称
- 钥匙
- 容器 URL
在您的代码中并使用它们。
答案2
据我所知,使用 Heroku,我可以制作我的应用程序,使用 fs 模块将文件上传到服务器,然后将该路径保存到我的数据库中。
可以,但这些文件会在 a) 下次部署时和 b) 每天在 dynos 重启时消失。Heroku 上的文件系统是临时的 - 对其所做的更改不是永久的。
如果您需要用户上传(或任何其他类型的 Git 存储库中不存在的永久文件),则需要某种非 Heroku 存储(如 Azure 或 AWS 的 S3)来存储它们。
答案3
- Azure 存储 Blob 是 Azure 中最便宜的图像存储选项
- 您真的不想保存任何本地磁盘或在数据库中存储图像(谁会这样做?)
- Blob 存储非常简单
- 不知道什么是 cloudinary,但如果你将图像存储在 blob 中,你仍然需要知道图像的 URL,因此你可能必须将其保存在某个地方