关于批量数据处理的问题?
1.有这样的一个接口,从另个数据库拿数据,拿到之后添加到我们现在数据库,最开始一种解决方案是一次性(并发)插入,如果有
一条错误,全部回滚。但是这种方案如果出问题很难解决,原因是一旦有一条出问题很难找到问题点。最好是一次性拿2000条,在中
间出问题还让其接着往下执行,把当前的错误信息记录下来,最后可以一次性处理这些错误信息。还有种方案是一次读过来2000跳,
一条一条插入。两种方法都可行。通过这个问题,我彻底的明白了一个道理数据库里面的数据本身就是程序的一部分,现在感触更深
。
2.预览页面计算市场零售价
function SetViewServer() {
$("#my_menu").find("tr.F").each(function () {
if ($(this).find("input[name='hickCheckList']:checked").length > 0) {
// debugger;
var menuid = $(this).attr("id");
var price = parseFloat($.trim($(this).find("td.marketprice:eq(0)").html())); 得到当前的选择的价格
$("#my_view").find("tr").each(function () {
// debugger;
var viewid = $(this).children("td:eq(0)").html();
if (viewid == menuid) {
$(this).find("td.marketprice:eq(0)").html(price);
}
});
}
});
}
//得到服务产品零售价
function GetServerSale() {
//得到页面所有选择的服务产品
$("#my_menu").find("tr.F").each(function () {
if ($(this).find("input[name='hickCheckList']:checked").length > 0) {
var sumprice = 0;
var listpricerate = parseFloat($(this).find("input[name='hidProductRIILBusPrice']:eq(0)").val());
var costpricerate = parseFloat($(this).find("input[name='hidProductRIILCostPriceRate']:eq(0)").val());
var productclassf = $(this).find("input[name='hidProductRIILClassID']:eq(0)").val();
$("#my_menu").find("tr.CF").each(function () {
if ($(this).find("input[name='hickCheckList']:checked").length > 0 && $(this).find("td.nums:eq
(0)").html() != "") {
var productclasscf = $(this).find("input[name='hidProductRIILClassID']:eq(0)").val();
if (productclassf == productclasscf) {
var price = parseFloat($.trim($(this).find("td.marketprice:eq(0)").html()));
var nums = parseInt($.trim($(this).find("td.nums:eq(0)").html()));
sumprice += price * nums;
}
}
});
$(this).find("td.marketprice:eq(0)").html((sumprice * listpricerate).toFixed(2));
$(this).find("input[name='hidProductRIILCostPrice']:eq(0)").val((sumprice * costpricerate).toFixed(2));
}
});
}
总结:这两个方法之后,对jq有点感觉了
3.同步数据的问题
这个需求是这样的,我现在数据要同步到ERP里面,现在表里面有两个字段islocked与issuccess,默认值都是false,当前数据同步
成功之后,都是true,2分钟同步一次,2分钟根据当前时间那到这个时间之前的没有同步过去的所有数据,拿到之后进行如下操作。
拿到一个当前DataTable
第一种方案是锁定当前DataTable所有的行,然后再进行一条条同步。
if(islocked==false &&issuccess==false)
{
for(当前datatable)
{
全部锁定
}
}
然后一个循环写到ERP。
第二种方案,一个锁定之后,同步一条数据到ERP。
坏处,这个数据源有可能还在增加,当前同步的数据不确定,因为我数据库链接还在打开,别人操作向这个数据库存数据,导致同步
数据部确定。
if(islocked==false &&issuccess==false)
{
//没有for循环
sygn();
}
//同步一条记录
sygn(){
}
最后同步完之后,所有状态全部是TRUe,如果不是TRUE,则下次会拿到数据接着同步。
总结:这个程序是2分钟同步一次,这个是节奏,如果2分钟我从数据库拿到数据都没有同步过去,有开始一个新的任务,这样会怎么
样?其实我们期望是用户不管在ECP还是ERP里面操作,感觉在一个系统上似的。期望是在这2分钟同步过程中,把数据瞬间同步到
ERP.最值的注意的一点是:数据一直在增加。