1. 程式人生 > >Linux命令列&連線Linux伺服器&資料庫優化&MyISAM和InnerDB&redis&memcache

Linux命令列&連線Linux伺服器&資料庫優化&MyISAM和InnerDB&redis&memcache

Linux

長時間執行穩定的作業系統,當成伺服器(web、db、app)。有C編譯環境,有一些軟體(Redis、nginx)沒有軟體包,需要在Linux編譯獲得軟體包。

常用命令

pwd:獲取當前路徑 cd:跳轉到目錄 su-u:切換到管理員 ls或ll:列舉目錄

  • 檔案操作命令
    • 檔案
      • 檢視 Tail
      • 刪除 rm-rf
      • vi
    • 資料夾
      • 建立mkdir
      • 刪除rm-rf

怎麼連線遠端Linux伺服器

需依賴於Linux伺服器安裝SSH伺服器、SFTP伺服器,SSH服務的埠為22,SFTP伺服器埠為25,使用SSH客戶端連線,Xshell、Putty 使用SFTP客戶端,上傳和下載檔案(上傳安裝包,修改配置檔案上傳)Winscp、XFTP putty+winscp xshell+xFTP =>xmanager

雲主機

雲主機就是雲服務運營商(阿里、華為、新浪、西部數碼等)提供遠端伺服器功能付費租用對應伺服器。

資料庫優化

  1. 定位:查詢、定位慢查詢、並優化
  2. 建立索引:在索引中查詢,直接找到對應記錄
  3. 分表:當表中資料比較多或默寫欄位的值比較多但很少使用時,採用水平分表和垂直分表
  4. 讀寫分離:一臺伺服器不滿足需求是,用讀寫分離的方式進行叢集。
  • 主從同步:資料庫將資料持久化到磁碟上,每個資料庫伺服器的資料一致。修改操作在主資料庫寫,其他資料庫同步資料。使用負載均衡實現寫操作往主資料庫取,讀往從資料庫取。
  1. 快取:使用redis來進行快取

查詢、定位慢查詢

在專案自驗後轉測試,啟動資料庫開啟慢查詢,並且把執行慢的呼叫語句寫到日誌中,在執行一定的時間後,通過檢視日誌,找到相應的慢查詢語句。 使用explain慢查詢語句,詳細分析語句的問題

show variables like ‘log_slow_queries’; 開啟 set global log_slow_queries = on;

資料庫優化遵循正規化

首先符合1NF,才能滿足2NF,才能滿足3NF 1NF:表中列具有原子性,不能再分解 2NF:表中記錄唯一,主鍵 3NF:外來鍵,表中不要有冗餘資料 反三正規化

資料庫優化建立索引

  • 普通索引:允許重複值出現
  • 唯一索引:唯一,不能有重複值
  • 主鍵索引:唯一且不為null,根據主鍵建立索引
  • 全文索引:根據文字域(varchar、char、text)進行索引—>sphinx explain select * from articles where match(title,body) against(‘database’);
    • 索引佔用磁碟空間、對DML(資料操縱語言SELECT、UPDATE、INSERT、DELETE)操作變慢
    • 使用場景: 1.在where條件經常使用 2.欄位內容不是唯一的幾個值 3.欄位內容不頻繁變化
    • 具體技巧
    1. 建立多列索引(複合索引),不使用第一部分就不會使用索引。
    2. 用like查詢時,前面使用萬用字元%不會用索引,即關鍵字不能使用%或_,反之亦然。只能‘aaa%’\G
    3. 條件有or,有條件中沒有使用索引,其他條件也不能用。要求每個欄位單獨使用時能索引
    4. 列型別是字串時,在條件中用引號引用起來
    5. 使用全表掃描比使用索引快,不使用索引

資料庫優化之分表

