Javascript 提高大数据量字典查找的性能
在将大量字符串与字典(转换为JSON并按起始字母拆分成文件)进行比较时,我的性能很差 JSON文件当前存储在如下目录中:Javascript 提高大数据量字典查找的性能,javascript,json,node.js,performance,Javascript,Json,Node.js,Performance,在将大量字符串与字典(转换为JSON并按起始字母拆分成文件)进行比较时,我的性能很差 JSON文件当前存储在如下目录中: words/ a.json b.json ... z.json 我的代码中的输入字符串'test'将产生以下字符串数组 [ 'test', 'tes', 'tet', 'te', 'tst', 'ts', 'tt', 't', 'est', 'es', 'et', 'e', 'st', 's
words/
a.json
b.json
...
z.json
我的代码中的输入字符串'test'
将产生以下字符串数组
[ 'test',
'tes',
'tet',
'te',
'tst',
'ts',
'tt',
't',
'est',
'es',
'et',
'e',
'st',
's',
'tets',
'tts',
'ets',
'tset',
'tse',
'set',
'se',
'tste',
'tte',
'ste',
'ttes',
'ttse',
'etst',
'ett',
'etts',
'estt',
'stt',
'stet',
'stte',
'sett' ]
为了确定要读取哪些文件,我通过字母表循环检查输入字符串中存在哪些字母('test'
),例如:
为上述示例读取的文件将是t.json、e.json、s.json
上述示例的计算时间仅为~0.08s,但随着数组中字符串的数量和处理的文件数的增加,计算时间会迅速增加
看到这个例子时,您是否想到了任何即时的性能提升?我应该使用数据库吗?以字母开头将JSON拆分成文件是错误的选择吗?欢迎所有答案
谢谢你阅读这篇文章 当然,评估JSON文件的速度会很慢。评估大量大型JSON文件甚至更慢 您将有更好的运气查看HTML5Web数据库()。据我所知,这目前只适用于Webkit浏览器,但它将及时全面实施 另一种选择是,放弃JSON,转而使用更容易解析的东西,这会使情况有所改善——但不要指望这会带来神奇的结果。如果要存储大量数据并进行查找,则需要一个真正的数据库
一个更好的选择是去掉所有的客户端数据库逻辑,使用AJAX调用服务器端的东西在SQL数据库中查找。我建议使用正则表达式匹配字符,如果通过UI搜索,可以将搜索取消到约300-500毫秒。我不想把客户端和服务器分开,主要是因为这是一个免费的开源项目。我的问题是:使用SQLite数据库(或等效数据库)而不是JSON文件是否会获得显著的性能?对于上下文,而不是自我提升:“引人注目”比您得到的要少几个数量级。切换到SQLite确实提高了性能,我将此标记为公认的答案。谢谢你的帮助!
var i;
['a', 'b', ..., 'z'].forEach(function(letter) {
i = input.indexOf(letter);
if(i !== -1) {
// letter exists, process [letter].json
// avoid reading the same file twice
input[i] = '';
}
});