1

我必须存储大约 1000 万行和几列的大型数据表。我需要做的可以总结如下:

1.根据列中的值,我需要选择一些行。

例子:

第 500 行:|10|3|4|5|100|314|45|

第 501 行:|13|5|7|4|160|210|40|

第 501 行:|24|3|8|6|260|810|50|

第 602 行:|34|7|9|6|350|760|10|

在这里,第一列的值可以被认为是行 ID。这里的 ID 是 10,13,24,34

假设我正在搜索第 4 列中 value>=5 的那些行。因此,过滤后的输出将是:

第 500 行:|10| 3|4 |5|100|314|45|

第 501 行:|24| 3|8 |6|260|810|50|

第 602 行:|34| 7|9 |6|350|760|10|

2.在第二步中,我需要按列方式比较它们。假设第 500 行的第 2 列和第 3 列分别具有值 3 和 4,其中 (3-4) 也落在范围 (3-8) 内。但这个范围与(7-9)不重合

所以第 500 行和第 501 行之间存在关系。输出将是:

10 24

24 34

3.假设我的值是 10。然后我需要在第一列中找到 10 的行,并将第 7 列中的值减少 5。所以该行现在看起来像:

第 500 行:|10|3|4|5|100|314| 40 |

到目前为止,我很容易使用 Matlab 库函数进行这些操作。但是我需要用 Java 转换整个代码。一种方法是使用大型数组并使用 for 循环来访问每一行。这么大的阵列会有效吗?请在这方面帮助我。

4

2 回答 2

3

首先,我建议使用内存中的 RDBS,如SQLLiteHyperSQLJavaDB

之后,您可以查看Google 的 guava 库中的Table

使用HashBasedTableTreeBasedTable时,基于行的查找速度最快,但您可能需要考虑ArrayTable,因为它看起来您的数据并不稀疏。

最后,看看这个问题

于 2012-04-08T09:17:30.270 回答
1

好吧,我将尝试定义您的需求,并根据它们给出适当的数据结构。1-您需要快速访问元素。基于此避免使用 LinkedList 并使用 ArrayList 或静态数组。2-由于您的数据很大,我建议您不要将它们全部加载到主内存中(动态加载)

注意:有更高级的方法可以通过使用 B+ 树来优化您的访问,但我不想更深入地尝试我上面所说的内容,我认为您不需要对其进行更多优化(如果您正确实现了动态加载并且有效)。

于 2012-04-08T09:28:35.553 回答