水平分表和垂直分表 表資料達到百萬級,查詢效率低,容易造成表鎖。(垂直分表)表中欄位的值多(長文字、二進位制),而且只在少數情況下查詢,可將欄位單獨放在一個表中,用外來鍵連線。

  • 水平分表
    1. 按時間分表:資料時效性強
    2. 按區間範圍分表:自增ID需求
    3. Hash分表:通過原始ID或名稱按hash演算法計算出資料儲存表的表名

資料庫優化選擇合適的儲存引擎

myisam/innerDB/memory MYISAM:表對事務要求不高,以查詢和新增為主, INNERDB:對事務要求高,儲存的都是重要資料, MEMORY:資料變化頻繁,不需要入庫,有繁忙的查詢和修改,速度快

MyISAM和InnerDB的區別!!!

  1. 事務安全:MyISAM不支援事務,innerDB支援
  2. 新增和查詢速度:myisam不用考慮同步鎖,查詢和新增速度快
  3. 全文索引:myisam支援
  4. 鎖機制:myisam支援表鎖,innerDB支援行鎖
  5. 外來鍵:myisam不支援外來鍵,InnerDB支援外來鍵

資料庫優化之快取

在持久層(dao層)與資料庫(db)之間新增一個快取層,減少資料庫伺服器壓力,減少訪問時間。 Hibernate的二級快取(SessionFactory),但是他不能完成分散式快取,中央快取用redis、memcache

資料庫優化之語句優化

  • DDL(Data definition Language)優化:
    1. 匯入資料時,禁用索引
    2. 關閉唯一校驗 set unique_checks = 0//關閉
    3. 修改事務提交方式 set autocommit=0,將多次提交變為一次
  • DML優化(data manipulation操縱 language):將多次提交變為一次
  • DQL優化:
    1. order by—多用索引排序、普通結果排序Filesort
    2. group by:使用order by null取消預設排序
    3. or優化,or兩邊都用索引效能好

連線阿里雲伺服器建立的資料庫

建立資料庫

實現批量插入幾百萬條資料

  • 原理:變多次提交為一次,使用批量操作。

redis

key-value的nosql資料庫,先存到記憶體中,根據策略持久化到磁碟上,斷電也不會丟失資料,支援的資料型別多。

  • 作用:做快取資料庫和web叢集時當中央快取存放session
  • 使用場景:經常查詢、很少修改的資料存放到記憶體中,減少訪問時間、減輕壓力。
  • redis中計數器時原子性的記憶體操作,可解決庫存溢位問題
  • session快取伺服器:web叢集時作為session的快取伺服器
  • 快取佇列

redis和memcache

mysql redis memcache
型別 關係型 非關係型 非關係型
儲存位置 磁碟 磁碟和記憶體 記憶體
儲存過期 不支援 支援 支援
讀取效能 非常高 非常高

redis物件儲存方式

JSON字串:需要將物件轉換為JSON字串,當做字串處理,直接使用get、set使用。設定和獲取簡單,但沒有提供專門的方法將物件轉換為JSON。(JSONlib)欄位不多用本方式 位元組流:需要做序列化為位元組儲存,資料量大采用本方式

redis的淘汰機制

設定最大使用記憶體:server.maxmemory 記憶體大小有限,需要儲存有效資料

  • noeviction:當記憶體使用達到閾值的時候,所有引起申請記憶體的命令會報錯。
  • allkeys-lru:在主鍵空間中,優先移除最近未使用的key。
  • volatile-lru:在設定了過期時間的鍵空間中,優先移除最近未使用的key。最近最少
  • allkeys-random:在主鍵空間中,隨機移除某個key。
  • volatile-random:在設定了過期時間的鍵空間中,隨機移除某個key。
  • volatile-ttl:在設定了過期時間的鍵空間中,具有更早過期時間的key優先移除。

Java訪問Redis

  1. 使用jedis java客戶端訪問redis伺服器
  2. 使用spring叢集時,可使用spring data訪問redis,二次封裝

redis叢集

當一臺資料庫伺服器無法滿足需求時,用redis叢集處理,採用讀取分離。