国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發(fā)設計 > 正文

那些年,翻過山,趟過河,挖了山丘,黑了河溝,終于還是遇到了——跨服務器查詢

2019-11-17 03:19:12
字體:
來源:轉載
供稿:網友

那些年,翻過山,趟過河,挖了山丘,黑了河溝,終于還是遇到了——跨服務器查詢

  準備寫點扯淡些的博客,然后想了好半天,終于想到了個稍微有點文藝的標題,不喜勿噴啊,噴著我這里到處都是就不好拉。。。

一:場景

先說說場景吧,為了不過分暴露業(yè)務,就用字母代替下吧,半個月前業(yè)務那邊報了個bug,說根據A條件和B條件篩選一批數據,

當把時間(C條件)范圍拉小點,可以篩選出數據,把(C條件)時間拉大點,就沒有數據了。

二:分析

乍一看,泥煤的。。。真的有點神奇哦,0-24點可以拉到數據,0-12點反而就拉不到了,暈。。。。然后就仔細分析了下代碼,

然來不知道哪一個程序員在M庫里根據各種條件篩選出了20條數據,因為B條件在N庫里面,所以他拿著這20條數據到N庫去做篩選,

結果20條數據全部暴斃,最后就拿著空集合送到前臺了。。。問題泥煤的終于明白了,就是如何根據多條件去做跨服務器查詢。

三:探索

其實也挺悲劇的,從業(yè)快四年了也沒遇到這個問題,雖然在上一家公司數據庫做了主從復制,跨庫,尼瑪的。。。也沒有跨服務

器查詢呀。。。不過那天問題找到后也挺興奮的,轉了轉珠子想了個辦法,用多線程搞一搞。。。

四: 失敗的一次嘗試

由于開發(fā)人員接觸不了生產,要是查的話還要找二線人員。。。我人又懶,不想郵件啥的通知人家,然后就自己假象了下數據應該

不會超過多少條。。。后來就是因為這個應該導致了該解決方法的失敗。

步驟如下:

①: 我那時假象一天的數據應該不會超過5w吧,為了加速,我準備多開幾個線程,一個線程撈tmd的5000條數據,5w的話我就開

10個線程。10w的話就開20個線程,反正線程是隨數據變的。

②: 就這樣我分別從M和N庫中撈出來我也不知道多少個OrderID,然后在兩組OrderID里面求個交集,當然這個要注意了,從數據

結構的角度說,這個需要用hash來去重,復雜度O(M+N),當我看到C#自帶的intersect就是先灌到hash里面做的,我就放

心了,至少不會出現惡心的O(MN)的復雜度了。。。

③: 求交集后,我現在就拿到一組OrderID了,然后拿這些orderID在內存中分頁,取出20條OrderID后再到主庫M中去查真正我需

要的數據,最后把數據送到前臺上。。。

這些想法在我腦子里面遨游之后,我就啪啪啪的寫完了代碼,測試環(huán)境下也通過了。。。然后屁顛屁顛的上生產了,就這樣噩夢開始了。。。

過了個星期,業(yè)務過來說:這下好了,原先數據查不出來,現在你給我頁面報錯了,我說:暈,不會吧,我馬上去看看。。。查了下后,然來

發(fā)現是頁面執(zhí)行時間過長,iis超時了。。。唉,這下沒法子了,去找二線查了下數據,居然N庫中有26w的數據,那我得要開52個線程,暈死,

我不知道當時生產環(huán)境的cpu狂飆的有木有。。。苦逼呀。。。還得繼續(xù)扣這些猥瑣的代碼。。。

五: 再次尋找解決方案

1:使用opendatasource跨服務器查詢

剛才我也寒酸的分析了下5個where,有4個在M庫中,有1個在N庫中,那就用opendatasource來做遠程服務器的inner join吧。。。

也許是公司為了性能和安全性考慮,禁用了此種使用方式,沒撤,此方案破產。。。

2: 做數據的冗余

泥煤的,把我逼到絕境了。。。既然跨不了服務器,那也只能做數據冗余了,沒辦法,只能在M庫里面建立一張冗余表,將N庫中表的數

據導入到這張冗余表吧,然后我就可以堂堂正正的用sql直接inner join了,問題也就差不多解決了,說干就干吧。

<1>事前冗余

我準備在web端插入數據的時候再冗余到XX表中,雖然是個過得去的主意,但是web端太多了,你懂的,要是為了這個小功能,要去改動無

數個的web端,工作量有點大了,還不知道人家部門配合不配合。。。而且我的需求也比較特殊,需要等M庫具有某些操作的時候,N庫中的

表才會生成數據,所以該種方案想想還是放棄了。。。

<2>事后冗余

后來還是決定用jobws每個小時去定時撈N庫中的數據,然后放入M庫的冗余表中,雖然業(yè)務那邊看的可能不是最新的一個小時的數據,

但是沒關系,這些數據不需要實時的,只要保證是最近一天的就足夠了,最后也就決定這種可行點了。。。悲劇啊。。。啊啊啊啊啊。。。

突然發(fā)現博客好像沒這么扯蛋過。。。還好蛋都扯完了,不過這也算是一個非常經典的問題,如果大家有什么好招數,記得分享分享

啊。。。謝謝了。。。。


上一篇:ADO.NET 學習筆記 入門教程

下一篇:ADO.NET

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 石林| 河曲县| 桃园市| 南昌市| 珠海市| 建始县| 高邑县| 岚皋县| 安龙县| 鄯善县| 白城市| 延庆县| 滦南县| 务川| 襄垣县| 闵行区| 龙岩市| 吉安县| 交城县| 广丰县| 曲水县| 雷州市| 香港| 安岳县| 龙口市| 枝江市| 阳高县| 茂名市| 玉环县| 罗江县| 高雄市| 霍邱县| 象山县| 虹口区| 嘉义市| 广灵县| 涿州市| 伊春市| 营山县| 民丰县| 六枝特区|