Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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_Mysql_Arrays_Jpa - Fatal编程技术网

Java 处理大量数据和阵列的最佳方式是什么?

Java 处理大量数据和阵列的最佳方式是什么?,java,mysql,arrays,jpa,Java,Mysql,Arrays,Jpa,我正在从事一个处理大量数据的java项目。更具体地说,它处理许多向量对象。每个向量对象包含以下属性: public class Vector{ private final int dimension; private short[] sparseOffsets; private boolean isSparse; private float[] coordinates; ... } 这个向量对象上的数组可以变得非常大(我们说的是每个数组的大小为1000

我正在从事一个处理大量数据的java项目。更具体地说,它处理许多向量对象。每个向量对象包含以下属性:

public class Vector{
    private final int dimension;
    private short[] sparseOffsets;
    private boolean isSparse;
    private float[] coordinates;

    ...
}
这个向量对象上的数组可以变得非常大(我们说的是每个数组的大小为10000),我们一次处理数百万个向量。显然,由于这些向量对象的数量及其数组的大小,我的内存已经用完了。我尝试序列化它们,但经过一周的等待,代码仍然在序列化这些向量对象

我正在考虑用JPA实现一个MySQL数据库。我的第一个问题是,这是否是处理这些大量数据的理想途径

第二个问题是,我将如何在数据库中存储这些大数组

我发现了一个关于employee对象的示例,该对象包含一组employee课程,并使用一对多关系。看起来是这样的:


所以基本上我会将这些数组转换成ArrayList并使用@ElementCollection标记。这是在数据库中存储这些大数组的好方法吗?

这里没有单一的“最佳”方法;但数据库的全部意义在于处理大量数据,只将当前需要处理的数据读入内存

不要期望在这篇文章中有一个完整的教程,因为这是不可能的,但我将从三个表开始:一个基表包含标量信息,如'isSparse'和'dimension',但最重要的是,还有该向量的'id'。然后是另外两个表,它们提供了“id”->“sparseOffset”和“id”->“坐标”的关联


我是一名数据库新手,所以欢迎专家进行更正,但希望这能为您提供一个起点。

关于您的问题,您有一些问题:您当前是否将所有这些向量数组存储在内存中?如何将新向量写入内存?您是一次处理所有的向量对象,还是一次只需要处理其中的一个子集?是的,当前通过向量类的实例化将所有这些包含数组(更新的示例代码,请参见上文)的向量对象存储在内存中。一次处理其中的一个子集,这就是为什么我认为拥有db可能是个好主意的原因。是的,谢谢你,Lars。我感谢你的答复。我也是一名数据库新手,所以我只是想确认一下我走的是正确的道路,因为建立db和jpa项目需要做很多工作。如果您的数据不需要与其他应用程序共享,它可能正是您所需要的。我同意Lars的观点,数据库可能是最好的选择,但请记住,您为保存或加载数据库中的数据而进行的任何调用都会减慢您在内存中进行的任何处理。如果进程取决于速度,那么增加分配给程序的内存量可能更有意义。同样,我不清楚数据来自何处,所以我不确定应该如何保存。无论如何,为了降低加载数据所需的速度,您需要确保设置了良好的键和索引,以便可以快速查询数据集。