我正在寻找 Microsoft SQL Server 的文件表/文件流功能的替代方案。原因是我真的很想使用 SQL Server 文件表,但我在 Linux 上使用 docker。
不幸的是,微软在文件表方面没有为 Linux 提供任何支持。请参阅仍然打开的此问题。不过最好使用 MySQL 或 PostgreSQL。
SQL Server 文件表使用操作系统的文件系统来存储文件并在 SQL 表中同步这些文件值。它比保存 BLOB 快得多。此外,如果我运行数据库备份,它会被备份。因此,它使用文件系统来提高速度,同时保持与数据库的同步。我还可以通过文件系统和/或事务访问文件。
过去的替代实现是将文件存储在共享位置并将其位置的引用存储在数据库中的表中。
以下是现代 DBMS 的当前选项:
Oracle PL/SQL -将文档和其他文件数据加载到 Oracle 数据库中:带有 BFile 或外部表的全文或二进制数据可能最接近您的用例。
MySQL: BLOB Storage : MySQL 中似乎没有太多选择(除了存储对文件位置的引用)。
PostgreSQL:存储二进制数据&在 PostgreSQL 中存储文件是否存在性能问题?:可以使用bytea数据类型或将数据存储在专用表中的Large Object特性。
MongoDB:BSON 类型和GridFS:BSON 数据类型可以存储最大 16 MB 的数据,之后 GridFS 是更大存储(尤其是二进制数据)的解决方案。
SQLite:我们可以在 SQLite 数据库(Android)中存储 .doc .pdf 和 .jpg 文件吗? & SQLite 第 3 版中的数据类型:BLOB 是 SQLite 中的首选。
MariaDB:LOAD_FILE:MariaDB 似乎根本没有太多支持,但通常它们也使用具有 LOAD_FILE 功能的 BLOB 存储。
AWS:SimpleDB:虽然这不能通过 Docker 实现,但仅供任何坚持在数据库中存储文件的人参考,他们的 SimpleDB(在他们的一些其他服务中)提供了在数据库中存储文件和使用元数据的方法标记它们是什么类型的文件(通常利用 S3 存储桶)。
这也是一个关于在数据库中存储大文件的利弊的老歌。