mysql系統訊息 MySQL案例分享之系統訊息

2021-10-22 10:14:28 字數 1240 閱讀 8072

從前有個大師,率領一群徒弟,為客戶做了乙個軟體系統。某天,客戶提出了乙個新的需求,向系統中的所有使用者傳送系統訊息。由於當時系統剛上線不久,系統中的使用者也就幾十個。大師為了考驗自己的徒弟,便將該需求分配給他的徒弟,要求每個人都做一套方案出來,於是便有了下面的故事。

徒弟們接收到該項任務後,每個人都想到了先建一張系統訊息表,每次傳送系統訊息時,將資料儲存在詞表中,使用者就能從該表中讀取他個人的系統訊息。使用者資訊表的模型如下:

基於上面的資料庫模型,徒弟們分別作了不同的實現方案,如下:

實現方案一:

小a是個急性子,領到任務後。立即開始了他的程式設計思路:將系統中的所有使用者都取出來,然後遍歷所有的使用者,每次迭代時插入一條系統訊息。偽**如下:

由於系統中的使用者較少,小a幾遍測試,發現系統中執行良好,便將該方案提交了上去。

實現方案二:

小b接到任務後,想到應該先把系統中所有的使用者ids取出來,然後遍歷這些ids,每次迭代時都插入一條系統訊息。基於此,小b的偽**如下:

由於系統中的使用者較少,小b幾遍測試,發現系統中執行良好,也將該方案提交了上去。

實現方案三:

小c接到任務後,考慮到每次插入的系統訊息,除了使用者id不同外,其餘的資料項都相同,便想到了批量插入資料。由於mysql資料庫支援批量插入資料,小c設計出了執行的sql語句與偽**:

執行的sql語句如下:

偽**如下:

小c向系統中新增了幾千個模擬使用者,測試系統執行良好。但發現將系統中的使用者增加至幾萬時,傳送系統訊息速度明顯變慢。於是,小c採用了分組的方式進行插入,每10,000條插入一次,系統執行良好。

實現方案四

小d接到任務後,考慮的也是批量插入資料,但與小c不同的是,他想通過執行一次sql完成批量插入資料。即先將待傳送的訊息存入資料庫中,然後通過mysql查詢並同時將資料插入系統訊息。小d的mysql設計如下:

小d向系統中插入了10萬個模擬使用者,經測試,系統執行良好。以下是向113508個使用者傳送訊息的花費時間。

「可愛 的測試」傳送給系統中個使用者,共用時毫秒

「fdgsdfg」傳送給分組中個使用者,共用時毫秒

「平台所有使用者系統訊息」傳送給系統中個使用者,共用時毫秒

「發生的飛灑的」傳送給系統中個使用者,共用時毫秒

「測試使用者組33」傳送給分組中個使用者,共用時毫秒

上面的故事,便是我們在開發中經常遇到的場景,要實現系統中的乙個功能時,往往有很多種方法,最先實現的,**最簡便的並不一定是效率最好的。**本身就是乙個黑盒子,不要考慮程式的現有效能,更要考慮好程式的擴充套件效能。

mysql中TIMESTAMPDIFF案例詳解

timestampdiff unit,begin,end 根據單位返回時間差,對於傳入的begin和end不需要相同的資料結構,可以存在乙個為date乙個datetime 支援的單位有 下面這個例子是對於timestampdiff最基本的用法,select timestampdiff month,2...

mysql安全性案例分析 mysql經典案例分析

問題 create table a id varchar 64 primary key,ver int,在id,ver上有聯合索引,10000條資料 為什麼select id from a order by id特別慢?而select id from a order by id,ver非常快 我的表...

mysql登陸案例 例項分析mysql使用者登入

今天,在學習mysql授權認證時,遇到了乙個問題,看下,我是如何分析的 我在資料庫內新增了乙個帳號 create databases firstdb grant all on firstdb.to firstdb identified by xx flush privileges 原計畫用first...