我使用sqlalchemy将对象存储在数据库中。在运行时之前,我正在创建的对象类型是未知的。我可以储存一些像字符串一样简单的东西。我可以储存一个jpg。我可能会创建自己的文件格式并将其存储。关键是它很灵活。
我设想的表至少包含两列。一个描述文件类型(.jpg、.txt、.py等),另一个描述带有文件数据的blob。我想知道的是在创建表时是否需要定义blob大小。是否可以让mysql动态地设置blob的大小?这将使我的设计简化得很好。
我知道还有其他方法可以做到,但我有充分的理由这样做。我不介意沿着这条路走下去,如果它变成死胡同的话,回头再翻一倍。
发布于 2014-09-10 07:30:26
不,顾名思义,Blob是“可以容纳可变数据量的二进制大对象。”。它可以保持在0和2^16 -1字节 (65535)之间。LONGBLOB最多可以容纳4,294,967,295字节(或4GB)。
在大多数引擎中,blobs是动态实现的,这意味着它只需要实际大小加上一些额外的字节用于长/寻址等等。事实上,固定行大小格式通常与blobs (MyISAM固定内存存储引擎)不兼容。
但是,避免在关系数据库上存储“文件”(特别是MySQL和InnoDB,主要是由于事务和二进制日志的开销,加上多版本控制及其与内存上的临时表的不兼容)有一些原因。实际的决策取决于需求,-the最常见的选择是将这些内容存储在文件系统上,然后在数据库中添加一个URL。
如果将这些对象存储在数据库中,大小将不是您最大的问题(除非它们超过4GB),而是复杂查询和写入的性能。然而,纯键值存储可能与MySQL模型很好地工作。还有专门的基于文档的数据库。
https://dba.stackexchange.com/questions/76155
复制相似问题