我必须存储大约1000万行和几列的大型数据表。我需要做的事情可以概括如下:
1.根据列中的值,我需要选择一些行。
示例:
第500行:\x{e76f}\x{e76f}*
第501行:\x{e76f}\x{e76f}第501行:\x{e76f}\x{e76f}
第501行:\x{e76f}\x{e76f}第501行:\x{e76f}\x
第602行:\x{e76f}\x{e76f}第602行:\x{e76f}\x{e76f}
在这里,第一个列值可以看作是行ID。
假设我正在搜索那些在其第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进行这些操作,使用matlab库函数。但是,我需要用Java转换整个代码。一种方法是使用大型数组并使用for循环访问每一行。对于这么大的阵列,它会有效吗?请在这方面帮助我。
发布于 2012-04-08 09:17:30
首先,我建议使用内存中的RDBS,如SQLLite、HyperSQL、JavaDB。
在此之后,您可以查看谷歌番石榴库中的表格。
基于行的查找在HashBasedTable和TreeBasedTable中是最快的,但是您可能需要考虑ArrayTable,因为它看起来数据并不稀疏。
最后,看看这个问题。
发布于 2012-04-08 09:28:35
我将尝试定义您的需求,并在此基础上给出适当的数据结构。1-你需要快速进入元素。基于此,避免使用LinkedList或使用ArrayList或静态数组。2-由于您的数据很大,我建议您不要将它们全部加载到主内存中(动态加载)。
注意:有更高级的方法可以通过使用B+树来优化您的访问,但是我不想深入尝试我前面说过的话,我不认为您需要对它进行更多的优化(如果您正确有效地实现了动态加载)。
https://stackoverflow.com/questions/10061654
复制相似问题