繁体   English   中英

H2,Sql-Server,MySql中的二进制数据类型

[英]Binary Data Type in H2, Sql-Server, MySql

我需要将序列化的Object作为二进制数据存储在H2表中(也存储在MySql,SqlServer,Hsqldb等中,因为该应用程序具有选择数据库的选项)。 这个对象只有几个字节的权重,它只是一个带有一些Strings,Integers和Boolean值的POJO,没有什么特别的。

我创建VARBINARY(1000)列,并使用PreparedStatement设置值并将其保存到表中。 我的问题和关注的是,此代码在网站上有效,当我在H2官方网站上阅读有关BINARY数据类型的定义时,他们说:

BINARY类型:代表一个字节数组。 对于非常长的数组,请使用BLOB。 最大大小为2 GB, 但是使用此数据类型时,整个对象都保留在内存中 精度是大小限制; 仅保留实际数据。 对于大文本数据,应使用BLOB或CLOB。

令我担心的是他们说“ 但是使用此数据类型时整个对象都保留在内存中 ”的声明。 那么,该对象实际上在内存中保留了多少时间? 直到应用程序关闭?

我不(显然)想要的是让此列通过不断地保持该列来消耗内存。 我试图找到任何其他信息来源,但没有任何运气。

BLOB类型不会完全保留在内存中,因此,如果您担心内存使用情况,可以使用它。 您到底要存储多少数据?

H2是嵌入式数据库,我不认为它打算扩展到大量数据。 如果您在谈论其他数据库,则应参考它们的文档以获取详细信息,因为它们不太可能以相同的方式运行。

HSQLDB和MySQL的最佳数据类型是VARRBINARY(max_bytes_length) BINARY(fixed_bytes_length)占用相同的空间,即使对于最小的已保存对象也是如此,而VARBINARY恰好占用已保存对象的长度。 可以将max_length参数设置为比对象的最大预期大小大得多的值。 使用这些数据库,仅当访问数据行时,该值才会保存在内存中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM