0

我需要将大量数据存储在 Invert Index 的地图中,但我的数据非常庞大,我看到随着 Map 变得越来越大,它变得越来越慢。我们正在谈论一个具有非常稀疏索引的 Map 容器,涵盖 1 到数十亿。

在我的程序的一次迭代中,将计算一些数字,以获取许多要存储的键值(可能是数千个) -这意味着 Map 的大小在每次迭代中都会增加大约数千个左右。我看到在最初的几次迭代中,需要 20 秒左右,但在第 70 次左右的迭代中,需要 100 秒左右。我有大约 5000 组数据——也就是说,我需要对所有这些数据进行 5000 次迭代。随着每次迭代的时间呈指数增长,这将需要数天的时间来计算,这是不可接受的。

那么在这种情况下我能做些什么吗?

4

1 回答 1

0

您可以尝试改用 java HashMap 实现。每次 Matlab 访问 java 例程时都会有 smkall 开销,但 Java 例程通常提供更大的灵活性。例如:

%Create
map = java.util.HashMap(5e6);  %Initialize with room for 5 million entries

%Add data
map.put('key1','value1');
map.put(2,20);

%get data
out = map.get('key1'); %Get a value
map.containsKey(2);    %Check for existance of a key

这将起作用。但是......尚不清楚它是否会更快。只有一个测试会告诉你。

此外,当您以这种方式开发时,您可能会偶尔遇到错误。

Java exception occurred:
java.lang.OutOfMemoryError: Java heap space
    at java.util.HashMap.<init>(Unknown Source)
    at java.util.HashMap.<init>(Unknown Source)

发生这种情况时,您可以使用clear java清除任何 Java 驻留信息,或为初始 HashMap 分配更少的空间。

于 2013-02-08T16:27:14.057 回答