建緩沖區(qū)。比如其他類(lèi)型的高速緩存(redis等)作為中間緩沖層。
目前創(chuàng)新互聯(lián)已為千余家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站托管、服務(wù)器租用、企業(yè)網(wǎng)站設(shè)計(jì)、西安網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶(hù)導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶(hù)和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
數(shù)據(jù)的查詢(xún),更改首先在這個(gè)層處理,處理完再更新到對(duì)應(yīng)的數(shù)據(jù)庫(kù)。
注意額外增加鎖,或者緩存機(jī)制防止緩存擊穿,雪崩導(dǎo)致系統(tǒng)崩潰。
你可以把這張表除了主鍵外,導(dǎo)出到一張臨時(shí)表里,然后對(duì)另一個(gè)表作insert操作,主鍵賦空值即可自動(dòng)加上新的主鍵值。
很簡(jiǎn)單兩部操作就可以搞定。
MySql數(shù)據(jù)庫(kù)中存在大量的表結(jié)構(gòu),而且這些表都存在一個(gè)共同點(diǎn),就是表中都有相同字段,比如id,name,city,adress,lat,lng。表中字段id,name,city,adress不允許為空,所以表中這幾個(gè)字段的數(shù)據(jù)都是已經(jīng)賦給實(shí)值的,而lat與lng(經(jīng)緯度)是為空的。
現(xiàn)在要寫(xiě)一個(gè)程序,根據(jù)city,adress請(qǐng)求獲取數(shù)據(jù),把循環(huán)每一表中根據(jù)city,adress請(qǐng)求獲取的數(shù)據(jù)更新到相應(yīng)表,相應(yīng)表中對(duì)應(yīng)的那一行數(shù)據(jù)。這句話(huà),可能你有點(diǎn)暈,說(shuō)白了就是,先循環(huán)查詢(xún)遍歷表中city與adress的值,根據(jù)city,adress的值請(qǐng)求獲取數(shù)據(jù),更新到相應(yīng)行中,這個(gè)表循環(huán)更新完了就跳到下個(gè)表中再循環(huán)更新,以此類(lèi)推,直到全部更新。
CREATE PROCEDURE init_reportUrl()
BEGIN
DECLARE s INT DEFAULT 0;
DECLARE r_id bigint(10);
DECLARE report CURSOR FOR select distinct id as r_id FROM ReportHotLine ;
-- 聲明當(dāng)游標(biāo)遍歷完后將標(biāo)志變量置成某個(gè)值
DECLARE CONTINUE HANDLER FOR NOT FOUND SET s=1;
-- 打開(kāi)游標(biāo)
open report;
-- 將游標(biāo)中的值賦值給變量,注意:變量名不要和返回的列名同名,變量順序要和sql結(jié)果列的順序一致
fetch report into r_id;
-- 當(dāng)s不等于1,也就是未遍歷完時(shí),會(huì)一直循環(huán)
while s1 do
-- 執(zhí)行業(yè)務(wù)邏輯
UPDATE wh_csyx . dy_pres30207800013_001_local a
JOIN ReportHotLine b ON a.gdId = b.ID
AND b.createtime = ( SELECT max( createtime ) FROM ReportHotLine WHERE ID = r_id )
SET blms = b.banliInfo where a.gdId =r_id;
-- 將游標(biāo)中的值再賦值給變量,供下次循環(huán)使用
fetch report into r_id;
-- 當(dāng)s等于1時(shí)表明遍歷以完成,退出循環(huán)
end while;
-- 關(guān)閉游標(biāo)
close report;
END;
call init_reportUrl();