原来的需求是用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')
大概就是这样