要求:我们大约有500个表,每个表中约有1万行是感兴趣的。我们希望将此数据存储为表中的Blob。导出到文件时,所有数据均为250 MB。现在,一个选择是将这个250 MB的文件存储在blob中(Oracle允许4 GB)或将每个表数据作为blob存储在blob列中,即每个表将有一行,并且blob列将具有该表数据。
现在关于性能,哪种选择在性能方面更好。此外,还需要获取此数据并将其插入数据库。
基本上,这将交付给客户,我们的实用程序将从blob中读取数据并将其插入数据库中。
问题:
1)如何将表数据作为Blob插入Blob列
2)如何从该blob列读取信息,然后准备插入语句。
3)压缩包含blob数据的表有什么好处?如果是,则阅读如何解压缩。
4)这种方法是否也适用于MSSQL和DB2。
设计具有blob的表时还有哪些其他注意事项?
请建议
您的实际业务需求是什么? 为什么必须将表数据存储在一系列BLOB中,而不是现在如何实际存储它们? 我从未见过像您所描述的那样想要实现的设计。
为什么要将表存储到BLOB中?对于存档或传输,您可以使用exp或导出表。您可以将这些文件压缩并传输或存储为BLOB到另一个Oracle数据库中。
最高据我所知,直到Oracle版本9为止,LOB的大小为4 GB。如今,限制为8 TB到128 TB,具体取决于您的DB块大小。
我的印象是,您想从结构化内容转向非结构化内容。
希望您知道您要权衡的结果,但是阅读您的问题时我没有那种印象。
使用BLOB会丢失值之间的关系/约束。
读取一个数据块可能会更快,但是当您需要编写较小的更改时,对于大的BLOB,可能需要编写更大的"块"。
要在数据库中插入BLOB,可以使用任何可用的API(OCI,JDBC。如果仅在服务器端访问,则甚至可以使用pl / sql)。
对于压缩,可以使用BLOB选项。此外,您可以使用某些库进行DIY(如果您需要考虑其他RDBMS类型)。
@Wernfried,igr的主要目的是将这组数据放在单独的表中,因为这仅在不使用的情况下使用。 将数据保存在同一表中会影响所有用户的性能,因为从一个版本升级到另一个版本时,该数据仅使用一次。 如果我们将数据发送到同一表中,它将被闲置在该表中。我们也无法删除它,因为将来可能会需要删除它。 不建议在OLTP环境中将每个表的行加倍,因此,其思想是保持单独的压缩Blob格式,仅在需要时使用。