首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

怎么将大规模数据读入内存

2012-03-20 
如何将大规模数据读入内存小弟有一个问题:假如图中有32*1024个节点,现在要使用迪杰斯特拉算法求最短路径,

如何将大规模数据读入内存
小弟有一个问题:假如图中有32*1024个节点,现在要使用迪杰斯特拉算法求最短路径,权重全部是整数,如果使用邻接矩阵存储这些节点,需要相当大的内存,例如,Java中一个整形4byte,则32*1024个节点构成的邻接矩阵需要1G的内存;如果规模变为1024*1024,则需要1T的内存。
  因此想要一次性将所有的数据都读入内存显然是不可能的。有没有一种比较好的优化方式来处理这个问题?数据结构的优化,或者是通过分段访问数据来优化?
  麻烦大家给一个比较详细的思路。

[解决办法]
建立多级索引,并对数据进行压缩。
[解决办法]
数据既然内存放不下,需要放在硬盘上。由于硬盘IO相对于内存太慢,所以存储在硬盘上的数据需要压缩,读取时解压缩。然后数据要分块存储,例如将矩阵分成M*N的小矩阵(例如32*32,因为4*32*32正好是4KB,一般是一个page大小,磁盘操作是以page为单位的),每次调取某个数据时,先计算属于哪个小矩阵,然后将小矩阵对应的文件读取到内存。

如果数据都达到1T的级别,那就应该考虑分布式算法了。
[解决办法]
最好是排序的数据,找么个数据时,可以先找他属于哪一个部分的索引。

热点排行