- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
现在,我已经阅读了这些可能与这个问题有关的问题: Scalable Image Storage , Large scale image storage , https://serverfault.com/q/95444 .
在我问问题之前,我发现了以下事情:
1. Facebook uses Haystack (something CLOSED-SOURCE to the open-source world)
which is very efficient. Its a form of File system storage, engineered for speed
and large metadata management.
2. Any Operating System has a file limit in directories and may start to perform
extremely poorly when this limit is being exceeded.
3. Most NoSQL developers, have found it easy to use CouchDB / CouchBase Server
to handle images as it handles it as an attachment, glued to a document (record
in the database). However, still, this is file system storage.
4. HDFS, NFS, ZFS, are all File systems that may make it easy to handle large
distributed data. However, at applications like facebook, they could not help
5. Any proper form of caching is very essential to highly Image dependent
applications
6. Some PHP developers (mostly) have used MySQL to keep image meta-data while
creating folders and sub-folders (matching the meta-info) on the file system.
Each image will have a random hash name in relation to the meta-data in the
database to enable fast location on the file system
在理解了这些陈述和更多其他陈述之后,我开始意识到在文件系统上保留数十亿不断增长的图像是非常昂贵的。如果有人使用像 Amazon S3
这样的云存储,它会因为高图像流量和应用程序的存储而扼杀业务。
我已经评估了CouchBase Server的使用,将图像作为附件进行管理。然而,对于图像增长应用程序,这也是一个文件系统存储,我想知道如果成百上千的人同时访问图像,Couch base 会如何表现。我可以使用 Cloudant/Big Couch它具有自动分片/负载平衡。重点仍然是 NoSQL 解决方案也会将图像保存在文件系统上,当以高并发率请求图像时,这可能会导致整个服务宕机(图像可能很重)。
我的想法
我正在考虑将我的图像管理为 SVG
格式。这是因为,我认为我可以将此 SVG 数据视为存储中的文本。现在,大多数 NoSQL 数据库对文档(记录)大小的大小限制至少不超过 4MB(不确定)。这就带来了一个问题,因为根据图像的不同,SVG 文件甚至可以达到 6-10MB。所以,我认为我不能将 Couch 基本服务器用于 SVG 存储。此外,应用程序的本质是,图像数据不断增长并且永远不会存档/永远不会删除:沙发底座不适合此类数据(高度持久和不变的数据)。
这带来了我回到以良好的文本压缩而闻名的 RDBMS(尤其是 Oracle)。如果我获得 SVG 数据及其元数据并将其作为 BLOB
存储在 Oracle 数据库中,我觉得这可行。我听说 Oracle 表甚至可以增长到 TB,可能是通过分区或某种碎片。但重点是,对于一个达到 20GB 的包含文本的 oracle 表,我认为这将是大量数据。
现在,我的问题来自上述所有发现:
1。为什么开发人员一直选择文件系统存储图像而不是 SVG,在我(可能天真)的想法中,SVG 可以作为文本处理,因此可以压缩、加密、消化、拆分、轻松存储等。 ?
2.当应用程序将图像完全作为 SVG 处理时,将 SVG 提供给浏览器而不是实际的图像文件时,会有什么复杂性?
3. 从技术上讲,哪个对 Web 服务器的内存干扰更大:提供从文件系统(.png、.jpg、.gif)读取的图像和提供作为 SVG 的图像(可能来自数据库,或来自中间层)特别是在重负载下,Facebook 的示例场景?
4.在不同的“缩放”或分辨率下呈现时,SVG 似乎并没有降低质量,为什么开发人员还没有在图像动态应用程序中大量使用 SVG?我的意思是,从 PNG、JPG 或 GIF 转换为 SVG
时是否存在任何已知的质量损失?
5. 我对使用像 Oracle/MySQL Cluster 这样的 RDBMS 来存储高度持久的元数据和持久的 SVG 数据的看法是否非常幼稚?
请高亮显示,并给出您对大图像存储格式的建议。谢谢
编辑/更新
有像 Image Magick 这样的工具它提供用于操作图像的命令行选项。我需要的最重要的想法可能是: Can CouchBase Server(无论是 single server
还是 version 2.0
capability to serve Images at "user-experience acceptable performance"或者在“社交网络规模”?)
最佳答案
关于数据库
什么是文件而不是数据,什么是文件系统而不是数据库?数据库中的记录、文件系统中的文件、KV 存储中的键和值 - 这些都是同一棵树的果实。
普通文件系统经过数十年的发展,旨在实现在本地传输文件的目的 - 在此基础上,您可以构建分发模型。
HDFS 之类的东西包括分发作为文件系统本身的一部分,但是当您尝试在本地处理文件时会产生不必要的开销。
关系数据库或 KV 存储之类的东西可能会帮助您布置图表或轻松存储更多元数据,但除非它们专门设计为用作文件存储系统 - 它们会失败。
选择存储系统需要权衡取舍,您需要找出解决问题的最佳方案。很有可能您的问题与 facebook 的问题相去甚远。很少有服务器在它们之上安装 cdn,你会没事的。
关于文件格式
关于database - 与存储系统性质相关的大容量存储图像格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11500929/
我在 iOS 上有一个使用 WebSQL 数据库的 PhoneGap 应用程序。在某些地方,我读到存储容量是 5MB,而在其他地方,我读到它是 50MB,有人可以帮我解决这个问题吗?我还计划在数据库中
我想弄清楚如何更新节点的 pod 容量。我使用文档中概述的 Vagrant/VM 环境进行了简单的集群设置。我尝试使用 kubectl 修补节点的 pod 容量,执行以下操作: 通过以下方式发送补丁所
我想创建一个函数,根据某人系统上的可用 RAM 大小来导入不同批处理的数据。但是如何找到 R 中的可用 RAM 量呢?我可以使用 memory.size() 但这只适用于 Windows。 最佳答案
目前,我正在努力将 Power BI 内容嵌入到我的 Web 应用程序中。我已经通过服务主体实现了它,并且它按预期工作。但是对于产品环境,是否必须为我的报告或工作区添加容量?是否可以在不增加生产环境容
我有一个 3 节点 coros kubernetes 集群启动并运行。 我想使用来自独立 NFS 服务器的 persitentvolumes(pv)。 nfs.yaml apiVersion: v1
我正在学习golang一段时间。我遇到了 channel 问题。 我有两个例子。它们看起来一样,但是其中1个给出了错误。 当我分配 channel 容量(转换为缓冲 channel )时,问题已解决,
我正在尝试创建一个子例程,将一个字符串插入另一个字符串。我想检查主机字符串是否有足够的容量来容纳所有字符,如果没有,则返回错误整数。这需要使用类似 sizeof 的东西,但可以使用指针调用。我的代码如
这个问题在这里已经有了答案: size vs capacity of a vector? (8 个答案) 关闭 7 年前。 在下面的程序中,我只是创建了一个空 vector ,然后将大小调整为 5
免责声明 1 - 我是编程新手免责声明 2 - 我搜索了又搜索,但找不到我正在寻找的帮助。 对于一个项目,我或多或少地以更精简的形式重写了 vector 类。我挂断的部分是编写 push_back 方
我对 BTree 的理解是: if root BTree size is 32, the level 1 have 1024 keys capacity the level 2 can sort 10
我有一个使用 ActionBar 的应用程序,我自己处理方向更改: android:configChanges="keyboard|keyboardHidden|orientation|screenS
如何将 hadoop DFS 的配置容量从默认的 50GB 增加到 100GB? 我目前的设置是在 centOS6 机器上运行的 hadoop 1.2.1,使用了 450GB 中的 120GB。已使用
我的问题是关于 slice 长度和容量。我在这里学习 Go:https://tour.golang.org/moretypes/11 . (我的问题被标记为可能与 this 重复;但是,事实并非如此。
现在尝试从教程中学习 Go,并且有一个非常基本的问题: func main() { a := make([]int, 5) // [0,0,0,0,0] len=5 cap=5 b :=
如何以以下格式获取有关数据库中所有表空间的信息。 TABLESPACE_NAME | FILE_NAME | ALLOCATED_MB | FREE_MB | CAPACITY | 有没有办法自
我想基于每个作业更改群集的减少插槽容量。也就是说, 最初,我为Tasktracker配置了8个reduce插槽,因此对于具有100个reduce任务的作业,将同时运行(8 * datanode数量)r
我正在运行单节点 Hadoop 部署。我知道我的应用程序需要多少数据,我可以设置(和重新设置)HDFS 使用的最大容量吗? 我已经尝试了以下方法,但似乎无法实现。 检查 hdfs-site.xml 和
我安装了 splunk 来监控和分析 hadoop 作业。我在其他节点的Jobtracker、forwarder和TA中安装splunk core和splunk hadoop app后,HDFS ca
vector::operator= 会改变 vector 容量吗?如果有,怎么做? vector的拷贝构造函数是否拷贝容量? 我查看了文档,但找不到具体答案。是否依赖于实现? 最佳答案 您可以保证:
将 SQL 数据库导出到存储时,我们的 DTU 容量已达到,这本质上意味着我们的系统性能受到严重影响。 这对我们来说是一个问题,因为我们使用导出功能来备份和移动数据库。 这个问题有解决办法吗? 最佳答
我是一名优秀的程序员,十分优秀!