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