前言
“資料庫是按照資料結構來組織、存盤和管理資料的倉庫,是一個長期存盤在計算機內、有組織的、可共享的、統一管理的大量資料的集合,又可稱為電子化檔案柜,”
這是百度百科上關于資料庫的定義,資料庫其實就是一個存盤資料的大倉庫,它的存盤空間很大,可以存盤上百億條資料,只不過在這個倉庫中,資料是有規則的存盤,就像圖書館一樣,
但是,資料庫再使用的同時,也有很多很神奇,讓人哭笑不得事發生,比方說下面這位仁兄干的事
資料庫開發規范
我不多說,就先給大家看一張圖

5張表,各種的查詢以及各種的LEFT JOIN,別不信,這套陳述句的來源是一個已經上線的專案,當我看到這張圖的時候,我*******,無數的**從我的嘴里冒出來,我老天,我突然就想起來當年看過的阿里規范,多表聯查的時候盡量不要超過三張表,但是還覺得跟鬧著玩似的,現在我覺得我錯了
他是真的有人能這么整啊,推薦大家看一下阿里開源的資料庫開發規范
阿里資料庫開發規范
oracle



mysql



需要這份阿里開發規范的,關注公眾號:Java架構師聯盟,即可查看獲取方式
資料庫優化
如果上面這個sql大家覺得還ok的話,那我們來看這個
如果業務代碼中,有一個這樣的需求需要根據一個或多個條件,查詢是否存在記錄,不關心有多少條記錄,普遍的SQL及代碼寫法如下
SQL寫法:
SELECT count(*) FROM table WHERE a = 1 AND b = 2
Java寫法:
int nums = xxDao.countXxxxByXxx(params);
if ( nums > 0 ) {
//當存在時,執行這里的代碼
} else {
//當不存在時,執行這里的代碼
}
是不是感覺很OK,沒有什么問題,但是,當你的資料量提升起來之后,再想一下,這個sql陳述句會是一個什么狀態,count(*),這就是一個炸彈啊,這一個sql和上面的那套sql有異曲同工之妙啊,都是能把人整死的啊,來看一下這個優化方案
優化方案
推薦寫法如下:
SQL寫法:
SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1
Java寫法:
Integer exist = xxDao.existXxxxByXxx(params);
if ( exist != NULL ) {
//當存在時,執行這里的代碼
} else {
//當不存在時,執行這里的代碼
}
SQL不再使用count,而是改用LIMIT 1,讓資料庫查詢時遇到一條就回傳,不要再繼續查找還有多少條了
業務代碼中直接判斷是否非空即可
總結
根據查詢條件查出來的條數越多,性能提升的越明顯,在某些情況下,還可以減少聯合索引的創建,
這里給大家分享一份DBA的開發筆記




需要這份阿里開發規范的,關注關注公眾號:Java架構師聯盟,即可查看獲取方式
分布式資料庫中間件
最后,給大家分享一份分布式資料庫中間件
隨著大資料時代的到來,海量資料存盤、并行計算、異構資料互聯等一系列新技術在市場上不斷地涌現,相信資料庫行業的很多從業者都對傳統關系型資料庫的單點故障及容量問題頭疼不已,“分庫分表”也早已成為解決這類問題的基礎,此時,Mycat應運而生,
本書由資深Mycat專家及一線架構師、DBA撰寫而成,首先簡單介紹了分布式系統和分布式資料庫的需求,然后講解了分布式資料庫的實作原理,并對市場上存在的各種分布式資料中間件進行了對比,再圍繞著如何利用Mycat 實作分布式資料庫而展開,
無論是對于軟體工程師、測驗工程師、運維工程師、軟體架構師、技術經理,還是對于資深IT人士來說,本書都極具參考價值,



需要這份阿里開發規范的,關注關注公眾號:Java架構師聯盟,即可查看獲取方式
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/177042.html
標籤:其他
上一篇:阿里限量出產Elasticsearch學習手冊,確定不心動?
下一篇:有沒有好多建站方案???
