在BinaryField
field type的Django 1.10文档中,他们发出了关于其使用的警告:
滥用BinaryField
虽然您可能会考虑将文件存储在数据库中,但请考虑在99%的情况下这是不好的设计。此字段不能替代正确的static files处理。
对此声明没有任何理由。是否有任何广义指标可以归结为99%"糟糕的设计"或1%"不错的设计"案件?这对Django来说特别正确,因为它有很好的静态文件支持吗?
答案 0 :(得分:3)
我认为最好的过早优化和最坏的货物编程。
虽然关系数据库系统确实没有针对存储大字段(无论是二进制还是文本)进行优化,而且其中一些系统专门处理它们或至少对它们的使用有一些限制,但它们中的大多数至少处理中等大小二进制值(假设高达几百兆)非常好。将图片或PDF存储在数据库中的效率低于将它们存储在文件系统中的效率,但对于99%的应用程序而言,它将足够高效。
另一方面,如果将这些文件存储在文件系统中,则会失去以下几个优点:
我会尝试将逻辑上属于一起的所有数据存储在一起。通常这意味着将所有内容存储在数据库中如果这在技术上不可行(例如因为你的文件太大 - 大多数RDBMS都有blob的大小限制),或者因为测试显示它太慢或者不方便,你可以随时优化它。