最好的数据库来存储文件

时间:2015-02-26 07:13:52

标签: database nosql

所有

我需要在数据库中存储大量文件(数百万),而且我不确定使用哪种技术或数据库。 我的第一个想法是使用mongodb或没有sql dB。

谢谢

2 个答案:

答案 0 :(得分:1)

如果您想进行一些查询或按关键字搜索文件内容,我会向您推荐ElasticSearch,也可以使用Apache Solr。

如果您需要更具体的内容,我需要更多信息

答案 1 :(得分:0)

  

我需要在数据库中存储大量文件(数百万)

这意味着什么?你究竟在数据库中存储了什么(那么file对你来说是什么样的)?在什么operating system?对于file system

(我隐含地想到一些Linux或类Unix操作系统,因为它们对于Internet和Web服务器来说很常见;请记住,unix文件实际上是i-nodesdirectories关联名称到i节点,文件可以有几个文件路径)

  • 文件路径,它们只是字符串(长度合理,通常最多几千字节),但有一些限制;顺便说一句,你可以"正常化"在将数据存储到数据库之前的路径(例如realpath(3))。

  • 文件内容,它们只是" blobs",这可能很大但是任意字节序列。在这里你有一个问题,在数据库中放入各种大小的blob;一个文件可以有几千兆字节甚至几十亿字节的内容,一个blob通常不会。大多数数据库系统完全处理blob(例如将其保存在RAM中)。您能承受文件大小的限制(例如几兆字节)吗?

  • 文件元数据(例如mtime,permission,ownership)通常也很小(例如,它可能由某些SQL表中的几个短列表示)

那么它们是什么意思?也许您想编写一些使用数据库进行存储的应用程序,并为操作系统提供文件系统抽象。然后考虑用户空间中的文件系统(FUSE

BTW,文件独立于您的数据库(因为文件是您的操作系统提供的抽象)。它可能并且经常由某些外部程序创建,读取,写入或删除。在Linux上,考虑inotify(7)设施通知文件系统事件(对于本地普通文件系统,如ext4)。

请注意,现在大多数DB(以及诸如PostGreSQL或MySQL之类的RDBMS以及MongoDB之类的非SQL DBMS)都将其数据存储在文件中(也就是说,使用原始磁盘分区来存储数据库已经过时了)。

由于许多DBMS对内容设置了一些限制(例如,blob可能限制在几十千字节,在某些RDBMS的某个表中连续),通常与您(不清楚)的问题建议相反。一个典型的例子是将图像保存在数据库中。通常,您会在小图像(例如小于8K字节)之间进行隔离,并将它们直接存储为某些表中的blob(请记住,在大多数文件系统中,少量字节的微小文件会有一些大的开销,例如在我的计算机上{{ 3}}一个文件消耗至少一千字节的磁盘空间)和更大的图像:然后你将它们存储在文件系统(某些文件路径,如0123/4567/89ab.jpeg)中,并将其文件路径存储在某个列中。 YMMV。