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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

2 回答

?
Smart貓小萌

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

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

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

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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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