U**G项目数据同步问题(解决篇)

6 篇文章 0 订阅

前段时间因为项目需要同步Access数据到MSSql数据库中去,开始考虑了N种方式来实现,但是都不理想。

 

上次说的是客户的数据库里面有200W条数据。

 

上次说的问题如下:

 

1、有个表出现了100W条数据,但是只有两个字段,全部读到DataSet里面的话,可能要读上好几秒甚至上10秒以上,插入的时候出现过很大的问题,常规插入需要10多分钟,经过查资料,使用了System.Data.SqlClient.SqlBulkCopy这个类,进行操作,结果几秒钟插入成功,问题暂时解决,可能会出现问题2出现的问题,暂时没发现。

2、有个表出现了8W数据,虽说没有上个表的数据量庞大,但是,字段却比较多,这个表,我在读到DataSet里面的时候,出现假死了,怎么都没有反应,这个问题暂时还没有解决,本来考虑的使用表数据量到达一定的数量,分段进行插入,但是问题有出现了,客户Access有的表里面没有主键,分段查询的话,性能很低,这个问题暂时都还没解决。

 

从上次问题出现,我使用了过分页存储过程,然后根据分页查询数据,中间还根据每个表的字段不同,分段一次读取不同的数据量,然后进行插入数据,这样处理后,在数据表主键不清楚的情况下,Access的分页存储过程会出现点问题,时间也基本上维持在30分钟以内,主要性能问题出在查询上面。

 

最总解决方案:

使用的是安表分步同步,先删除表,然后使用Select into来拷贝哦Access数据库的表到MSSQL里面来。

删除和Select into操作使用事务来控制。保证导入成功才删除表。

MSSQL访问Access数据库使用MSSQL提供的连接服务器来访问。

 

C#代码里面开启数据库库连接的时候,超时时间需要设置的久一点,因为同步的时候,有些表数据量比较大的情况下可能会出现超时的情况。在这里,我是重新设置了一个连接字符串供同步数据这个模块使用。

 

连接服务器访问的时候,存在远程访问权限的问题,需要MSSQL账号需要Sysadmin的权限,这里我也另外建立了一个SQL的账号,供同步数据使用。

 

这样做完以后,测试,同步完200W条数据后,用时3分多钟。

测试环境:

MSSQL和Access在同一虚拟机服务器(以后可能会放在不同的服务器上,需要后面继续测试),现在暂时没有发现其他问题。

现在只需要保证同步的时候不会对Access的服务器产生太大性能问题就OK。

 

PS:这里我遇到了另该一个问题,客户Access数据库里面存在的时间类型的数据,然后他包含了一些错误的数据(如:203-01-01)

这样的时间类型在MSSQL里面是不允许插入的。现在处理方法事,把时间类型全部用字符类型来保存。只要在Select into的时候设置一下类型就OK了。

 

下篇会详细说明一下实现的一些细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值