我必须存储大约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列中搜索值> gt =的行。因此,在过滤后输出将是:
第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在其第二个中分别具有值3和4 第3列,(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循环访问每一行。这样一个大阵列会有效吗?请帮助我。
答案 0 :(得分:3)
首先,我建议使用内存中的RDBS,如SQLLite,HyperSQL,JavaDB
之后,您可以查看google的guava库中的Table。
基于行的查找在HashBasedTable和TreeBasedTable时速度最快,但您可能需要考虑ArrayTable,因为您的数据看起来并不稀疏。
最后,看看this question。
答案 1 :(得分:1)
我将尝试定义您的需求并基于它们,我将提供适当的数据结构。 1-您需要快速访问元素。 基于此避免使用LinkedList并使用ArrayList或静态数组。 2-因为你的数据很大我建议你不要在主内存上加载它们(动态加载)
注意:有更多高级方法可以通过使用B +树来优化您的访问,但我不想深入尝试上面所说的内容,我认为您不需要对其进行更多优化(如果您实现了正确有效地动态加载。)