【问题标题】:Nodejs store billions of images in a file systemNodejs 在文件系统中存储数十亿张图片
【发布时间】:2017-10-10 12:48:04
【问题描述】:

我是 nodejs 新手,目前我正在使用 mongodb 数据库开发 Node Web API。

  • 根据项目要求用户应该可以上传 他们的个人资料照片和封面照片。
  • 而且可能有数十亿个用户帐户

经过一番研究,我发现“将图像存储在文件系统中比存储在数据库中更好”

所以现在我的计划是将图像保存在文件系统中。 但, - 一个文件夹中可以放置的文件数量有限(基于操作系统) - 应该能够快速访问文件

由于以上需求,为了存储大量图片,我们需要有一个好的文件夹结构和命名策略。

谁能推荐任何好的命名算法和文件夹结构来存储数十亿张个人资料图片?

(目前我通过 mongodb 生成的对象 ID 访问用户)

【问题讨论】:

  • 你考虑过像谷歌存储这样的服务吗?
  • 是的,我打算使用云服务,但问题在于如何正确存储文件。因为我需要将图像参考保存在数据库中。

标签: node.js mongodb filesystems multer directory-structure


【解决方案1】:

您可以为每个用户创建一个文件夹(如果操作系统在一个地方支持这么多文件夹)并将未存储在数据库中的用户信息存储在其中。

用户的数据库条目应包含一个名为“data_folder_id”的附加条目,其中包含文件系统上文件夹的编号。或者您可以直接根据用户ID命名文件夹。

一个示例文件夹结构:

[user_data] // The folder which will contain the data from your all your users
    [1] // The data folder from user 1
        [profile_photo.png] // Profile photo from user 1
        [cover_photo.png] // Cover photo from user 1

    [2]
        [profile_photo.png]
        [cover_photo.png]

    [3]
        [profile_photo.png]
        [cover_photo.png]

    [...]

如果您不能在一个地方存储这么多文件夹,则必须将它们拆分为子文件夹,例如:

[user_data] // The folder which will contain the data from all your users
    [1-50] // Contains user folders 1 to 50
        [1] // The data folder from user 1
            [profile_photo.png] // Profile photo from user 1
            [cover_photo.png] // Cover photo from user 1

        [2]
            [profile_photo.png]
            [cover_photo.png]

        [...]

    [51-100]
        [51]
            [profile_photo.png]
            [cover_photo.png]

        [52]
            [profile_photo.png]
            [cover_photo.png]

    [...]

【讨论】:

  • 但是在文件夹之间分配图像的逻辑是什么
  • @AchiraShamal 我添加了一条声明,该声明应阐明用户编号的来源。这能回答你的问题吗?
  • 还有一个问题,我通过对象 ID (mongodb) 引用用户,而且我认为为每个用户创建文件夹不是一个好习惯。
  • @AchiraShamal 我不确定我是否理解正确。您可以随意命名文件夹。当然,如果您愿意,您可以使用 mongodb 中的对象 ID 而不是用户 ID。
猜你喜欢
  • 2021-05-23
  • 2011-01-04
  • 2014-02-19
  • 1970-01-01
  • 2012-06-26
  • 2017-07-02
  • 2010-09-16
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多