Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在数据库中存储阵列_Java_Database_Hsqldb - Fatal编程技术网

Java 在数据库中存储阵列

Java 在数据库中存储阵列,java,database,hsqldb,Java,Database,Hsqldb,在数据库(例如hsqldb)中存储大型阵列(10000x100)最有效的方法是什么?我需要为我正在用java编写的某个数学程序这样做。请帮忙。 整个数组将经常被检索和存储(而不是单个元素)。此外,还需要存储有关数组的一些元数据。使用数组持有的数据定义一个表,并将数组值插入表中 这是非常简单的数据访问/存储。您的阵列尺寸是否始终相同? 在一个大的显式事务中完成。不要强制数据库系统为每个插入创建新的隐式事务 使用事先准备好的陈述 好问题 除非您想将数组转换成一组规范化的表(听起来好像没有),否则您可

在数据库(例如hsqldb)中存储大型阵列(10000x100)最有效的方法是什么?我需要为我正在用java编写的某个数学程序这样做。请帮忙。
整个数组将经常被检索和存储(而不是单个元素)。此外,还需要存储有关数组的一些元数据。

使用数组持有的数据定义一个表,并将数组值插入表中

这是非常简单的数据访问/存储。您的阵列尺寸是否始终相同?

  • 在一个大的显式事务中完成。不要强制数据库系统为每个插入创建新的隐式事务
  • 使用事先准备好的陈述
    • 好问题

      除非您想将数组转换成一组规范化的表(听起来好像没有),否则您可能需要考虑序列化

      序列化是一个花哨的词,用于将对象转换为某种格式,以便保存到磁盘或数据库。序列化的两种主要格式是二进制和XML,我打赌Java对它有一定的支持

      根据使用的数据类型,您应该能够将数组转换为XML或二进制,然后将其保存到数据库中的单个字段中。您可以通过签出在Java中开始使用此技术。我知道它内置在.NET中


      希望这有帮助。如果我能给你更多的指导,请告诉我。

      如何将数据存储为BLOB并使用Java将BLOB解码为实际的Java数组?在一次吞咽中存储和检索整个数组会更加高效,但在处理单个元素时会非常糟糕。

      PostgreSQL内置了对数组的支持


      提出一种内部表示法——可以是XML、JSON、您自己提出的一些二进制文件,也可以是任何其他形式的序列化

      使用“blob”数据类型将其存储在表中。将与矩阵关联的任何元数据存储在其他列中

      我强烈反对这样做,即创建一个与矩阵行数和列数相同的表——这是为不使用的功能付出的高昂代价


      事先准备好insert/select语句,并使用bind变量更改正在使用的矩阵——不要让db重新分析每个请求。

      如果它只是一个数组,为什么不使用二进制文件呢?

      正如allready建议的那样:如果不需要这些功能,就不要使用RDBMS。虽然您可能希望简化一个低级API,例如提供一些类似数据库的功能,如管理磁盘上的索引,而不是序列化。

      如果您的数据是密集的(值直方图接近于平线),最好的选择是使用对象[Output/Input]流进行blob和序列化

      否则,您可能会发现使用稀疏数组和实体属性值模式的变体更有效。以下是一个例子:

       Name | IndexKey  | Value
      ------+-----------+-------
       foo  | 'default' | 39        
       foo  | 0:0:0     | 23
       foo  | 0:0:1     | 34
       foo  | 1:5:0     | 12
       ...
       bar  | 1:3:8     | 20
       bar  | 1:3:8     | 23
       bar  | 1:1:1     | 24
       bar  | 3:0:6     | 54
       ...
      
      这还允许您快速更新表的某些部分,并使用SQL“like”操作符选择切片

      如果您的维度数是固定的,将键列分解为每个维度的独立int列,以提高索引效率并具有更灵活的选择标准(您可以对元数据使用第一个索引“null”,如默认值)


      在任何情况下,在Name、IndexKey列上创建聚集索引都是一个好主意。

      将Java序列化为存储为BLOB的字节数组将是最佳选择。Java将非常高效地序列化大型数组。将其余的行和列用于您感兴趣的查询或显示内容。如果您对非BLOB数据进行大量查询和报告(尽管这可能因数据库实现而异),最好将BLOB保留在自己的表中,并让“常规”行指向“BLOB”行。

      HSQLDB 2.0支持作为表列存储的一维数组。因此,表的每一行将对应于2D数组的一行


      但是,如果您想从整体上检索2D数组,BLOB是最好的解决方案。

      您需要随机访问数组元素还是只访问数组?您知道PostgreSQL的解决方案吗?不,维度不会保持不变。如果维度不相同,则必须使用如下所述的序列化。如果维度不保持不变,我也会这样做。一直创建和删除表是没有意义的。这是一个非常好的观点(尽管OP指定了其他一些db,这可能没有PostgreSQL在这方面惊人的灵活性)。您知道这项工作的实施效率吗?我得到的印象是,它并不适用于大型阵列,但我可能错了。MySQL和MicrosoftSQL中是否有与PSQ的阵列类型等效的类型?