無法使用索引的複雜排序應該在資料庫還是應用中進行?

時間 2021-06-07 00:45:54

1樓:Aray

這個分很多流派.

傳統企業應用程式設計師: 沒有我乙個SQL搞不定的! 乙個SQL不行我還有儲存過程.

網際網路派的程式設計師: 資料庫效能水平擴充套件不易,應用的水平擴充套件容易.所以耗時的操作應該放在應用中來做. 避免讓資料庫成為整個系統的瓶頸

網際網路的專案技術負責人: 產品經理你過來, 你這個功能的目的是什麼, 能解決啥使用者問題, 沒有啥卵用給我砍掉!

網際網路的架構師: 生產資料庫不允許搞這樣的耗時操作,無論是資料庫裡排序還是應用裡排序都不行,你們非要這麼搞,給我搞到elk裡面去.

總結: 先懟產品經理砍掉這個需求. 砍不掉扔elk裡去.

ps:個人認為在應用裡排序並不比在資料庫中好. 在應用中排序並不能降低多少資料庫壓力.

資料庫的壓力主要是在磁碟IO上,應用排序並不能降低磁碟IO(資料庫記憶體充足的情況下). 記憶體/CPU根本不是問題. 記憶體幾百G,單CPU幾十個核心.

反而是應用排序需要額外占用很大的網路IO, 因為要將所有資料衝資料庫中讀出來啦. 資料庫排序只需要將分頁資料返回網路IO占用少很多很多.

如果使用資料庫讀寫分離.這個排序操作在從庫上,從庫理論上也是無限水平擴充套件 (不考慮網路IO瓶頸)

如果資料庫水平分庫分表, 在資料庫中排序不能實現.

pps: 微波麥片想到, 可以將你的負責排序條件計算出乙個權重值存入資料庫, 然後可以在權重欄位和查詢條件上加索引

怎麼使用c語言中的sort排序,在結構體裡面按學號排序??

陳舸 問題描述的不是很清楚,不過我大概猜你是想對某些結構體做排序,結構體裡有個學號的字段,要以學號為標準來排序?可以使用qsort 隨手碼了乙份。include include include typedef struct student Student int compare const void...

是否存在那種,已經複雜到無法繼續有效維護的軟體?如果沒有,哪些是最接近的?

我前公司,之前我有個小弟,做乙個客戶需求,發現基線版本不支援,就跑去問基線對應模組的程式設計師和產品經理,基線回應說,這個功能,業務上就是不需要支援這種需求的,根本不存在這種業務場景,我小弟就懵逼了,明明客戶要求了這個需求啊。雙方誰也說服不了誰。我休假回來,看了一下,告訴小弟,把這個類連類注釋一起列...

人們是否應該具有 不被搜尋引擎搜到 的權利?

stray slam 歐盟在嘗試推行被遺忘權,不過目前不是乙個被動技能,要當事人自己點選被遺忘。而我大google的做法是,在歐洲伺服器 遺忘 你,然後把資料傳回大美利堅。這說明要執行被遺忘權可能是乙個類似於反洗錢反避稅一樣的複雜程式,必須全球主要國家聯合。而這是基本不可能的,對於很多國家來說 比如...