存储数百万张图像[关闭]

2024-01-16

我需要准备一个存储数亿张图像的存储空间(现在我有7000万张,而且这个数字还在增长)。每张图像大约有。 20kB。当然,我可以将它们存储在文件系统中,但我担心 inode 的数量。我测试过 MongoDB 和 Cassandra。两者都有缺点(我的硬盘资源有限):

  • MongoDB - 磁盘空间消耗是原始数据大小的 3 倍
  • Cassandra - 磁盘空间消耗与原始数据的大小相似,但 Cassandra 需要大量可用空间来进行压缩过程

任何人都可以建议此类问题的正确解决方案吗?


我一生中曾使用 S3(包括 Rackspace 云文件)和 MongoDB 进行视频分发。

大多数人都会毫不犹豫地选择 S3,但我发现两者都有其缺点。其中一个大问题是 S3 不是 CDN,它实际上是特定区域内的冗余存储,不会复制到其他 S3 区域,这意味着您需要在 S3 之上使用诸如 cloudfront 之类的东西来 ping 您的图像如果您的网站负载严重,则可以使用某种缓存。

S3 还有其他功能,使其不那么像 CDN,而更像是一个存储仓库。话虽如此,对于不经常访问的文件,S3 的速度非常快。

这种双层当然会带来维护等复杂性。不仅如此,CDN 还可以在 TTL 上工作,尽管现在许多 CDN 具有边缘清除功能,但它们仍然不能 100% 确保您的文件不可访问。

因此,由于设置和访问(也可能访问应删除的文件),这可能很快就会变得相当昂贵。

这就是 MongoDB 的地方could赢。根据您的场景,MongoDB 实际上可能更便宜,因为您可以使用 AWS 上的一大堆微型实例来实际保存您的信息,向这些实例添加现货实例预留(非常便宜)以及您所需的一切是单台机器上的一个大磁盘。

天哪,您甚至可以使用 S3 来存储图像,然后使用 MongoDB 作为云前端的替代品。

当您想要将图像 ping 到不同的区域时,您只需在该目标区域中创建一些点实例,然后让 MongoDB 复制其数据即可。您也可以通过复制做一些很酷的事情,以确保只有来自该区域的经常访问的文件才会放置在该区域中。

所以我不会抛弃 MongoDB(甚至 Cassandra),而是会在两者之间进行经济情况调查。

Edit

关于 S3 定价的补充说明,如果您将文件存储在 RR(减少冗余)中,那么价格会减半(大约),这使得 S3 非常便宜,但是,您仍然会遇到 S3 不是 CDN 的问题。

进一步编辑

因为我实际上只是从@cirrus 的回答中继续,所以我实际上会重新评估你的问题,上面已经回答了。

举个例子,Youtube 实际上将所有图像存储在单个计算机上,然后进行分发,因此他们可以轻松管理 2 亿个缩略图,并且……嗯……每天可以轻松地从文件系统中获得大量视图。所以我认为你对文件系统的担心被高估了。

至于哪个数据库更好......我不知道,这取决于你的测试。

我的意思是,你的问题的答案取决于你的场景、你的预算、你的硬件和你的资源,也就是说,如果你有 AWS 服务器,这将是一个与专用内部服务器完全不同的答案。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

存储数百万张图像[关闭] 的相关文章

