一、在Nodejs中使用MySQL數(shù)據(jù)庫的優(yōu)異實踐
1. 請一直使用pool,沒有何時。
2. pool在程序初始化的時候創(chuàng)建,無需銷毀,從中抽取實例連接就行,無需關(guān)心細(xì)節(jié),也無需手動連接和關(guān)閉。
3. 推薦使用一個ORM庫,例如 sequelize之類的,很多,包括我們公司自產(chǎn)的 toshihiko,可以簡化掉很多細(xì)節(jié)
4. 多級連接沒什么需要注意的,主要是通過內(nèi)網(wǎng)ip連接,做好環(huán)境隔離,保證mysql服務(wù)的連接數(shù)夠用,合理設(shè)置每個服務(wù)的pool大小。
5. 數(shù)據(jù)庫設(shè)計是門大學(xué)問,數(shù)據(jù)庫優(yōu)化也是門大學(xué)問。
pool程序啟動的時候就建立,全程不需要關(guān)閉。一定要考慮并發(fā)(僅僅是并發(fā),還不是高并發(fā))下的業(yè)務(wù)邏輯問題,盡量用樂觀鎖解決問題,樂觀鎖是指 update table set a = new_value where version = old_version 這種類似形式,根據(jù)返回的affected rows 判斷是否更新成功。
讀寫操作盡量去用內(nèi)存 緩存/隊列化處理,給mysql的最平緩的壓力。少用事務(wù)。
避免單表 or 單行 同時的讀寫壓力。order by, group by,count(*) 加 join 這種操作大多效率低下,能避開就避開。
可以偶爾的反范式設(shè)計,但需考慮如果數(shù)據(jù)不一致了怎么辦,plan b能同步回來就問題不大。緩存,緩存,還是緩存。用內(nèi)存換mysql壓力 內(nèi)存可以LRU沒那么容易爆 mysql壓力大了很容易進(jìn)入雪崩。
延伸閱讀:
二、全文索引
FULLTEXT(全文)索引,僅可用于MyISAM和InnoDB,針對較大的數(shù)據(jù),生成全文索引非常的消耗時間和空間。對于文本的大對象,或者較大的CHAR類型的數(shù)據(jù),如果使用普通索引,那么匹配文本前幾個字符還是可行的,但是想要匹配文本中間的幾個單詞,那么就要使用LIKE %word%來匹配,這樣需要很長的時間來處理,響應(yīng)時間會大大增加,這種情況,就可使用時FULLTEXT索引了,在生成FULLTEXT索引時,會為文本生成一份單詞的清單,在索引時及根據(jù)這個單詞的清單來索引。FULLTEXT可以在創(chuàng)建表的時候創(chuàng)建,也可以在需要的時候用ALTER或者CREATE INDEX來添加。