gpt4 book ai didi

image - 将图像存储在数据库与文件系统中以供用户在网站上上传图像

转载 作者:IT老高 更新时间:2023-10-28 13:19:50 26 4
gpt4 key购买 nike

我正在建立一个允许用户上传图片的网站。每个用户可以使用的最大空间量也有限制。

我有两个想法。

  1. 使用 GridFS 将图像存储在像 mongoDB 这样的 NoSQL 数据库中。
  2. 将图像存储在文件系统中,并在数据库中存储路径。

以上哪个更好?为什么?

最佳答案

叹息为什么大家都跳到 GridFS?

根据图像的大小和确切的用例,我建议将图像直接存储在数据库中(而不是通过 GridFS)。原因如下:

文件系统

  • 将图像存储在文件系统中被证明效果很好,但它并非易事
  • 您将需要不同的备份系统、故障转移、复制等。这在 DevOps 方面可能会很棘手
  • 您需要创建一个智能目录结构,它是一种泄漏抽象,因为不同的文件系统具有非常不同的特性。有些人在一个文件夹中存储 16k 个文件没有问题,而另一些人则开始窒息仅 1k 个文件。一种常见的方法是使用像 af/2c/af2c2ab3852df91.jpg 这样的约定,其中文件夹 af2c 是从文件名中推断出来的(它本身可能是用于重复数据删除目的的内容哈希)。

GridFS

GridFS 用于存储 文件,并以与文件系统非常相似的方式存储文件。这有一些缺点:

  • 对于每个文件,您将需要一个 fs.file 和一个 fs.chunk 文档。大文件完全需要分 block ,但如果您的文件平均低于 256k,则不会进行真正的分 block (默认 block 大小为 256k)。因此,在 GridFS 中存储小文件时,您会得到开销而没有优势。糟糕的交易。它还需要两个查询而不是一个。
  • 它为您的收藏强加了某种结构,例如拥有一个“文件名”。这取决于用例,但我经常选择使用哈希作为 id 并将哈希存储在用户中,例如。重复数据删除,易于实现,与缓存完美对齐,并且不需要提出任何约定。它也非常高效,因为索引是一个字节数组。

如果您为摄影师运营一个网站,他们可以上传 RAW 文件或 10MB 的大型 JPEG,情况可能会有所不同。在这种情况下,GridFS 可能是一个不错的选择。为了存储用户图像、缩略图等,我只需将图像放在其自己的文档中即可。

关于image - 将图像存储在数据库与文件系统中以供用户在网站上上传图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23263468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com