我需要将二进制数据文件存储在 Ubuntu 服务器上运行的 PostgreSQL 数据库中。最初将有几十个文件,每个文件大小约为 250kb。但是,文件的数量会随着时间的推移而增加。我有时可能需要从文件中提取数据以进行其他下游分析。
我已经对将二进制数据存储为 BLOB 或引用的古老问题进行了一些研究。两者显然各有利弊。我应该注意与 PostgreSQL 相关的任何具体问题吗?如果我想通过 PostgreSQL 函数或外部 Python 程序从文件中提取数据,是一种方法还是另一种更可取?
如果我要将数据文件直接存储在数据库中,最好将它们存储在一个单独的表中,外键引用“主”表,而不是包含所有其他字段的表中?
我已经阅读了这里的问题和答案;那里的评论表明,在 Linux 上通过引用(在文件系统中)存储二进制文件更好。我在这里的问题特别与 PostgreSQL 有关,并与从文件中提取数据以进行各种分析有关。
更新:类似的问题。
我认为您应该将数据库中的数据作为普通
bytea
列存储。通过这种方式,您可以获得数据库的所有优势,并且可以使用数据库函数(甚至 PL/Python,如果需要)来处理数据。较大的数据项将自动存储在外,因此您没有理由引入另一个引用间接。在数据库外部存储大型二进制对象的主要原因是它们太大而无法在令人满意的时间内存储和检索它们,如果它们使数据库膨胀超出实用性,或者如果您需要从一个单独的应用程序。据我所知,这些都不适用。