我有很多矩阵,大约有1,000,000,000行,10列。它们每个需要大约100G存储空间,大约2.5分钟才能计算出行数,所以我需要高效地处理它们的时间和资源。
最重要的列是#1和#2和#10。在一个示例矩阵中,#1中有大约2,000,000个唯一条目,#2中有大约10,000,000个条目。所有#1条目都存在于#2中,但并非所有#2条目都存在于#1中。
我想请教您如何有效地找到第1列和第2列之间存在相反情况的所有情况。换句话说:找到#1和#2之间存在#1-#2和#2-#1的所有对。
一旦找到每个案例,我都需要对#10做一些事情。
我可以想到几种方法,但没有测试任何方法。
我可以预先处理文件并存储所有唯一的#1条目和#2条目,并在浏览文件之前组合它们。
我可以通读文件并收集对,创建相反的案例并存储在某种哈希中以供将来查找。然而,这会使哈希变得相当大,并且需要两次遍历文件。
我可以通读文件并收集对,按字母顺序排列对(所以总是A-B)并将数据存储在哈希中。在我阅读文件时,快速查找以前的事件。
我也可以尝试使用gdbm。
您认为最佳解决方案是什么?
任何其他建议都将受到赞赏。