对保存文件的通用机制的性能关注

Performance concern for a generic mechanism of saving files

我想创建一个通用机制来在我的应用程序和数据库中保存文件,为此我想出了创建两个 table 和以下 schema 的想法,以便保存与任何数据库中任何行相关的文件 table:

FileInfo
=================================================================
ID   FileName   ContentType   FileSize   DatabaseTableName  RowID

并创建以下具有 OneToOne 关系的 table 以将文件数据保存在单独的 table 中,以便查询 FileInfo table执行速度更快:

FileData
=================================================================
ID  FileData

好吧,我不是数据库性能方面的专家,这就是为什么我想知道这样的设计是否会在一个 table 中保存所有 table 的所有文件] 会导致性能问题,这是一种不好的做法吗?

如果可以的话,你能给我一个更好的解决方案吗?

提前致谢

我觉得这个问题没有论文就无法回答。基本上把文件存入数据库就可以了。数据库和文件系统具有截然不同的属性。值得称赞的是,您希望让框架的用户可以选择适合他们情况的正确选择。

将其拆分为许多 table(手动分区)或任何其他形式的分区都无济于事。 SQL 服务器在处理非常大的 table 时没有固有问题。

数据库中的 Blob 会导致一些特定的缺点。这些斑点住在哪里并不重要。

我喜欢你把它分成两个 table。通常,这是没有必要的。如果查询编写得当并且只提取所需的列,那么 SQL 服务器根本不会触及未使用的 blob 列。

也就是说,像您那样拆分大块通常很方便。 ORM 不喜欢大行。工具(和管理员 运行 一个简单的手册 select *)现在能够查看 FileInfo table 而不会因为数据量大而失败。

拆分不是必需的,但可以使使用数据库更容易。