这是一个之前就有人问过的问题(large-text-and-images-in-sql),但主要是针对将被更改的数据。在我的情况下,数据将被存储并且永远不会更改。把所有东西放在一起似乎是明智的选择。
是否有任何原因我不应该在数据库中存储静态二进制数据?
假设这是一个合理的做法,把这样的数据存储在单独的表中是否有任何优势?(您现在可能已经意识到我不是数据库专家...)
澄清: 可能不会超过10-20个用户,但这些用户将在美国和英国。无论如何,二进制数据都必须传输。
这是一个之前就有人问过的问题(large-text-and-images-in-sql),但主要是针对将被更改的数据。在我的情况下,数据将被存储并且永远不会更改。把所有东西放在一起似乎是明智的选择。
是否有任何原因我不应该在数据库中存储静态二进制数据?
假设这是一个合理的做法,把这样的数据存储在单独的表中是否有任何优势?(您现在可能已经意识到我不是数据库专家...)
澄清: 可能不会超过10-20个用户,但这些用户将在美国和英国。无论如何,二进制数据都必须传输。
FILESTREAM
可能是一个不错的替代方案。顺便说一句,对于 Web 应用程序(或任何其他可能需要流式传输数据的应用程序),通常更明智的做法是将数据存储在数据库外部。关于执行带有LOB的“select * from table”语句可能导致巨大的内存和/或带宽问题的说法是不存在的。返回的只是指向相关LOB的指针。由于声誉不够,无法将评论放入上下文中,但查看此内容的人应该知道这不是问题。
从原则上来看,关系型数据库主要用于存储结构化数据。如果您无法在数据元素上进行查询条件或连接,则该数据元素可能不适用于数据库。我认为图像BLOB不应用于WHERE子句中,因此请将其保留在数据库之外。而CLOB则可以用于查询。
那些想将图像(或其他二进制文档)存储在数据库中的人,我并不太满意。数据库是用于存储[大多数情况下?]可索引的离散数据,而不是毫无意义的二进制数据块(BLOB)。如果你亲自使用过二进制数据块(BLOBs),你已经知道这一点。
你应该在文件系统中存储文件的引用。最佳实践是使用文件名,而不是绝对(甚至相对)路径。
难道这不是LOB或CLOB等设计目的吗?
我们使用CLOB来存储一个大型航空系统信用卡交易的加密信息。
然而,内存消耗是最大的罪魁祸首。
希望对你有帮助。
祝好!
一些数据库(例如PostgreSQL)会自动压缩字段,这样在直接从数据库中读取时可能更快。而且,程序可以一次性读取所有的字段和图像。