加速 NeDB 中的数组插入

Posted

技术标签:

【中文标题】加速 NeDB 中的数组插入【英文标题】:Speeding up array inserts in NeDB 【发布时间】:2020-09-01 04:51:11 【问题描述】:

我正在制作一个应用程序,该应用程序从 reddit API 中获取用户的 cmets 并将它们加载到本地数据库中。我正在使用 NeDB 作为数据库。 reddit API 返回一个包含 25 个元素(注释)的数组,然后您必须使用最后一个元素的日期进行分页以获取下一个元素数组。我映射每个数组并单独插入每个元素。我不想插入整个数组,因为这样元素就会被索引,我会留下一个充满不同索引的数据库。我通常会抓取几百个数组。我也在使用 nedb-promises。

整个数组插入的平均速度从 3 秒缩短到 10 秒

问题是,数组插入花费的时间太长,最后这个过程变慢了。我的代码有问题吗?使用 SQLite 会快得多吗?谢谢

const asyncForEach = async function (array, callback) 
    for (let index = 0; index < array.length; index++) 
      await callback(array[index], index, array);
    



const fetch = async (paginationHelper) => 
    //response tree: response.data.data[n].body
    const data:data = await pushshift.get(`?before=$paginationHelper !==null ? paginationHelper : ''&author=$author`)

    return data.map(comment => 
        return (
            body: comment.body,
            created: comment.created_utc,
            subreddit: comment.subreddit,
            author: comment.author,
            postId: comment.link_id.split('t3_')[1],
            parentId: comment.parent_id.split('t1_')[1],
            linkId: comment.id      
        )
    )


const load = async (comments) => 
    let i = 0
    await asyncForEach(comments, async comment => 
        await db.insert(comment).then(res => 
            console.log(res);
            i++
            console.log(i);            
        )        
    )


const loadAll = async () => 
    let comments = await fetch(null)

    //Pagination is made using the comments' date when they were created
    let paginationHelper = comments[comments.length-1].created

    while(paginationHelper)
        [comments] = await Promise.all( [fetch(paginationHelper), load(comments)] )

        paginationHelper = comments.length !== 0 ? comments[comments.length-1].created : null
        console.log(paginationHelper);
    

【问题讨论】:

【参考方案1】:

我是个白痴,你可以毫无问题地插入整个数组,而且速度非常快。

【讨论】:

以上是关于加速 NeDB 中的数组插入的主要内容,如果未能解决你的问题,请参考以下文章

nedb - 动态创建数据库

如何使用 NeDB 仅按名称查找文档?

C# 性能,加速类中的字符串数组

加速python中的元素数组乘法

LevelDb简单介绍和原理——本质:类似nedb,插入数据文件不断增长(快照),再通过删除老数据做更新

将加速的 A 数组表示转换为 repa 的 U 数组表示