存储数百万张图像:文件系统还是NoSQL?

时间:2016-02-20 18:16:59

标签: mongodb image postgresql filesystems nosql

我有3个jpg图像(150px * 150像素,<10k)

我已将文件夹分成子文件夹,以便能够在Windows资源管理器中查看它们... - 当我拉链或解压缩时,需要超过10个小时 - 当我在亚马逊s3上加载这些图片时,这是噩梦,......

所以我想知道!那个NoSQL数据库怎么样比如PostgreSQL呢?我会以JSON格式存储我的所有图片{'name':'image01.jpg','12WFHSKFHDKSFFISNKSADNXKLSJ ...... KDJHHDJSHFGF'}

这样可以将所有图片存储在一个独特的文件中(无需压缩或解压缩)并且管理起来非常简单

我已经看到mongodb有可能(比如$ gridFS-&gt; storeFile(“FileName.jpg”,array(“_ id”=&gt; $ id));)

似乎用Postgresql不可能做到这一点......我可以找到关于在postgres中存储图像的任何信息(JSON)

好的,我迷路了......帮助:(

3 个答案:

答案 0 :(得分:2)

正如Abelisto所写,PostgreSQL首先是关系数据库。但是最近它引入了许多有用的noSQL添加,包括有效的JSON存储和索引支持。

如果您有兴趣在PostgreSQL中存储,您肯定可以使用JSON。在这种情况下,对于文件内容,只需将其内容转换为Base64编码,并在读取期间执行解码。

但只要你有严格的文档结构,最好引入一个像[name varchar(255),content bytea]这样的结构的表,并将你的文件存储在表中。这不会强制您使用Base64编码对文件进行编码/解码 - 您只需将内容作为字节数组。

答案 1 :(得分:0)

你要做的事情是行不通的。

  

将所有图片存储在1个唯一文件中

在PostgreSQL中,即使您使用JSON数据类型,您仍然限制在大约GB大小。

让我问你另一个问题:你有没有将图像存储在数据库中的具体原因 - 关系或NoSQL?每次你必须获取其中一个图像时,这似乎是一个巨大的开销。

答案 2 :(得分:0)

此任务的MongoDB实现的优点是可以轻松地在多个服务器和分片上复制数据,这样可以轻松实现水平扩展(如果磁盘空间不足,只需部署一个碎片)。问题是,如何将高性能的MongoDB与其他noSQL解决方案进行比较。另请注意,您无法在直接Mongo中存储单个大小> 16 Mb的图像,但使用GridFS,您当然可以绕过此限制。因此,如果您的文件都小于16 MB BSON文档大小限制,请考虑将文件手动存储在单个文档中,而不是使用GridFS(可以利用BinData数据类型),