{eval=Array;=+count(Array);}
謝邀,在BAT里曾經接手過一個公司級的平臺開發,接手的時候,這個平臺已經上線2年了,但是卻經常收到用戶投訴,說從網頁端來操作頁面的時候,響應實在是太慢了,非常影響用戶體驗。
接手的時候,經理就說了,一定要把用戶反饋的這個事情列為P0級問題,盡快解決。
于是,我馬上開始了分析。經過在日志里打點,得知時間主要消耗在數據庫查詢上。根據我們之前的理論知識,我根本想象不到數據庫能被拖慢到這個地步。問題出現在一張存儲歷史任務的表格實在是太大了,新任務還在以每天百萬級的速度增長,而這張表的體量已經達到了億。這種情況下,就算有索引,在頻繁寫表(創建任務)的間隙去讀表(查任務),其效率也是非常低的。
我當時想到的第一個優化方法是配置主從數據庫。主從配置的好處有三點,分別是1)讀寫分離,也有人稱之為負載均衡;2)數據異地備份,還有3)提高數據庫的可用性。當時配置主從的主要目的是希望能夠實現讀寫分離,從而提高數據庫查詢的效率。配置過后,查詢效率確實有一定的提高,但是還遠未達到解決問題的程度。
在查閱了很多信息之后,我看到了很多人推薦使用elastic search作為持久層。
它是一個輕量型的存儲工具,雖然不是關系型數據庫,也不支持基本SQL語句,但是它具有能夠動態多節點部署,節點掉線后不影響全局數據的優點,最重要的一點,在面對海量數據查詢時,它的表現要比MySQL優秀許多。根據我們的實際測試,一張幾千萬的表格,如果存儲在MySQL中,利用非索引字段查詢,可能消耗數秒到數十秒,但是同樣的數據存儲在ElasticSearch中,只需要毫秒級別就能查詢到結果。簡直就是為我們遇到的問題量身定做的解決方案。
綜上,我們從兩個方面提供了優化數據庫的思路,分別是配置主從與引入ElasticSearch。
以上是我的淺見,歡迎各位在下方評論區點贊留言互動。
我是蘇蘇思量,來自BAT的java開發程序員,每天分享科技類見聞,歡迎關注我,與我共同進步。
1.最重要的調整數據表的架構,以提升效率。通過架構調整,減少關聯查詢,減少同步讀寫。用冗余字段,減少關聯。
2 大小字段分離。尤其是大字段,最好獨立表存儲(當然是數據量極為龐大時)
3.使用鏈接(join)來代替子查詢,速度將會快很多的。
4.合理索引!十分重要,必要時分表分庫。好的索引,使查詢提升1000倍,不是問題。
直接多PC SERVER搭建機群,把大數據庫拆分吧。有錢你就直接上小型機+Oracle數據庫
主要是多大的數據庫?16臺夠了吧?MySQL
針對數據庫優化基本在有以下的步驟:
一、硬件的優化
1)最粗放的方式就是提升硬件的配置,可以從CPU,內存和磁盤方面給予回答。
二、DBA的優化
1)最常用的方法是索引、索引、索引,加個索引可以將CPU的100%一下子降到10%左右
2)和開發溝通看看表里面的數據是否可以搬移或是刪除
三、開發的優化
1)添加緩存,減少對數據庫的訪問,變相的減少數據庫的壓力
2)添加冗余字段,減少跨表查詢,采用反三范式的方法去設計表
3)SQL語名要規范,不允許用seelct * ,where條件中不允許用函數、like,not in,<>等;
四、架構的優化
1)數據庫設計要規范,避免存在大表,如表數據量過大,可以拆分成多個表
2)減少跨表查詢,最好使用單表去查詢數據
3)設計數據庫的時候要采用水平或是垂直拆分的方式,將數據打散。
注:有時候數據庫優化不是單靠一個點去完成的,如果想要治本的話,得從多方面去入手。
0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答0
回答