javascript - 在 Node 中处理大量数据的最快方法

标签 javascript mysql node.js performance npm

我有一些带有 4 000 000 个数字的数据库,我需要检查数据库中是否存在某些数字

数据库示例:[177,219,245,309,348,436,...]

我尝试使用 mysql 表,但它需要 1300ms 来检查是否存在一些 1 数字

时间很长,我检查了一些其他方法:

1) 将所有数字推送到array 并使用indexOf 进行检查

2) 将所有数字推送到string 并使用indexOf 进行检查

3) 将所有数字推送到对象并使用hasOwnProperty检查它

4) 将所有数字推送到对象并检查值

我以所有这些方式进行了 100 次检查并测量了时间:

try [...].indexOf(...) === 0
Total: 726ms

try String(...).indexOf(...) === 0
Total: 1915ms

try {...}.hasOwnProperty(...) === true
Total: 4ms

try {...}[...] === true === true
Total: 4ms

测试代码:

// Reads db json with ~4 000 000 elements
var arr = utils.readJSON('members.json');
// Converts db to string type
var arr_string = arr.toString();
// Makes empty object
var arr_obj = {};
// Converts db to object type
for(var i in arr){
    arr_obj[arr[i]] = true;
}
// Makes empty array
var checkList = [];
// Gets 100 different values from different places of db
for(var i = 0; i < 100; i++){
    checkList.push(arr[Math.floor(arr.length / 100 * i)]);
}
// Main time variable
var time;

// test
time = new Date().getTime();
for (var i in checkList) {
    console.log('try [...].indexOf('+ checkList[i]+') === ' + arr.indexOf(checkList[i]));
}
console.log('Total: ' + (new Date().getTime() - time) + 'ms');

// test
time = new Date().getTime();
for (var i in checkList) {
    console.log('try String(...).indexOf(' + checkList[i] + ') === ' + arr_string.indexOf(checkList[i]));
}
console.log('Total: ' + (new Date().getTime() - time) + 'ms');

// test
time = new Date().getTime();
for (var i in checkList) {
    console.log('try {...}.hasOwnProperty(' + checkList[i] + ') === ' + arr_obj.hasOwnProperty(checkList[i]));
}
console.log('Total: ' + (new Date().getTime() - time) + 'ms');

// test
time = new Date().getTime();
for (var i in checkList) {
    console.log('try {...}[' + checkList[i] + '] === true === ' + (arr_obj[checkList[i]] === true));
}
console.log('Total: ' + (new Date().getTime() - time) + 'ms');

我相信执行此任务的最佳方法是使用 hasOwnPropertyObject,但是您知道哪些不同的方法?

也许我应该尝试使用其他数据库?

最佳答案

它最初是评论,但不合适,所以我将其作为答案发布。正如其他人已经指出的那样,在要搜索或排序的列上使用索引。总是。不仅在这个例子中。

如果这还不够,请考虑使用其他一些数据存储,例如 Redis,它可能更有效地处理您的特定用例。

关于javascript - 在 Node 中处理大量数据的最快方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43121396/

相关文章:

javascript - 定位当前选中的单选按钮

javascript - 没有从 Ajax 调用返回 JSON 数组

php - 无法通过插入查询来使用 php 插入 id

mysql - 更改 MySQL 存储过程的所有者?

javascript - 依赖注入(inject)非实例化对象的优点和缺点

javascript - RegExp/JavaScript : Split string on multiple characters, 保留分隔符而不使用lookbehind

mysql - 如果不为空,则将旧的 WordPress 帖子内容替换为新内容

node.js - Postgres SQL 加入多对多关系

node.js - Electron : Net from Nodejs doesn't trigger events on Windows build

javascript - Node.js 抓取 ASU 类(class)