記一次在獲取mysql資料庫結果集時的優化

2023-01-25 05:56:27 字數 1172 閱讀 7987

【背景】

該專案是用c++實現的一個處於資料庫和應用服務之間的分庫分表路由服務的元件。

1)與資料庫維持長連線

2)根據不同分庫分表規則選擇sql路由,為上游提供透明的sql查詢服務and定製化介面

3)sql執行的檢查,防sql注入、防全表掃描等

在對服務效能進行評估時發現,當壓力不斷增加時,sql執行耗時並沒有太大變化,反而是獲取sql執行結果集and將結果集轉json格式耗時越來越大。

【猜想】

官方文件介紹通過屬性名訪問更清晰,但通過index訪問效率更高。

可以看到jsoncpp耗時為171ms,而rapidjson耗時為13ms,只有不到jsoncpp的1/10

【壓測】

環境:併發128連線

結果:case1:優化前

case2:採用index方式獲取結果值

case3:優化取結果邏輯

case4:用rapidjson替換jsoncpp

總耗時(ms)

164102

49.3

2.8獲取結果集耗時(ms)

7327

8.11.6

轉json耗時(ms)

6547

40.7

0.8【效果】

三個介面a、b、c在優化後的效果對比,如下:

【結論】

rapidjson相對於jsoncpp,單純從轉換的效能上來說,確實提升了很多。

記一次資料庫遷移

正在使用的資料庫伺服器機器名稱為 db1,資料庫系統是 sqlserver2005 版本號 9.0.3042 例項名稱 instance1 即db1 instance1 9.0.3042 此例項下面有若干個資料庫系統。在此舉一個資料庫 ur 其它的資料庫遷移同此一樣 ur資料庫上面有很多應用於不同 ...

記一次資料庫髒讀

參考 案例 一次處理收貨資料提交,有2個不同貨源,卻分別有一個相同的sku要記錄到收貨詳情後,並且更新庫存數量。由於操作過程環節比較複雜,就生成2個執行緒非同步提交。寫收貨新紀錄是沒有問題,但是兩個執行緒差不多同時讀取到原有sku的庫存數量,在經過其他操作後,先後更新了該sku的庫存數量,誰最後提交...

php獲取上一次mysql操作所影響的記錄行數

php獲取上一次mysql操作所影響的記錄行數 mysql affected rows 取得前一次 mysql 操作所影響的記錄行數 說明 int mysql affected rows resource link identifier 取得最近一次與 link identifier 關聯的 ins...