Mongodb 将数亿个小图像存储到键/值存储区或其他nosql数据库是一个好主意吗?

Mongodb 将数亿个小图像存储到键/值存储区或其他nosql数据库是一个好主意吗?,mongodb,scalability,nosql,Mongodb,Scalability,Nosql,我正在开发一个web系统来处理一组非常大的小图像,大约1亿张50kb~200kb的图像,处理ReiserFS 目前,备份和同步大量小文件非常困难 我的问题是,如果将这些小图像存储到键/值存储或其他nosql数据库(如GridFS(Mongodb),Tokyo Tyrant,Voldemort)以获得更高的性能和更好的备份支持是一个好主意吗?如果您的所有图像,或者至少是访问量最大的图像都能存储在内存中,那么mongodb GridFS的性能可能会超过原始文件系统。你必须通过实验来找出答案 当然,根

我正在开发一个web系统来处理一组非常大的小图像,大约1亿张50kb~200kb的图像,处理
ReiserFS

目前,备份和同步大量小文件非常困难


我的问题是,如果将这些小图像存储到键/值存储或其他nosql数据库(如
GridFS(Mongodb)
Tokyo Tyrant
Voldemort
)以获得更高的性能和更好的备份支持是一个好主意吗?

如果您的所有图像,或者至少是访问量最大的图像都能存储在内存中,那么mongodb GridFS的性能可能会超过原始文件系统。你必须通过实验来找出答案


当然,根据您的文件系统,是否将图像拆分为文件夹将影响图像。在过去,我注意到ReiserFS更适合在单个目录中存储大量文件。但是,我不知道这是否仍然是该工作的最佳文件系统。

另一种选择是将图像存储在SVN中,并将web服务器上的图像文件夹作为图像的SVN沙箱。这简化了备份,但不会对性能产生任何净影响


当然,请确保将web服务器配置为不提供.svn文件。

首先,请查看以下内容:。虽然它不是关于备份的,但它是一个值得讨论的话题

是的,大量的小文件是令人讨厌的;它们占用索引节点,需要文件名和c的空间。(备份所有这些元数据需要时间)。基本上,这听起来像你找到了文件的服务;如果您在
nginx
上运行它,前面有一个
varnish
之类的东西,您很难让它更快。在下面添加数据库只会使事情变得更复杂;在备份方面也是如此。唉,我建议大家更加努力地制定一个就地FS备份战略

首先,您是否使用
-az
-开关(分别为存档和压缩)尝试了
rsync
?它们往往非常有效,因为它不会一次又一次地传输相同的文件

或者,我的建议是将tar+gz放入多个文件中。在伪代码中(假设您将它们放在不同的子文件夹中):


这将创建大量的.tar.gz文件,这些文件可以轻松传输而不会产生太多开销。

您的目标是解决备份/同步问题,还是解决前端性能问题?我认为它们可能是相互竞争的目标。
foreach prefix (`ls -1`):
    tar -c $prefix | gzip -c -9 | ssh -z destination.example.tld "cat > backup_`date --iso`_$prefix.tar.gz"
end