当前位置: 代码迷 >> Sql Server >> 碰到一件难事。100*3次数据库连接
  详细解决方案

碰到一件难事。100*3次数据库连接

热度:95   发布时间:2016-04-24 09:06:45.0
遇到一件难事。100*3次数据库连接
原来的需求是用app中发一个包来,我跑三次数据库,完成业务
现在的需求是app发一个大包来,这个包包含了100个小包,这样我要跑三次*100次数据库,才能完成业务。

涉及到两张表(父子表),第一张的数据量是10万大小。第二张数据量是100万大小。也就是说
300次的百万数量级数据的crud在一次完成,这可能么??页面不会超时么,额的神啊。~~




------解决思路----------------------
先把100条json数据插入到一个临时表,然后对临时表按业务规则操作,这个可以批量的。应该比每个记录单独进行操作快。
只要建好索引,百万记录中更改100条记录不会慢。就算你3百次更新都要单独读写一个数据页,也不会慢到引起app超时。
------解决思路----------------------
--先判断Device表(设备表,也就是父表),根据mac地址判断有没有这个 纪录,没有则插入。
INSERT INTO Device
SELECT uuid,mac, ...
  FROM #temp 
 WHERE NOT EXISTS (SELECT *
                     FROM Device
                    WHERE Device.mac = #temp.mac
                  )

--再根据online字段的含义,如果是instore状态,就插入DeviceDetails表(设备详情表,也就是子表)一条入库消息(记为A)
INSERT INTO DeviceDetails
SELECT uuid,mac, ...
  FROM #temp 
 WHERE online = 'instore'

--如果是update,更新A纪录的时间
--如果是outstore,也更新A纪录的时间
UPDATE DeviceDetails
   SET d.lastinstore = t.lastinstore
  FROM DeviceDetails d, #temp t
 WHERE d.uuid = t.uuid
   AND t.online IN ('update','outstore')

大概就是这样
  相关解决方案