这是我关于Stack溢出的第一个问题,但我在过去的两年里一直在使用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 backround,我会立即在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);
}
}
我的第一次尝试是为每个对象创建一个事件,然后使用事件向下钻取到自身内的对象,然后插入数据。我发现它可以很好地将国家和州的详细信息插入到数据库中,但是对于县数据,它会出错。
我不是在寻找我的问题的答案,而是一个编码技巧,帮助我摆脱三个同步功能,而不是使用异步功能。
由于
答案 0 :(得分:0)
既然你的问题更多的是在架构方面,假设你正在使用PostgreSQL 9.1或更高版本,(并且可以从源代码安装额外的编译扩展),我的建议会有很大不同。
我会创建一个临时表(如果是9.1,则需要从源代码扩展):
CREATE TEMPORARY TABLE upload_holding (payload json);
然后我会在那里插入“行”作为JSON文档。然后我会在plv8js中编写一个存储过程(你必须单独安装,可能来自源代码,但如果你不想在Javascript中工作,你可以使用pl / perl)来处理JSON并提取每个部分。 。然后,您可以将这些函数链接在一起,将这些行作为集合进行处理,并将插入内容组合在一起。
一个完整的工作示例在这里是不可能的,但考虑到使用Perl或Javascript,您可以采用JSON形式的每个实体并将其提取为元组,然后采用该元组并进一步处理它,您可以相当容易地链您插入数据库内的JSON处理。
除非您的大多数功能都在数据库中,因此需要更少的计划开销才能有效利用。