随机推荐

  • .htaccess - 尝试强制 https 时“重定向过多”

    我试图强制根域的子文件夹 bbb 始终显示为 https 还有我的 htaccess文件负责页面的扩展名 我已经把 htaccess文件在我的里面 bbb 文件夹 但当我尝试强制连接到 https 时 我得到 太多重定向 没有它一切工作正常
  • Maven:在构建过程中安装jar文件

    我有一个要求如下 我需要在 Maven 构建过程中运行 ant 构建文件 我需要从 pom xml 文件调用 build xml 我已经使用 maven antrun plugin 做到了这一点 现在我需要在 maven 编译我的项目源之前
  • Azure WebJobs 发布错误

    我们部署了一个带有生产槽和开发槽的 Web 应用程序 我们创建了多个 Web 作业 连续的和计划的 并且我们希望手动部署它们 不链接到 Web 应用程序部署 因此我们遵循的流程部署是 1 gt 部署Web应用程序 2 gt 对于每个 Web
  • 无法从 Kubernetes 中的 Spring Boot 客户端从远程 Spring 配置获取值

    这是我的客户端的 bootstrap yml spring cloud config enabled true uri http localhost 8888 label master spring application name mic
  • 释放空指针

    如何释放空指针 struct vStruct void vPtr struct vStruct next struct vStruct sObj struct vStruct sObjNew sObj delete sObjNew gt v
  • 当检测到pointermove时,链接上的鼠标操作不会触发pointerup事件

    我无法获取pointerup在链接上触发的事件 A带有一个标签href属性集 对于event pointerType mouse 如果鼠标在之间移动pointerdown and pointerup 我有以下场景 var lastEvent
  • 为什么我的最终向量是应有大小的两倍并且有前导 0?

    我正在为一个班级做这个小项目 我已经基本完成了它 但由于某种原因 我的合并向量是应有大小的两倍 并且有不应该存在的前导 0 main函数是为我们编写的 我们必须编写分区 快速排序和multiway merge函数 首先 程序应该获取列表的数
  • 在 json 和 Web api 之间保留 C# 日期时间本地时间?

    当我在 json 对象中有数据时间时 我遇到问题 它会将其转换为 C dateTime 中的 UTC 时区 只是想问如何保留本地时间 我可以在 web config 文件或 geter 或 setter 中设置时区属性吗 因为我必须对象可以
  • Linux 上的 python 中的“导出”子进程模块错误?

    我正在设置一个程序将我的计算机连接到我们学校的代理 目前有这样的东西 import subprocess import sys username fergus barker password proxy proxy det nsw edu
  • asp.net mvc 中使用 My SQL 的实体框架 [重复]

    这个问题在这里已经有答案了 我正在开发一个 ASP NET MVC Web 应用程序 并且我有一个商业系统 我想连接到它的 MySQL 数据库 所以我决定在 ASP NET MVC Web 应用程序中使用实体框架 但是当我厌倦了创建新连接时
  • AngularJS:当 $rootScope 值更改时,指令中的 $watch 不起作用

    我创建了一个应用程序 AngularJS 其中我有一个指令 我在指令中设置了一个监视 以便在 rootScope 变量发生更改时触发指令中的一些方法 但问题是当 rootScope name值已更改指令内的手表不起作用 我的代码如下所示 工
  • 按组编号[重复]

    这个问题在这里已经有答案了 假设我们有以下数据库 ID Shoot hit 1 10 2 1 9 3 1 8 1 2 10 8 2 8 8 2 11 10 2 7 2 3 9 2 4 6 6 4 6 5 我希望为每个组分配编号 在本例中为每
  • 查找文本并替换为超链接

    我正在尝试将正文中的文本替换为模式 ASA 到 ASA 超链接 如果主体中只有一种模式 我的代码就可以工作 但如果我有很多模式 比如 ASA3422dfASA2389dsASA1265sa 整个身体被替换为 ASA互易65 我的代码在这里
  • 如何在 scikit-learn(用于计算机视觉)中使用自己的数据集?

    如何在 scikit learn 中使用我自己的数据集 Scikit教程总是以加载他的数据集 数字数据集 花卉数据集 为例 http scikit learn org stable datasets index html http scik
  • 如何标准化 Wordnet 中的相似性度量

    我正在尝试计算两个单词之间的语义相似度 我正在使用基于 Wordnet 的相似性度量 即 Resnik 度量 RES Lin 度量 LIN Jiang 和 Conrath 度量 JNC 以及 Banerjee 和 Pederson 度量 B
  • Laravel hasMany 与 where 处于多态关系

    我有 3 张桌子 汽车 公寓和商店 每张桌子都有它的照片 照片存储在数据库中 我只想使用一张照片表 我不想为每辆汽车 公寓和商店创建照片表 Photos表结构是这样的 id photo url type destination id 1 h
  • 如何在 Windows 版 Git Bash 中更改 RGB 颜色?

    我在 Windows 中使用 Git Bash 并用于我的自定义目的git log格式 我想修改终端的确切 RGB 颜色值 以便我可以微调颜色输出 我的全局git日志格式如下 gitconfig lg1 log graph abbrev c
  • 如何更改javafx TextField中文本的颜色?

    我想更改 TextField 中的字体颜色 我发现 fx background color fx border color用于更改背景和边框的颜色 但不用于更改文本 设置 fx text fill对我有用 见下文 if passed res
  • 如何定位特定 div ID 的标题?

    我正在尝试使用与页面其余部分的标题不同的字体系列来设置标题中的所有标题的样式 但我无法使样式仅适用于特定的标题 ID 这是我尝试过的 header h1 h2 h3 h4 font family Helvetica 但这会导致所有 h1 2
  • 存储数百万张图像[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi