我试图构建这样的数组(Matrix):
var arr = [];
var matrix_size = 100000;
var start_time = Math.round(new Date().getTime()) / 1000.0;
for( var i = 0; i < matrix_size ; i++ ) {
var row = [];
for( var j = 0; j < matrix_size; j++ ) {
row.push( 0 );
}
arr.push( row );
if ( counter % 10 == 0 ) {
var stop_time = Math.round(new Date().getTime()) / 1000.0;
var speed_time = stop_time - start_time;
var speed = i / speed_time; // m / s
var remain = matrix_size - i;
var remain_time = remain / speed;
console.log("Ready: " + i + " rows; remain: " + remain + "; speed: " + speed + "; remain_time: " + remain_time + "s.");
}
}
var stop_time = Math.round(new Date().getTime()) / 1000.0;
var speed_time = stop_time - start_time;
console.log( "Time: " + speed_time + " s. ");
Ready: 1020 rows; remain: 98980; speed: 40.255742648097055; remain_time: 2458.7796296605875s.
真的那么大吗?在这种情况下,浏览器功能的正确数学是什么?
实际上,我需要500,000 x 500,000阵列。不仅仅是零,而是真正的浮动值。在这种情况下我需要使用服务器端吗?
答案 0 :(得分:2)
500Kx500K对于Javascript来说太过分了(并且足够合理的计算机可以阻塞它),但是如果你仍然愿意在客户端使用大量数据集,我建议你研究一下这个:http://square.github.io/crossfilter/
Crossfilter是一个用于探索大型多变量的JavaScript库 浏览器中的数据集。 Crossfilter支持极快(<30ms) 与协调视图的交互,即使是包含数据集的数据集 百万或更多记录。
这不会解决您的问题,但希望它会指出您正确的方向。我建议将您的数据集分成多个部分并分别处理它们。处理小块数据而不是庞大的数据集通常更明智。
答案 1 :(得分:2)
500,000 x 500,000是2500亿个值。 javascript中的每个数字都是8个字节(至少根据Google的快速搜索)。
为了只在内存中存储数字,你需要超过1862.65 GB的内存(不包括数组,浏览器,javascript引擎等所涉及的任何开销)。
即使是服务器端解决方案也会出现这么多数据的问题。您应该花时间重新评估您的问题,并找到减少早期数据集的方法。
答案 2 :(得分:0)
正如其他人在评论中指出的那样,一个500K x 500K的双打矩阵将大约是1.8的内存。
实际上你没有机会处理这个问题。但好处是,您可能无法处理那么多数据。在浏览器中?我想知道如何你首先得到数据!
您还没有描述您尝试解决的实际问题,因此很难为您提供帮助。一些随机提示:
答案 3 :(得分:0)
我建议使用数据库来制定数据。由于矩阵太大,您将能够利用数据库的强大功能来处理计算需求。然后,您可以查询数据库并使用服务器端代码(PHP,Python,Java等)来构建JSON对象并以这种方式遍历您的数据。希望对你有帮助。
答案 4 :(得分:-1)
所有JavaScript编号都是双精度浮点数,表示每个8字节。 500K x 500K x 8B的内存大约为2000 GB。因此,在这种情况下所需的“浏览器的强大功能”将是在具有超过2000GB内存的计算机上运行的Web浏览器,以及其JavaScript内存管理器将支持该数量的浏览器(Chrome的V8引擎开始挣扎,根据我的经验,大约2GB )。