H2 中的二进制数据类型,Sql-服务器,MySql
Binary Data Type in H2, Sql-Server, MySql
我需要将序列化的 Object
作为二进制数据存储在 H2 table 中(也在 MySql、SqlServer、Hsqldb 等中,因为应用程序可以选择 select 数据库)。这个对象只有几个字节,它只是一个带有一些字符串、整数和布尔值的 POJO,没什么特别的。
我创建 VARBINARY(1000)
列并用 PreparedStatement
设置值并将其保存到 table。我的问题和担忧是,这段代码在网站上有效,当我在 H2
官方网站上阅读关于 BINARY
数据类型的定义时,他们说:
BINARY Type:
Represents a byte array. For very long arrays, use BLOB. The maximum
size is 2 GB, but the whole object is kept in memory when using this
data type. The precision is a size constraint; only the actual data is
persisted. For large text data BLOB or CLOB should be used.
让我担心的是他们说“但使用此数据类型时整个对象都保存在内存中”的语句。那么,这个对象实际上在内存中保留了多少时间?直到应用程序关闭?
我(显然)不想让这个专栏无休止地占用内存。我试图找到任何其他信息来源,但一无所获。
BLOB
类型不会完全保存在内存中,因此如果您担心内存使用,可以使用它。您到底存储了多少数据?
H2 是一个嵌入式数据库,我不认为它旨在扩展到大量数据。如果您在谈论其他数据库,您应该参考它们的文档以了解详细信息,因为它们不太可能以相同的方式运行。
HSQLDB 和 MySQL 的最佳数据类型是 VARRBINARY(max_bytes_length)
。即使对于最小的保存对象,BINARY(fixed_bytes_length)
也占用相同数量的 space,而 VARBINARY
恰好占用保存对象的长度。 max_length 参数可以设置为比对象的最大预期大小大得多的值。使用这些数据库,只有在访问数据行时,该值才会保存在内存中。
我需要将序列化的 Object
作为二进制数据存储在 H2 table 中(也在 MySql、SqlServer、Hsqldb 等中,因为应用程序可以选择 select 数据库)。这个对象只有几个字节,它只是一个带有一些字符串、整数和布尔值的 POJO,没什么特别的。
我创建 VARBINARY(1000)
列并用 PreparedStatement
设置值并将其保存到 table。我的问题和担忧是,这段代码在网站上有效,当我在 H2
官方网站上阅读关于 BINARY
数据类型的定义时,他们说:
BINARY Type: Represents a byte array. For very long arrays, use BLOB. The maximum size is 2 GB, but the whole object is kept in memory when using this data type. The precision is a size constraint; only the actual data is persisted. For large text data BLOB or CLOB should be used.
让我担心的是他们说“但使用此数据类型时整个对象都保存在内存中”的语句。那么,这个对象实际上在内存中保留了多少时间?直到应用程序关闭?
我(显然)不想让这个专栏无休止地占用内存。我试图找到任何其他信息来源,但一无所获。
BLOB
类型不会完全保存在内存中,因此如果您担心内存使用,可以使用它。您到底存储了多少数据?
H2 是一个嵌入式数据库,我不认为它旨在扩展到大量数据。如果您在谈论其他数据库,您应该参考它们的文档以了解详细信息,因为它们不太可能以相同的方式运行。
HSQLDB 和 MySQL 的最佳数据类型是 VARRBINARY(max_bytes_length)
。即使对于最小的保存对象,BINARY(fixed_bytes_length)
也占用相同数量的 space,而 VARBINARY
恰好占用保存对象的长度。 max_length 参数可以设置为比对象的最大预期大小大得多的值。使用这些数据库,只有在访问数据行时,该值才会保存在内存中。