第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

業(yè)務(wù)邏輯寫在數(shù)據(jù)庫還是自身應(yīng)用程序?

業(yè)務(wù)邏輯寫在數(shù)據(jù)庫還是自身應(yīng)用程序?

森林海 2019-04-16 17:05:35
SQL應(yīng)該負(fù)責(zé)怎么樣的CURD,分組、排序、可能根據(jù)業(yè)務(wù)邏輯只是選擇性查個別字段、使用SQL函數(shù)等等讓不讓數(shù)據(jù)庫做?還是自己用編程語言(比如java、c++)寫的應(yīng)用程序里處理數(shù)據(jù)?實例:統(tǒng)計2015-03-22~2015-03-24期間全國每個城市/省份每天的訪問ip量。假設(shè)查詢涉及的表的數(shù)據(jù)量為S??紤]以下三種方式。做法一:在一個以天為步進(jìn)單位長度來遍歷2015-03-22~2015-03-24日期范圍以及全國每個城市的循環(huán)里,執(zhí)行countIp(visitDay,cityCode)統(tǒng)計某個城市或省份某天的ip量。核心SQL:SELECTCOUNT(DISTINCTuser_ip)FROMpv_accessWHEREvisit_date_timeBETWEEN{某天最早時間點}AND{某天最晚時間點}ANDcity_code={某個城市的編碼}SELECTCOUNT(DISTINCTuser_ip)FROMpv_accessWHEREvisit_date_timeBETWEEN{某天最早時間點}AND{某天最晚時間點}ANDcity_codeLIKE{模糊匹配某個省的所有城市}做法二:通過以下SQL獲取數(shù)據(jù),然后在應(yīng)用程序中做分組統(tǒng)計。SELECTvisit_date_time,city_code,user_ipFROMpv_accessWHEREvisit_date_timeBETWEEN'2015-03-2200:00:00'AND'2015-03-2423:59:59'ANDcity_codein({所有城市的編碼})如果沒有統(tǒng)計省份的需求,有第三種做法,直接執(zhí)行SQL按【天+城市】分組統(tǒng)計:SELECTDATE_FORMAT(visit_date_time,"%Y-%m-%d")asday,city_code,ipCountFROMpv_accessWHEREvisit_date_timeBETWEEN'2015-03-2200:00:00'AND'2015-03-2423:59:59'ANDcity_codein({所有城市的編碼})GROUPBYDATE_FORMAT(visit_date_time,"%Y-%m-%d"),city_code;我自己的分析:涉及循環(huán)n次訪問數(shù)據(jù)庫,每次取一個分組的統(tǒng)計結(jié)果,時間復(fù)雜度為(nS)。優(yōu)點應(yīng)該是易于維護。數(shù)據(jù)庫負(fù)責(zé)簡單的查出記錄集,不負(fù)責(zé)統(tǒng)計,一次性取出統(tǒng)計所需的所有數(shù)據(jù),然后讓應(yīng)用程序做分組統(tǒng)計等處理。但是這樣不就增加了傳輸量嗎?因為可能我們需要的最終結(jié)果只是一個統(tǒng)計值(比如這個例子),但為了將統(tǒng)計工作轉(zhuǎn)移到應(yīng)用程序,就必須傳輸更多的數(shù)據(jù)。傳輸量為(S)。一條SQL語句獲取最終結(jié)果則只需一次請求,時間復(fù)雜度為(S)。但壓力大部分會轉(zhuǎn)移到數(shù)據(jù)庫?如果涉及分組統(tǒng)計,而分組不是互斥的(上面的例子【天+地區(qū)】分組不是互斥,既有城市又有省份),那么應(yīng)該無法使用直接用SQL實現(xiàn)分組統(tǒng)計得到最終結(jié)果,是吧?這個時候只能通過自身應(yīng)用程序?qū)崿F(xiàn)分組統(tǒng)計?我想我上面的問題的本質(zhì)問題是:兩個可互相通訊并對外提供服務(wù)的程序各自應(yīng)該負(fù)擔(dān)什么工作,業(yè)務(wù)邏輯放在哪,放多少?希望各位有經(jīng)驗有見解的童鞋給我指點迷津。
查看完整描述

2 回答

?
Smart貓小萌

TA貢獻(xiàn)1911條經(jīng)驗 獲得超7個贊

個人觀點,簡單的放在數(shù)據(jù)庫,復(fù)雜的放在程序里。
先說約束,即什么合法什么不合法,比如「賬戶余額必須是數(shù)字」和「賬戶余額不能小于零」這種簡單約束就比較適合放在數(shù)據(jù)庫,因為這是一個不太可能去修改的底線,數(shù)據(jù)庫中所有的數(shù)據(jù)都必須滿足這個條件。
再比如「每天只允許注冊100個用戶」這種約束就比較適合放在程序里,因為不滿足這個約束也不會對數(shù)據(jù)造成破壞,且這個約束很可能在未來修改。
然后是查詢,應(yīng)該盡量在數(shù)據(jù)庫中通過更多的查詢條件淘汰掉不符合要求的數(shù)據(jù),合適地選擇查詢條件會讓數(shù)據(jù)庫更有效率地利用索引。數(shù)據(jù)庫有很多措施來保證當(dāng)數(shù)據(jù)達(dá)到一個很大的量的時候依然可以快速地查詢,但是如果把數(shù)據(jù)查到應(yīng)用里再進(jìn)行篩選,數(shù)據(jù)的量可能超出設(shè)計時的預(yù)期。
分組也應(yīng)當(dāng)盡量在數(shù)據(jù)庫進(jìn)行,這樣會減少傳輸?shù)臄?shù)據(jù)的量,而且數(shù)據(jù)庫只需掃描一次就可以得到所有分組的結(jié)果(按照你的做法一,數(shù)據(jù)庫很可能要掃描多次,因為數(shù)據(jù)庫不知道你的幾個查詢之間的聯(lián)系)。
                            
查看完整回答
反對 回復(fù) 2019-04-16
?
偶然的你

TA貢獻(xiàn)1841條經(jīng)驗 獲得超3個贊

這不是業(yè)務(wù)邏輯,而是數(shù)據(jù)庫最基本的功能。
一般說業(yè)務(wù)邏輯放在數(shù)據(jù)庫是指用存儲過程等方法把業(yè)務(wù)特定的邏輯放在數(shù)據(jù)庫中。我個人不贊同這種方式。
另外省份是可以,也應(yīng)該用第三種方式統(tǒng)計的。你需要的是一張城市代碼和省份對應(yīng)關(guān)系的字典表。
                            
查看完整回答
反對 回復(fù) 2019-04-16
  • 2 回答
  • 0 關(guān)注
  • 472 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號