java中保存Bigdata Integer记录的最佳数据结构是啥?

Posted

技术标签:

【中文标题】java中保存Bigdata Integer记录的最佳数据结构是啥?【英文标题】:What is the best data structure in java for saving Bigdata Integer records?java中保存Bigdata Integer记录的最佳数据结构是什么? 【发布时间】:2014-12-04 18:41:15 【问题描述】:

我正在处理大量图表,我需要将它们的记录保存在内存中。我有一条由整数组成的 1,000,000,000 记录。记录是:

record1: 13455659009,2459904444, 888999, 45590008
record2: 7787687970097,98776,898767746,6556
........
record1000000000:  8736406,.....,987586985,764765282

首先我使用 bitset 来保存它们,例如对于 record1 我是这样做的:

BitSet bs=new BitSet();
bs.set(134659009);
bs.set(245990444);
bs.set(888999);
bs.set(45590008);

但 bitset 效率不高。因为我只有四个数字,但它节省了 245990444。 我想将这些记录保存在 ram 中,因此占用更少的空间很重要。将这些整数记录保存在 ram 中的最佳结构是什么? hashset 比 bitset 好 谢谢。?

【问题讨论】:

【参考方案1】:

最有效的结构可能是原始整数数组,即int[]。根据您使用它的方式,使用实现 java.lang.Set<Integer> 的类来包装它可能(或可能不会)有帮助。

另一方面,为什么你甚至需要一个图形节点 ID 的整数列表?为什么不只是一个 Node 类和一个 Set<Node> 成员用于图形边缘?

【讨论】:

我需要为每个节点存储邻接列表。我有一个哈希表,键是节点 ID,值是它的邻接列表的记录。 如果你有十亿个顶点,每个顶点有四到五个边,存储它们的最节省内存的方法可能是作为原始int[] 数组(在你的哈希值中)。对于所有这些阵列,即使这样也将增加 30 GB。您还将使用数组而不是哈希表(即int[][] 而不是HashMap<Integer,BitSet<Integer>>)节省一些内存(假设大多数顶点都有边)。

以上是关于java中保存Bigdata Integer记录的最佳数据结构是啥?的主要内容,如果未能解决你的问题,请参考以下文章

BigData 学习记录

BigData 学习记录

BigData 学习记录

bigdata学习记录1 一篇对大数据深度思考的文章,让你认识并读懂大数据

常用API3 BigData

建议用于收集社交网络分析的 BigData DB