Postgresql数据库的文件存储系统



我目前有一个数据库,需要存储大量文件。但是,我也存储有关特定文件的信息。我希望能够将这些文件与包含这些元数据的数据库一起存储,我想知道如何最好地做到这一点。这些文件是自动生成的,并且具有适用于文件系统的分层结构。

最初的想法是存储包含所有文件的文件系统根目录的路径,然后引用与之相关的文件(例如../file_group_1/file_1(。在研究这一点时,很难找到一种方法将文件存储在这个文件系统中,不用说,在管理文件系统的数据库旁边运行一个单独的服务器。

我已经研究过Postgresql中的大型对象类型,但我也担心它的安全性。有更好的解决方案吗?

通常最好将文件存储在数据库之外,因为访问速度更快,数据库大小也较小。不利的一面是,在崩溃、事务中止等情况下,您的应用程序将不得不管理数据库和文件系统之间的一致性。

我会将文件的完整路径与元数据一起存储;将其拆分并不能节省很多费用,而且会使查询更加复杂。

为了保持数据库和文件系统之间的一致性,您可以始终先写入文件,从不删除文件,除非在特殊的垃圾收集运行期间,您还可以识别和删除孤立文件。

如果文件存储在数据库中,bytea比大型对象更好,除非文件非常大或需要分部分读写。

制作最佳文件系统。我建议使用文件夹和文档层次结构
文档表将具有实体表和parent_doc_id的引用,用于层次结构逻辑。您应该根据需要使用递归CTE来获取文档树
在文件系统中,您可以使用带有文档引用的路径

实体=>1001
文档1=>1002
文件2=>1003

我建议在文件系统中使用整数路径,以避免重复的文件名重叠
对于文档1:1001 \ 1002
对于文件2:1001 \ 1003
可以存储在表中以供参考的实际文件名和路径。

相关内容

最新更新