Json 使用Node.js加载大量数据

Json 使用Node.js加载大量数据,json,node.js,postgresql,asynchronous,Json,Node.js,Postgresql,Asynchronous,这是我关于堆栈溢出的第一个问题,但在过去两年中我一直在使用它,它提供了大量的信息 我最近刚学会了NodeJS,我陷入了进退两难的境地。我正试图找到使用NodeJS加载/插入大约2000行数据的最佳方法,如果可能的话,还可以使用首选的异步方法。我必须从API中提取数据,然后获取JSON数据并将数据加载到3个表中,以便以后使用数据。该文件有17个国家对象,然后是77个州对象和大约2000个县对象 我正在分析的JSON文件格式是: [{Country:{ Name: ... Count

这是我关于堆栈溢出的第一个问题,但在过去两年中我一直在使用它,它提供了大量的信息

我最近刚学会了NodeJS,我陷入了进退两难的境地。我正试图找到使用NodeJS加载/插入大约2000行数据的最佳方法,如果可能的话,还可以使用首选的异步方法。我必须从API中提取数据,然后获取JSON数据并将数据加载到3个表中,以便以后使用数据。该文件有17个国家对象,然后是77个州对象和大约2000个县对象

我正在分析的JSON文件格式是:

[{Country:{
    Name: ...
    CountryId: ...
    States: {
      Name: ...
      StateId: ...
      Counties: {
        Name: ...
        CountyId:...
      }
     }
  },{Country+n:{
    Name: ...
    CountryId: ...
    States: {
      Name: ...
      StateId: ...
      Counties: {
        Name: ...
        CountyId:...
      }
     }
  }];
因此,在我的PHP回溯中,我会立即在JavaScript中创建三个函数:

function Country(data){
    for(var z in data){
      var country = data[z];
      InsertInCountryDB(country.CountryId, country.Name);
      State(Country.State);
    }
}

    function State(data){
        for(var z in data){
          var state = data[z];
          InsertInStateDB(state.StateId, state.Name);
          State(Country.State);
        }
    }

    function County(data){
        for(var z in data){
          var county = data[z];
          InsertInCountyDB(county.CountyId, county.Name);
        }
    }
我的第一次尝试是为每个对象创建一个事件,然后使用事件深入到对象本身中,然后插入数据。我发现在数据库中插入国家和州的详细信息效果很好,但是如果使用县数据,就会出错

我不是在寻找我的问题的答案,而是一个编码技巧,帮助我摆脱三个同步功能,而是使用异步功能


谢谢

2000应该不会太糟糕。这听起来更像是10000个插页。您的大规则是将它们作为单个提交运行(如果您可以执行准备好的语句,甚至更好),并在最后执行提交

现在,由于您的问题更多地是在体系结构方面,并且假设您使用的是PostgreSQL 9.1或更高版本(并且可以从源代码安装额外的编译扩展),因此我的建议将完全不同

我将创建一个临时表(如果是9.1,则需要从源代码进行扩展):

然后我将把“行”作为JSON文档插入其中。然后,我将用plv8js编写一个存储过程(您必须单独安装,可能来自源代码,但如果您不想在Javascript中工作,可以使用pl/perl),它将处理JSON并提取每个片段。然后可以将这些函数链接在一起,将行作为集合进行处理,并一起执行插入操作

一个完整的工作示例在这里是不可能的,但是考虑到Perl或JavaScript,您可以使用JSON窗体中的每个实体并将其提取为元组,然后再使用该元组并进一步处理它,您可以很容易地将插入件链接到数据库中的JSON处理。


这与此类似,只是您的大部分功能都在数据库中,因此需要更少的规划开销才能有效利用。

哪个数据库?你试过什么?事件发射器?回调?2000行应该非常快。我已经编写了脚本,将多个文件中的7 mil记录插入到mongo中,在异步方面没有问题。你用的是什么数据库?我用的是postgres数据库。我使用了eventemitter,但我想今天早上我可能错过了最初使用侦听器和事件的方式。我设法使用同步方法将所有数据输入到系统中。但是NodeJS的重点是异步编程,所以我想看看是否可以重写代码以使用更好的方法。
CREATE TEMPORARY TABLE upload_holding (payload json);