1

这是我对 Stack Overflow 的第一个问题,但过去 2 年我一直在使用 SO,它提供了丰富的信息。

我最近拿起了 NodeJS,但我遇到了两难境地。我正在尝试找出使用 NodeJS 加载/插入大约 2000 行数据的最佳方法,如果可能的话,使用首选的 Async 方法。我必须从 API 中获取数据,然后获取 JSON 数据并将数据加载到 3 个表中,以便以后可以使用这些数据。该文件有 17 个 Country 对象,然后是 77 个 State 对象和大约 2000 个 Counties 对象。

我正在解析的 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);
        }
    }

我的第一次尝试是为每个对象创建一个事件,然后使用这些事件深入到对象内部,然后插入数据。我发现它可以很好地将国家和州的详细信息插入数据库,但是使用县数据,它会出错。

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

谢谢

4

1 回答 1

0

2000应该不会太差。这听起来更像是 10000 次左右的插入。您的大规则是将它们作为单个提交运行(如果您可以执行准备好的语句,那就更好了)并在最后提交。

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

我会创建一个临时表(如果 9.1 需要从源扩展):

CREATE TEMPORARY TABLE upload_holding (payload json);

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

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

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

于 2013-05-29T12:39:34.583 回答